Список всех подкатегорий из категории

30 мар. 2011 г., 16:56:04
Просмотры: 131K
Голосов: 30

Как я могу получить все подкатегории из определенной категории?

1
Комментарии

Как объясняется здесь, вы также можете использовать get_terms(): https://stackoverflow.com/questions/22443352/how-to-get-sub-categories-by-parent-category-id-in-wordpress

Pbinder Pbinder
7 авг. 2019 г. 19:18:20
Все ответы на вопрос 2
4
39

Да, вы можете использовать функцию get_categories() с параметром 'child_of'. Например, чтобы получить все подкатегории для категории с ID 17:

$args = array('child_of' => 17);
$categories = get_categories( $args );
foreach($categories as $category) { 
    echo '<p>Категория: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "Просмотреть все записи в %s" ), $category->name ) . '" ' . '>' . $category->name.'</a> </p> ';
    echo '<p> Описание:'. $category->description . '</p>';
    echo '<p> Количество записей: '. $category->count . '</p>';  
}

Этот код получит все категории, которые являются потомками (т.е. дочерними и внучатыми категориями).

Если вам нужно отобразить только прямых потомков (только дочерние категории), используйте параметр 'parent'.

$args = array('parent' => 17);
$categories = get_categories( $args );
foreach($categories as $category) { 
    echo '<p>Категория: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "Просмотреть все записи в %s" ), $category->name ) . '" ' . '>' . $category->name.'</a> </p> ';
    echo '<p> Описание:'. $category->description . '</p>';
    echo '<p> Количество записей: '. $category->count . '</p>';  
}
30 мар. 2011 г. 17:13:10
Комментарии

Просто предложение: Учитывая популярность пользовательских типов записей и таксономий, я считаю, что лучше предлагать get_terms, так как это помогает пользователям ознакомиться с общими функциями получения терминов, тогда как функции для категорий в некоторой степени специфичны для встроенной таксономии (хотя и не во всех случаях). Конечно, вы можете не согласиться, это просто предложение... ;)

t31os t31os
30 мар. 2011 г. 17:49:21

Я согласен, что get_terms() может быть лучше.

Django Reinhardt Django Reinhardt
4 апр. 2016 г. 17:08:50

@t31os - не могли бы вы опубликовать ответ с использованием get_terms, пожалуйста?

vsync vsync
30 мар. 2018 г. 23:23:33

обратите внимание, по умолчанию это не покажет категории, в которых нет записей. используйте hide_empty => false, чтобы получить все категории (начиная с последних версий wordpress)

Sumit Wadhwa Sumit Wadhwa
4 февр. 2020 г. 16:06:46
0

Для пользовательских типов записей "категории" используйте get_terms().

(Модификация ответа @Bainternet)

            $categories = get_terms( array(
                'taxonomy' => 'product_cat',
                'hide_empty' => false,
                'parent' => 17 // или
                //'child_of' => 17 // чтобы включить не только прямых потомков
            ) );
            
            foreach($categories as $category) { 
                echo '<p>Категория: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "Просмотреть все записи в %s" ), $category->name ) . '" ' . '>' . $category->name.'</a> </p> ';
                echo '<p> Описание:'. $category->description . '</p>';
                echo '<p> Количество записей: '. $category->count . '</p>';  
            }
17 февр. 2022 г. 11:51:23