Cara memodifikasi taksonomi yang sudah terdaftar

18

Hari ini saya perlu mengubah argumen tentang taksonomi khusus yang sudah didaftarkan oleh plugin pihak ketiga . Secara khusus saya ingin mengatur show_admin_columnargumen truedan mengubah rewritesiput sehingga bukan hanya siput taksonomi. Dalam hal ini, itu adalah tipe pos "Orang" dengan taksonomi khusus "Kategori Orang".

Saya terkejut ini tidak ditanyakan sebelumnya, jadi inilah pertanyaan dan jawaban.

mrwweb
sumber
Hanya catatan tambahan bagi siapa saja yang macet, ingat untuk menyiram permalink sebelum memeriksa hasilnya.
un.pez.vivo

Jawaban:

22

register_taxonomy()adalah alat untuk pekerjaan itu. Dari Codex:

Fungsi ini menambah atau menimpa taksonomi.

Salah satu opsi adalah menyalin register_taxonomy() $argsdan memodifikasinya. Namun, itu berarti bahwa setiap perubahan di masa depan dengan register_taxonomy()kode asli akan ditimpa.

Oleh karena itu, setidaknya dalam kasus ini, lebih baik mendapatkan argumen asli, memodifikasi argumen yang ingin saya ubah, dan kemudian mendaftar ulang taksonomi. Inspirasi untuk solusi ini ditujukan ke @Otto dalam jawaban ini untuk pertanyaan serupa tentang jenis posting kustom .

Menggunakan peoplejenis pos kustom dan people_categorytaksonomi dari contoh, ini akan melakukannya:

function wpse_modify_taxonomy() {
    // get the arguments of the already-registered taxonomy
    $people_category_args = get_taxonomy( 'people_category' ); // returns an object

    // make changes to the args
    // in this example there are three changes
    // again, note that it's an object
    $people_category_args->show_admin_column = true;
    $people_category_args->rewrite['slug'] = 'people';
    $people_category_args->rewrite['with_front'] = false;

    // re-register the taxonomy
    register_taxonomy( 'people_category', 'people', (array) $people_category_args );
}
// hook it up to 11 so that it overrides the original register_taxonomy function
add_action( 'init', 'wpse_modify_taxonomy', 11 );

Catatan di atas bahwa saya register_taxonomy()mengetik argumen ketiga ke jenis array yang diharapkan. Ini tidak sepenuhnya diperlukan karena register_taxonomy()penggunaan wp_parse_args()yang dapat menangani objectatau array. Yang mengatakan, register_taxonomy()'s $argsseharusnya disampaikan sebagai arraymenurut Codex, jadi ini terasa tepat untuk saya.

mrwweb
sumber
Saya mencoba melakukan ini untuk mengubah taksonomi datar menjadi taksonomi hierarkis. Saya hanya mengubah properti hierarkis menjadi true. Dengan melakukan ini, ini menyebabkan dua kotak meta untuk taksonomi di sebelah kanan layar edit posting, dan saya tidak dapat benar-benar menambahkan taksonomi ...
Joel Worsham
Pastikan Anda menggunakan siput yang sama (misalnya 'people_category') seperti taksonomi asli sehingga Anda menimpanya.
mrwweb
1
Jenius! Jenius murni! Bekerja dengan sempurna!
DaveyJake
1
Saya menemukan masalah dengan solusi ini: capabilitiesparameter disimpan secara internal capsehingga tidak akan diteruskan ke taksonomi terdaftar baru. Lihat jawaban saya untuk pertanyaan serupa di sini
Fabien Quatravaux
1
Ini luar biasa, saya menggunakannya untuk menambahkan url hierarkis ke taksonomi khusus.
Brian Peat