get_terms: определить, есть ли у термина таксономии дочерние элементы

18 нояб. 2014 г., 14:03:46
Просмотры: 23K
Голосов: 1

Я хочу определить, есть ли у термина таксономии дочерние элементы. Посмотрите код ниже, и я объясню, что имею в виду:

<?php
$terms = get_terms("wpsc_product_category");
if ( !empty( $terms ) && !is_wp_error( $terms ) ){
    foreach( get_terms( 'wpsc_product_category', array( 'hide_empty' => false, 'parent' => 0 ) ) as $parent_term ) { ?>
    <li class="header-menu-item" data-hook="<?php echo $parent_term->slug; ?>">
        <a href="<?php echo home_url(); ?>/products/<?php echo $parent_term->slug; ?>"><?php echo $parent_term->name; ?></a>                
    </li>
    <?php }
} ?>

Этот код выводит список всех родительских терминов таксономии для wpsc_product_category, но я хочу определить, есть ли у термина таксономии дочерние элементы или нет, и если есть, добавить класс parent к соответствующему элементу header-menu-item, чтобы я мог привязать к нему функцию jquery. Возможно ли это? Буду благодарен за любые предложения!

0
Все ответы на вопрос 2
2

Функция get_term_children должна помочь в этом случае.

Она возвращает массив, содержащий дочерние термины, либо пустой массив. Проверка, является ли этот массив истинным или нет, во время цикла позволит вам определить, нужно ли добавлять класс.

<?php
    $terms = get_terms('wpsc_product_category');
    if ( !empty( $terms ) && !is_wp_error( $terms ) ){
    foreach( get_terms( 'wpsc_product_category', array( 'hide_empty' => false, 'parent' => 0 ) ) as $parent_term ) {
        $term_children = get_term_children($parent_term->term_id, 'wpsc_product_category'); ?>
        <li class="header-menu-item<?php echo ($term_children ? ' parent' : ''); ?>" data-hook="<?php echo $parent_term->slug; ?>">
            <a href="<?php echo home_url(); ?>/products/<?php echo $parent_term->slug; ?>"><?php echo $parent_term->name; ?></a>                
        </li>
    <?php }
} ?>
18 нояб. 2014 г. 15:25:13
Комментарии

Спасибо за ваше предложение, но, кажется, оно не работает? Я внедрил код, но без эффекта, так как класс parent не добавляется?

user1374796 user1374796
18 нояб. 2014 г. 15:32:08

@PieterGoosen вуаля! Это исправление сработало, отлично получилось :)

user1374796 user1374796
18 нояб. 2014 г. 15:37:45
0

Вы можете попробовать использовать функцию get_term_children для создания массива всех дочерних элементов таксономии, а затем проверить его на пустоту с помощью empty().

Поскольку она возвращает пустой массив, вы можете сделать что-то вроде этого:

(Вам нужно будет узнать ID вашего термина (это число) и подставить его вместо переменной $term_id в коде ниже)

$term_id = 2
$taxonomy_name = 'wpsc_product_category';
$terms = get_term_children( $term_id, $taxonomy_name );

if ( !empty( $terms ) && !is_wp_error( $terms ) ){
 // выполните нужные действия
}
18 нояб. 2014 г. 15:26:48