Перевірте, чи є поточна категорія дітей


11

Мені потрібно сказати, чи є поточна спеціальна сторінка архіву таксономії, яку я переглядаю, має дочірні категорії. У мене склалася ситуація, коли є багато спеціальних категорій з дітьми, і на сайті є лише показ публікацій у кінці рядка. В іншому випадку він повинен показувати посилання на категорію, яка є наступним кроком вниз. Я знайшов цей фрагмент, але він, схоже, не працює для користувацьких таксономій.

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_termsфункція поверне масив, інакше він повернеться false.

Тестується і працює на моїй локальній установці ванілі за допомогою плагіну користувальницького інтерфейсу типу Post, який використовується для генерації CPT.


Коли я коментував print_r ($ діти) .... він виводив масив. Як це можна перетворити на if / else? Вибачте, я все ще дуже новачок у php
user29489

1
Нехтування Я використав це: if ($ діти) {echo 'Діти тут'; } else {echo 'Без дітей'; }
користувач29489

@ user29489 Ти маєш рацію, я не досить зрозуміла у своїй відповіді. Відредаговано для подальшого ознайомлення.
Монреаліст

1
Для тих, хто просто повинен знати, чи є діти та чи не потрібно отримувати дані для дитячих термінів, я пропоную додати, 'field' => 'count'щоб просто підрахувати кількість дітей.
JD

Чи працює це також із звичайними категоріями публікацій?
Піт

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
  ) 
);

Це виведе масив термінів, у яких немає дітей.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.