ดังนั้นมันก็เกิดขึ้นที่ฉันต้องการอะไรแบบนั้นสำหรับโครงการที่ฉันกำลังทำอยู่ ฉันเพียงแค่เขียนแบบสอบถามเพื่อเลือกโพสต์ทั้งหมดของประเภทที่กำหนดเองแล้วฉันจะตรวจสอบสิ่งที่เป็นเงื่อนไขที่แท้จริงของอนุกรมวิธานของพวกเขากำลังใช้
จากนั้นฉันได้รับเงื่อนไขทั้งหมดของการใช้อนุกรมวิธานget_terms()
นั้นและจากนั้นฉันใช้เฉพาะสิ่งที่อยู่ในรายการทั้งสองห่อไว้ในฟังก์ชั่นและฉันก็ทำเสร็จแล้ว
แต่แล้วฉันก็ต้องการมากกว่านั้นเพียงแค่ ID ของ: ฉันต้องการชื่อดังนั้นฉันจึงเพิ่มอาร์กิวเมนต์ใหม่ที่ชื่อว่า$fields
ดังนั้นฉันจึงสามารถบอกฟังก์ชั่นที่จะกลับมา จากนั้นฉันคิดว่าget_terms
ยอมรับข้อโต้แย้งมากมายและฟังก์ชั่นของฉันถูก จำกัด เพียงแค่คำศัพท์ที่ถูกใช้โดยประเภทโพสต์ดังนั้นฉันจึงเพิ่มif
คำสั่งอีกหนึ่งคำแล้วคุณไปที่นั่น:
ฟังก์ชั่น:
/* 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;
}
}
การใช้งาน:
หากคุณต้องการรายการของ id คำนั้น:
$terms = get_terms_by_post_type('tag','','snippet','ID');
หากคุณต้องการรายชื่อเทอมเท่านั้น:
$terms = get_terms_by_post_type('tag','','snippet','name');
หากคุณต้องการเพียงรายการของคำศัพท์แล้ว:
$terms = get_terms_by_post_type('tag','','snippet');
และถ้าคุณต้องการใช้อาร์กิวเมนต์พิเศษของ get_terms เช่น: orderby, order, hierarchical ...
$args = array('orderby' => 'count', 'order' => 'DESC', 'hide_empty' => 1);
$terms = get_terms_by_post_type('tag',$args,'snippet','get_terms');
สนุก!
ปรับปรุง:
หากต้องการแก้ไขการนับจำนวนการเปลี่ยนแปลงประเภทโพสต์เฉพาะ:
foreach ($current_terms as $t){
//avoid duplicates
if (!in_array($t,$terms)){
$terms[] = $t;
}
}
ถึง:
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;
}
}