Saya memiliki dua jenis pos kustom 'negara' dan 'kota' dan 'bendera' taksonomi bersama.
Jika saya menggunakan:
<?php $flags = get_terms('flag', 'orderby=name&hide_empty=0');
Saya mendapatkan daftar semua istilah dalam taksonomi, tetapi saya ingin membatasi daftar untuk jenis tulisan 'negara'.
Bagaimana saya bisa melakukannya?
Menggunakan solusi baru
<?php
$flags = wpse57444_get_terms('flags',array('parent' => 0,'hide_empty' => 1,'post_types' =>array('country')));
foreach ($flags as $flag) {
$childTerms = wpse57444_get_terms('flags',array('parent' => $flag->term_id,'hide_empty' => 1,'post_types' =>array('country')));
foreach ($childTerms as $childTerm) {
echo $childTerm->name.'<br />';
}
}
?>
Saya tidak dapat mengulangi $ childTerm-> nama. Mengapa?
custom-post-types
taxonomy
terms
pengguna1443216
sumber
sumber
Jawaban:
Saya khawatir ini tidak mungkin dilakukan secara asli (belum?). Lihat trac ini: http://core.trac.wordpress.org/ticket/18106
Demikian pula pada halaman admin taksonomi jumlah posting mencerminkan semua jenis posting. (
Saya cukup yakin ada tiket trac untuk itu juga) http://core.trac.wordpress.org/ticket/14084Lihat juga, posting terkait ini .
Solusi baru
Setelah menulis yang di bawah ini, saya telah merilis cara yang lebih baik (alteast dalam arti bahwa Anda dapat melakukan lebih banyak) adalah dengan menggunakan filter yang disediakan dalam
get_terms()
panggilan. Anda dapat membuat fungsi pembungkus yang menggunakanget_terms
dan (secara kondisional) menambahkan filter untuk memanipulasi kueri SQL (untuk membatasi menurut jenis posting).Fungsi ini mengambil argumen yang sama dengan
get_terms($taxonomies, $args)
.$args
mengambil argumen tambahanpost_types
yang membutuhkan array | string tipe posting.Tetapi saya tidak dapat menjamin bahwa semuanya berfungsi 'seperti yang diharapkan' (saya berpikir untuk menghitungnya). Tampaknya berfungsi hanya dengan default
$args
untukget_terms
.Pemakaian
Bekerja di sekitar
Terinspirasi dari tiket trac di atas, (diuji, dan berhasil untuk saya)
Pemakaian
atau
sumber
$args = array('parent'=>0,'orderby'=>'name','hide_empty'=>0);
. Saya akan mengedit ini untuk mengizinkan string permintaan ...$terms = wpse57444_filter_terms_by_cpt('flag',array('country','city'));
?wpse57444_get_terms()
$args
adalah argumen kedua. Di sana Anda baru saja meletakkanwpse57444_get_terms( 'flag', array( 'country', 'city' ) );
@ stephen-harris jawaban di atas hanya bekerja untuk saya sebagian. Jika saya mencoba menggunakannya dua kali pada halaman, itu tidak berhasil. Juga, gagasan untuk mengubur pertanyaan mysql seperti itu membuat saya khawatir - saya pikir praktik yang lebih baik untuk menggunakan metode inti untuk mencapai solusi, untuk menghindari konflik dengan pembaruan WP di masa depan. Ini solusi saya, berdasarkan beberapa komentar # 7 di tiket Trac yang dia referensikan
Pemakaian:
Ini hanya berfungsi untuk satu jenis posting dan satu taksonomi, karena itulah yang saya butuhkan, tetapi tidak akan terlalu sulit untuk memodifikasi ini untuk menerima beberapa nilai.
Ada beberapa yang menyebutkan pada thread Trac bahwa ini mungkin tidak skala dengan baik, tapi saya sedang bekerja pada skala yang cukup kecil dan tidak memiliki masalah dengan kecepatan.
sumber
Dua jenis pos kustom 'negara' dan 'kota' dan 'bendera' taksonomi bersama. Anda ingin membatasi daftar ke jenis posting 'negara'.
Ini solusi yang lebih sederhana:
sumber
[Sunting] Ini adalah komentar pada jawaban yang sangat baik oleh Stephen Harris.
Itu tidak mengembalikan istilah apa pun jika digunakan dengan beberapa jenis posting seperti ini
$flags = wpse57444_get_terms('flags', array('post_types' => array('country','city')));
. Ini karena $ wpdb-> ready membersihkan string $ post_types_strp.post_type IN('country,city')
ketika seharusnyap.post_type IN('country','city')
. Lihat tiket ini: 11102 . Gunakan solusi dari topik ini untuk menyiasatinya: /programming//a/10634225sumber
Saya juga mencoba menggunakan jawaban @Stephen Harris, tetapi permintaan yang saya butuhkan cukup sulit untuk ditulis sebagai satu permintaan dan menggunakan potongan filter.
Selain itu, saya juga perlu menggunakan fungsi itu beberapa kali di halaman yang sama dan saya memecahkan masalah dengan mendeklarasikan
wpse_filter_terms_by_cpt
fungsi di luar fungsi wrapper.Anyways @Mark Pruce menjawab menurut saya lebih cocok, untuk alasan yang sama katanya, meskipun perlu Anda membuat satu permintaan lagi (dan loop terkait) untuk menyiapkan argumen untuk
wp_get_object_terms
fungsi.sumber