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

17

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

<?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'); ?> /*This should be the children of the parent category */
    </div>
    </dd>
<?php } ?>

Любая помощь будет отличной

Крис Да Си
источник

Ответы:

19

Вы не можете просто передать строку «parent» get_categories. Вы должны передать ID родителя.

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

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

child_of (integer) Показать все категории, которые являются потомками (то есть детьми и внуками) категории, идентифицированной по ее идентификатору. Для этого параметра нет значения по умолчанию. Если параметр используется, параметр hide_empty имеет значение false.

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

Теперь вам нужно перебрать $categories. Вы не можете просто повторить массив.

foreach ($categories as $c) {
    var_dump($c);
    // what you really want instead of var_dump is something to
    // to create markup-- list items maybe, For example...
    echo '<li>'.$c->cat_name.'</li>';
}
s_ha_dum
источник
К сожалению, это просто дает мне вывод Array. Никакие ценности не вводятся.
Крис Да Си
«Массив» - это то, что происходит, когда вы пытаетесь отобразить массив. Вам нужно перебрать массив и повторить отдельные элементы.
s_ha_dum
2
Возможно, вы захотите добавить 'hide_empty' => false. Также показывать пустые категории.
Флорис
2

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

<?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>';
        }
    }
?>
Violla Queue
источник
Пожалуйста, измените свой ответ и добавьте объяснение: почему это может решить проблему?
fuxia
0

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

$last_categories = get_categories(
  array(
    'taxonomy' => 'product_cat',
    'parent' => $sub_category->cat_ID
  )
);
croppio.com
источник