Saya benar-benar mengalami beberapa masalah dengan memasukkan istilah. Ini skenario saya: Saya punya taksonomi yang disebut 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);
Jelas ini hierarki. Level atas berisi tipe rilis ieDVD, blu-ray. Tingkat di bawah itu adalah daerah yaitu. Wilayah 1, Wilayah 2, dll. Jadi, Hirarki yang saya inginkan adalah: DVD --Region 0 --Region 1 --Region 2 --Region 3 --Region 4 --Region 5 --Region 5 --Region 6 Blu-Ray - -Region A --Region B --Region C
Saya membuat fungsi yang disebut insert_term di kelas saya untuk memeriksa apakah ada istilah, lalu masukkan jika tidak:
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;
}
}
Dan kemudian saya memanggil fungsi kata untuk memasukkan istilah:
$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']));
Masalah yang saya alami adalah bahwa meskipun istilah dimasukkan dalam database, mereka tidak muncul di halaman taksonomi. Paling-paling, istilah tingkat atas muncul. Saya harus mencoba berbagai hal sampai memaksa WordPress untuk mengenali istilah sublevel. Adakah yang mengalami hal ini atau dapat merekomendasikan cara yang lebih baik?
EDIT: Memperhatikan sesuatu yang lain: Saya mencoba menghapus persyaratan dari basis data kemudian menonaktifkan dan mengaktifkan kembali plugin yang menyatakan persyaratan. Dua istilah induk muncul di halaman syarat, tetapi istilah anak tidak. Istilah anak DO muncul di menu tarik turun "Induk" tempat Anda ingin membuat istilah baru. Ketika saya menambahkan istilah yang orang tuanya adalah salah satu istilah anak dan menyegarkan halaman, MAKA istilah anak muncul.
sumber
Jawaban:
Hirarki di-cache dan tidak divalidasi dengan benar. Ini adalah bug, masih belum terselesaikan pada WP 3.1.
Solusinya adalah menelepon
delete_option("{$taxonomy}_children");
langsung.Lihat fungsi _get_term_hierarchy ().
sumber
2 sen saya - Saya sedang membangun ekstensi untuk plugin WooCommerce yang memungkinkan kategori katalog / manajemen produk melalui file CSV yang diunggah. Saya mengalami masalah yang sama saat membuat kategori. Solusi untuk menghapus kategori WooCommerce yang di-cache adalah menelepon
delete_option("product_cat_children");
setelah loop yang membuat kategori dan sub-kategori. Semoga ini bisa membantu orang lain!sumber
Anda mungkin dapat menerima objek kembali dari
term_exists($term, $taxonomy, $parent)
jika taksonomi diatur saat dipanggil. Sudah diatur dalam kode sampel yang Anda posting, jadi saya berasumsi itu masalahnya.Pernyataan sisipan Anda mengharapkan sebuah array ketika mereka merujuk kunci ..
Misalnya.
..tapi Anda mungkin benar-benar mendapatkan objek kembali
term_exists
.Cara cepat untuk menentukan apakah itu masalahnya adalah memperbarui baris ini.
untuk..
Jika saya benar dan itu masalahnya, itu harus memperbaikinya, meskipun saya tidak akan menyebutnya perbaikan elegan.
Semoga itulah jawaban / bantuan yang Anda cari .. :)
sumber
Terima kasih. Pertanyaan ini banyak membantu. Saya berjuang dengan unit test dan ternyata harus saya lakukan
setelah menambahkan kategori tingkat atas saya, dan kemudian melakukannya lagi setelah menambahkan kategori tingkat kedua untuk memungkinkan wordpress menghapus semuanya dan membiarkan unit test lulus. Ini berfungsi di sekitar kebutuhan untuk "memuat halaman kedua / refresh ekstra" sebagaimana dimaksud dalam jawaban lain di sini.
sumber
solusi saya:
(mungkin diperlukan untuk membersihkan catatan cache ..)
sumber
Hanya pembaruan terakhir: ini diperbaiki sepanjang jalan kembali di WP 3.9: https://core.trac.wordpress.org/ticket/14485
sumber