Jadi kebetulan saya membutuhkan sesuatu seperti itu untuk proyek yang sedang saya kerjakan. Saya hanya menulis kueri untuk memilih semua posting dari jenis khusus, lalu saya memeriksa apa saja persyaratan taksonomi saya yang sebenarnya mereka gunakan.
Lalu saya mendapatkan semua istilah yang menggunakan taksonomi itu get_terms()
dan kemudian saya hanya menggunakan yang ada di kedua daftar, membungkusnya dalam suatu fungsi dan saya selesai.
Tetapi kemudian saya membutuhkan lebih dari sekedar ID: Saya membutuhkan nama-nama sehingga saya menambahkan argumen baru bernama $fields
sehingga saya bisa memberi tahu fungsi apa yang harus dikembalikan. Lalu saya pikir bahwa get_terms
menerima banyak argumen dan fungsi saya terbatas hanya istilah yang sedang digunakan oleh jenis posting jadi saya menambahkan satu if
pernyataan lagi dan begini :
Fungsi:
/* get terms limited to post type
@ $taxonomies - (string|array) (required) The taxonomies to retrieve terms from.
@ $args - (string|array) all Possible Arguments of get_terms http://codex.wordpress.org/Function_Reference/get_terms
@ $post_type - (string|array) of post types to limit the terms to
@ $fields - (string) What to return (default all) accepts ID,name,all,get_terms.
if you want to use get_terms arguments then $fields must be set to 'get_terms'
*/
function get_terms_by_post_type($taxonomies,$args,$post_type,$fields = 'all'){
$args = array(
'post_type' => (array)$post_type,
'posts_per_page' => -1
);
$the_query = new WP_Query( $args );
$terms = array();
while ($the_query->have_posts()){
$the_query->the_post();
$curent_terms = wp_get_object_terms( $post->ID, $taxonomy);
foreach ($curent_terms as $t){
//avoid duplicates
if (!in_array($t,$terms)){
$terms[] = $c;
}
}
}
wp_reset_query();
//return array of term objects
if ($fields == "all")
return $terms;
//return array of term ID's
if ($fields == "ID"){
foreach ($terms as $t){
$re[] = $t->term_id;
}
return $re;
}
//return array of term names
if ($fields == "name"){
foreach ($terms as $t){
$re[] = $t->name;
}
return $re;
}
// get terms with get_terms arguments
if ($fields == "get_terms"){
$terms2 = get_terms( $taxonomies, $args );
foreach ($terms as $t){
if (in_array($t,$terms2)){
$re[] = $t;
}
}
return $re;
}
}
Pemakaian:
Jika Anda hanya memerlukan daftar istilah id maka:
$terms = get_terms_by_post_type('tag','','snippet','ID');
Jika Anda hanya perlu daftar nama istilah maka:
$terms = get_terms_by_post_type('tag','','snippet','name');
Jika Anda hanya perlu daftar objek jangka maka:
$terms = get_terms_by_post_type('tag','','snippet');
Dan jika Anda perlu menggunakan argumen tambahan get_terms seperti: orderby, order, hierarchical ...
$args = array('orderby' => 'count', 'order' => 'DESC', 'hide_empty' => 1);
$terms = get_terms_by_post_type('tag',$args,'snippet','get_terms');
Nikmati!
Memperbarui:
Untuk memperbaiki jumlah istilah untuk perubahan jenis posting tertentu:
foreach ($current_terms as $t){
//avoid duplicates
if (!in_array($t,$terms)){
$terms[] = $t;
}
}
untuk:
foreach ($current_terms as $t){
//avoid duplicates
if (!in_array($t,$terms)){
$t->count = 1;
$terms[] = $t;
}else{
$key = array_search($t, $terms);
$terms[$key]->count = $terms[$key]->count + 1;
}
}