Yani üzerinde çalıştığım bir proje için böyle bir şeye ihtiyacım var. Sadece özel bir türün tüm mesajlarını seçmek için bir sorgu yazdım, sonra kullandıkları taksonominin gerçek terimlerinin ne olduğunu kontrol ediyorum.
Sonra bu taksonominin tüm terimlerini kullanarak aldım get_terms()
ve sonra sadece her iki listede olanları kullandım, bir fonksiyona sardım ve bitti.
Ama sonra daha sadece ID's daha ihtiyacım vardı: isimlere ihtiyacım vardı, bu $fields
yüzden fonksiyona ne döneceğini söyleyebileceğim yeni bir argüman ekledim . Sonra get_terms
birçok argüman kabul ve fonksiyonum sadece bir yazı türü tarafından kullanılan terimler ile sınırlı olduğunu düşündüm, bu yüzden bir ifade daha ekledi if
ve işte gidiyorsun:
İşlev:
/* 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;
}
}
Kullanımı:
Yalnızca terim kimlikleri listesine ihtiyacınız varsa:
$terms = get_terms_by_post_type('tag','','snippet','ID');
Yalnızca bir terim listesine ihtiyacınız varsa:
$terms = get_terms_by_post_type('tag','','snippet','name');
Yalnızca terim nesneleri listesine ihtiyacınız varsa:
$terms = get_terms_by_post_type('tag','','snippet');
Ve get_terms gibi ekstra argümanlar kullanmanız gerekiyorsa: orderby, order, hiyerarşik ...
$args = array('orderby' => 'count', 'order' => 'DESC', 'hide_empty' => 1);
$terms = get_terms_by_post_type('tag',$args,'snippet','get_terms');
Zevk almak!
Güncelleme:
Terim sayısını belirli yazı tipi değişikliğine düzeltmek için:
foreach ($current_terms as $t){
//avoid duplicates
if (!in_array($t,$terms)){
$terms[] = $t;
}
}
için:
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;
}
}