Получить дочерние категории родительской категории

29 нояб. 2012 г., 17:32:36
Просмотры: 138K
Голосов: 25

Я пытаюсь получить все дочерние категории для отображения в этом цикле, но у меня возникли трудности с кодом. Вот что у меня есть на данный момент.

<?php $args=array('orderby' => 'name', 'order' => 'ASC');
    $categories=get_categories($args); 
    foreach ($categories as $cat) { ?>
    <dt><a href="#" class="customer-acquisitiontop" id="<?php echo $cat->slug; ?>" data-filter=".<?php echo $cat->slug; ?>"><h2><?= $cat->cat_name; ?></h2></a></dt>
    <dd><div class="services">
    <?= $categories=get_categories('parent'); ?> /*Здесь должны быть дочерние категории родительской категории */
    </div>
    </dd>
<?php } ?>

Буду благодарен за любую помощь

0
Все ответы на вопрос 4
5
30

Нельзя просто передать строку "parent" в функцию get_categories. Необходимо передать ID родительской категории.

$categories=get_categories(
    array( 'parent' => $cat->cat_ID )
);

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

child_of (integer) Отображает все категории, которые являются потомками (т.е. дочерними и внучатыми) категории, указанной по её ID. Нет значения по умолчанию для этого параметра. Если параметр используется, параметр hide_empty устанавливается в false.

parent (integer) Отображает только категории, которые являются прямыми потомками (т.е. только дочерними) категории, указанной по её ID. Это НЕ работает так же, как параметр 'child_of'. Нет значения по умолчанию для этого параметра. [В версии 2.8.4]

Теперь нужно выполнить цикл по массиву $categories. Нельзя просто вывести массив.

foreach ($categories as $c) {
    var_dump($c);
    // вместо var_dump лучше использовать что-то,
    // что создаст разметку — например, элементы списка. Например...
    echo '<li>'.$c->cat_name.'</li>';
}
29 нояб. 2012 г. 18:01:50
Комментарии

К сожалению, это просто выводит мне Array. Никакие значения не извлекаются.

Chris Da Sie Chris Da Sie
29 нояб. 2012 г. 18:37:01

'Array' появляется, когда вы пытаетесь вывести массив через echo. Вам нужно перебрать массив в цикле и вывести отдельные элементы.

s_ha_dum s_ha_dum
29 нояб. 2012 г. 18:39:59

Возможно, стоит добавить 'hide_empty' => false, чтобы показывать и пустые категории.

Floris Floris
18 июн. 2018 г. 17:09:27

опционально, вы можете получить ID категории таким образом ->$categories = get_categories( array( 'parent' => get_cat_ID( 'Your Category Name' ) ) ); ... пока название категории не изменится

aequalsb aequalsb
16 февр. 2022 г. 15:28:03

Чтобы получить категории, которые не являются категориями записей, добавьте taxonomy в массив, например array( 'parent' => 999, 'taxonomy' => 'documentation_category' ).

And Finally And Finally
22 июн. 2022 г. 16:32:20
1

Используйте приведенный ниже код в вашем файле archive.php. Этот код поможет вам:

$term = get_queried_object();
    
$children = get_terms( $term->taxonomy, array(
    'parent'    => $term->term_id,
    'hide_empty' => false
));
    
if ( $children ) { 
    foreach( $children as $subcat ) {
        echo '<li><a href="' . esc_url(get_term_link($subcat, $subcat->taxonomy)) . '">' . $subcat->name . '</a></li>';
    }
}
25 апр. 2018 г. 10:18:18
Комментарии

Пожалуйста, [отредактируйте] ваш ответ и добавьте объяснение: почему это может решить проблему?

fuxia fuxia
25 апр. 2018 г. 10:57:45
0

Если в массиве нет значений, вы можете попробовать следующий подход:

$last_categories = get_categories(
  array(
    'taxonomy' => 'product_cat', // Таксономия для категорий товаров
    'parent' => $sub_category->cat_ID // ID родительской категории
  )
);
22 дек. 2019 г. 19:00:06
0
-1

Для получения дочерних категорий можно использовать следующий код.

$category = get_queried_object(); // получаем родительскую категорию в архиве или в любом месте, где вызывается объект категории
$categories = get_categories(
                        array( 'parent' => $category->term_id,
                                'hide_empty' => false )
                                ); 

Примечание: Я использовал параметр 'hide_empty' => false, чтобы показывать категории без записей.

Затем используйте массив $categories для цикла и создания нужной разметки.

2 мар. 2020 г. 07:55:59