Periksa apakah Kategori Saat Ini memiliki Anak

11

Saya perlu memberi tahu apakah halaman arsip taksonomi ubahsuaian saat ini yang saya lihat memiliki kategori anak. Saya punya situasi di mana ada banyak kategori khusus dengan anak-anak dan situs ini hanya menampilkan pos di akhir baris. Kalau tidak, itu akan menunjukkan tautan ke kategori yang merupakan langkah selanjutnya. Saya telah menemukan cuplikan ini, tetapi sepertinya tidak berfungsi untuk taksonomi khusus.

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

Jawaban:

10

Mungkin ada atau mungkin tidak ada cara yang lebih baik untuk melakukan ini, tetapi inilah cara saya akan melakukannya:

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

Jika istilah taksonomi saat ini memiliki anak get_termsfungsi akan mengembalikan array, jika tidak maka akan kembali false.

Diuji dan berfungsi pada pemasangan vanilla lokal saya dengan plugin Custom Post Type UI yang digunakan untuk pembuatan CPT.

montrealis
sumber
Ketika saya menghapus komentar print_r ($ children) .... itu menghasilkan sebuah array. Bagaimana itu bisa berubah menjadi if / else? Maaf, saya masih sangat baru di php
user29489
1
Abaikan saya menggunakan ini: if ($ children) {echo 'Children Here'; } else {echo 'No Children'; }
user29489
@ user29489 Anda benar, saya tidak cukup jelas dalam jawaban saya. Diedit untuk referensi di masa mendatang.
montrealist
1
Bagi mereka yang hanya perlu tahu apakah ada anak dan tidak perlu mendapatkan data untuk persyaratan anak, saya sarankan menambahkan 'field' => 'count'hanya menghitung jumlah anak.
JD
Apakah ini bekerja dengan kategori posting normal juga?
Pete
9

Ada juga kemungkinan WP umum untuk melakukan ini melalui get_term_children .

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

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

Dengan asumsi bahwa Anda mencoba memfilter istilah Anda untuk hanya menampilkan istilah yang memiliki anak atau tidak, Anda sebenarnya dapat menggunakan childlessparameter dalam get_terms()fungsi Anda .

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

Ini akan menampilkan serangkaian istilah yang tidak memiliki anak.

Frits
sumber