ตรวจสอบว่าหมวดหมู่ปัจจุบันมีลูกหรือไม่


11

ฉันต้องบอกว่าหน้าจัดเก็บภาษีอนุกรมวิธานที่กำหนดเองปัจจุบันที่ฉันกำลังดูมีหมวดหมู่ลูกหรือไม่ ฉันมีสถานการณ์ที่มีหมวดหมู่ที่กำหนดเองจำนวนมากที่มีเด็ก ๆ และไซต์มีไว้เพื่อแสดงโพสต์เมื่อสิ้นสุดบรรทัดเท่านั้น มิฉะนั้นจะแสดงลิงก์ไปยังหมวดหมู่ที่เป็นขั้นตอนถัดไป ฉันพบข้อมูลโค้ดนี้แล้ว แต่ดูเหมือนว่าจะใช้งานไม่ได้กับ taxonomies แบบกำหนดเอง

function category_has_children() {
global $wpdb;   
$term = get_queried_object();
$category_children_check = $wpdb->get_results(" SELECT * FROM wp_term_taxonomy WHERE parent = '$term->term_id' ");
    if ($category_children_check) {
        return true;
    } else {
       return false;
    }
}   

<?php
    if (!category_has_children()) {
        //use whatever loop or template part here to show the posts at the end of the line
   get_template_part('loop', 'index'); 
       }   

    else {
       // show your category index page here
    }
?>

คำตอบ:


10

อาจมีหรือไม่มีวิธีที่ดีกว่าในการทำเช่นนี้ แต่นี่คือวิธีที่ฉันจะทำ:

$term = get_queried_object();

$children = get_terms( $term->taxonomy, array(
'parent'    => $term->term_id,
'hide_empty' => false
) );
// print_r($children); // uncomment to examine for debugging
if($children) { // get_terms will return false if tax does not exist or term wasn't found.
    // term has children
}

หากระยะเวลาอนุกรมวิธานปัจจุบันมีเด็ก ๆฟังก์ชั่นจะกลับอาร์เรย์มิฉะนั้นก็จะกลับมาget_termsfalse

ทดสอบและทำงานกับการติดตั้งวานิลลาในพื้นที่ของฉันด้วยปลั๊กอินCustom Post Type UI ที่ใช้สำหรับการสร้าง CPT


เมื่อฉันไม่ใส่เครื่องหมายข้อคิดเห็น print_r ($ children) .... มันแสดงอาร์เรย์ มันจะกลายเป็น if / else ได้อย่างไร? ขออภัยฉันยังใหม่กับ php
user29489

1
ฉันไม่สนใจสิ่งนี้: ถ้า ($ children) {echo 'Children Here'; } else {echo 'No Children'; }
user29489

@ user29489 คุณพูดถูกฉันยังไม่ชัดเจนในคำตอบของฉัน แก้ไขเพื่อการอ้างอิงในอนาคต
คณิตศาสตร์ที่แท้จริง

1
สำหรับผู้ที่เพียงแค่ต้องรู้ว่ามีเด็ก ๆ หรือไม่และไม่ต้องการรับข้อมูลสำหรับข้อกำหนดของเด็กฉันขอแนะนำให้เพิ่ม'field' => 'count'เพียงนับจำนวนเด็ก
JD

สิ่งนี้ใช้ได้กับหมวดหมู่โพสต์ปกติด้วยหรือไม่
Pete

9

นอกจากนี้ยังมีความเป็นไปได้ WP ทั่วไปจะทำเช่นนี้ผ่านget_term_children

<?php
$children = get_term_children($termId, $taxonomyName);

if( empty( $children ) ) {
    //do something here
}

1

สมมติว่าคุณพยายามกรองคำเพื่อแสดงเฉพาะคำที่มีลูกหรือไม่คุณสามารถใช้childlessพารามิเตอร์ในget_terms()ฟังก์ชันของคุณได้

$children = get_terms( 
    'taxonomy' => '$taxonomy_slug',
    'hide_empty' => false,
    'childless' => true
  ) 
);

สิ่งนี้จะเอาท์พุตคำศัพท์ที่ไม่มีลูก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.