Kiểm tra xem Danh mục hiện tại có Trẻ em không


11

Tôi cần biết liệu trang lưu trữ phân loại tùy chỉnh hiện tại mà tôi đang xem có các danh mục con hay không. Tôi đã có một tình huống có rất nhiều danh mục tùy chỉnh với trẻ em và trang web chỉ hiển thị các bài đăng ở cuối dòng. Nếu không, nó sẽ hiển thị một liên kết đến danh mục đó là bước tiếp theo xuống. Tôi đã tìm thấy đoạn trích này, nhưng nó dường như không hoạt động đối với các nguyên tắc phân loại tùy chỉnh.

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
    }
?>

Câu trả lời:


10

Có thể có hoặc không có cách nào tốt hơn để làm điều này, nhưng đây là cách tôi sẽ làm:

$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
}

Nếu thuật ngữ phân loại hiện tại có con, get_termshàm sẽ trả về một mảng, nếu không nó sẽ trả về false.

Đã thử nghiệm và hoạt động trên bản cài đặt vanilla cục bộ của tôi với plugin UI Loại bài tùy chỉnh được sử dụng để tạo CPT.


Khi tôi không ghi chú print_r ($ children) .... nó đã xuất ra một mảng. Làm thế nào mà có thể được biến thành một if / khác? Xin lỗi, tôi vẫn còn rất mới với php
user29361 28/03/13

1
Bỏ qua tôi đã sử dụng cái này: if ($ children) {echo 'Children Here'; } other {echo 'Không có trẻ em'; }
dùng2989

@ user29361 Bạn nói đúng, tôi không đủ rõ ràng trong câu trả lời của mình. Chỉnh sửa để tham khảo trong tương lai.
montrealist

1
Đối với những người chỉ cần biết liệu có bất kỳ trẻ em nào và không cần lấy dữ liệu cho các điều khoản của trẻ em, tôi khuyên bạn nên thêm vào 'field' => 'count'để chỉ đếm số lượng trẻ em.
JD

Điều này có làm việc với các thể loại bài bình thường là tốt?
Pete

9

Ngoài ra còn có một khả năng WP chung để thực hiện điều này thông qua get_term_children .

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

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

1

Giả sử rằng bạn đang cố gắng lọc các thuật ngữ của mình để chỉ hiển thị các thuật ngữ có con hoặc không, bạn thực sự có thể sử dụng childlesstham số trong get_terms()hàm của mình .

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

Điều này sẽ tạo ra một loạt các điều khoản không có con.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.