Naprawdę mam kilka problemów ze wstawianiem terminów. Oto mój scenariusz: mam taksonomię o nazwie veda_release_type:
//Release Type and Region
$labels = array(
'name'=> _x('Release Types/Regions', 'taxonomy general name' ),
'singular_name' => _x('Release Type/Region', 'taxonomy singular name'),
'search_items' => __('Search Release Types/Regions'),
'popular_items' => __('Popular Release Types/Regions'),
'all_items' => __('All Release Types/Regions'),
'edit_item' => __('Edit Release Type/Regions'),
'edit_item' => __('Edit Release Type/Region'),
'update_item' => __('Update Release Type/Region'),
'add_new_item' => __('Add New Release Type/Region'),
'new_item_name' => __('New Release Type/Region Name'),
'separate_items_with_commas' => __('Seperate Release Types/Regions with Commas'),
'add_or_remove_items' => __('Add or Remove Release Types/Regions'),
'choose_from_most_used' => __('Choose from Most Used Release Types/Regions')
);
$args = array(
'hierarchical' =>true,
'labels' => $labels,
'query_var' => true,
'rewrite' => array('slug' =>'release_type')
);
register_taxonomy('veda_release_type', 'veda_release',$args);
To oczywiście hieraryczne. Najwyższy poziom zawiera typy wydań tj. DVD, Blu-ray. Pod tym poziomem są regiony, tj. Region 1, Region 2 itd. Hierarchia, którą chcę, to: DVD - region 0 - region 1 - region 2 - region 3 - region 4 - region 5 - region 6 Blu-Ray - - region A - region B - region C
Utworzyłem funkcję o nazwie insert_term w mojej klasie, aby sprawdzić, czy istnieje termin, a następnie wstaw go, jeśli nie:
public function insert_term ($term, $taxonomy, $args = array()) {
if (isset($args['parent'])) {
$parent = $args['parent'];
} else {
$parent = 0;
}
$result = term_exists($term, $taxonomy, $parent);
if ($result == false || $result == 0) {
return wp_insert_term($term, $taxonomy, $args);
} else {
return (array) $result;
}
}
A potem wywołuję tę funkcję, aby wstawić warunki:
$dvd = $this->insert_term('DVD','veda_release_type');
$this->insert_term('Region 0','veda_release_type',array('parent'=>$dvd['term_id']));
$this->insert_term('Region 1','veda_release_type',array('parent'=>$dvd['term_id']));
$this->insert_term('Region 2','veda_release_type',array('parent'=>$dvd['term_id']));
$this->insert_term('Region 3','veda_release_type',array('parent'=>$dvd['term_id']));
$this->insert_term('Region 4','veda_release_type',array('parent'=>$dvd['term_id']));
$this->insert_term('Region 5','veda_release_type',array('parent'=>$dvd['term_id']));
$this->insert_term('Region 6','veda_release_type',array('parent'=>$dvd['term_id']));
$bd = $this->insert_term('Blu-Ray', 'veda_release_type');
$this->insert_term('Region A','veda_release_type',array('parent'=>$bd['term_id']));
$this->insert_term('Region B','veda_release_type',array('parent'=>$bd['term_id']));
$this->insert_term('Region C','veda_release_type',array('parent'=>$bd['term_id']));
Problemem jest to, że chociaż warunki są wprowadzane do bazy danych, nie pojawiają się na stronie taksonomii. Wyświetlane są co najwyżej warunki najwyższego poziomu. Muszę próbować różnych rzeczy, dopóki nie zmusi to WordPressa do rozpoznania warunków podpoziomu. Czy ktoś na to wpadł lub może polecić lepszy sposób?
EDYCJA: Zauważyłem coś innego: próbowałem usunąć warunki z bazy danych, a następnie dezaktywować i reaktywować wtyczkę, która deklaruje warunki. Dwa warunki nadrzędne są wyświetlane na stronie warunków, ale warunki podrzędne nie. Warunki potomne NIE pojawiają się w rozwijanym menu „Rodzic”, w którym chcesz utworzyć nowy termin. Kiedy dodam termin, którego rodzic jest jednym z warunków podrzędnych, i odświeżę stronę, TO pojawią się warunki podrzędne.