Как вывести дочерние категории wordpress

Как вывести дочерние категории wordpress

Для получения дочерних категорий определённой рубрики используется функция get_categories() с аргументом ‘child_of’. Указав ID родительской категории, можно получить массив её подкатегорий. Также полезным может быть параметр ‘hide_empty’ => false, если нужно вывести все дочерние категории, включая те, в которых нет записей.

Если требуется более точечный контроль, можно использовать get_terms() с параметрами ‘taxonomy’ => ‘category’ и ‘parent’ => ID. Этот способ предпочтительнее, если вы хотите исключить промежуточные уровни и получить дочерние категории первого уровня строго по ID родителя.

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

Для получения дочерних категорий в WordPress по ID родительской используется функция get_terms() с параметром ‘parent’. Указывайте таксономию ‘category’, если работаете с рубриками.

Пример кода:


$parent_id = 12; // ID родительской категории
$child_categories = get_terms( array(
'taxonomy'   => 'category',
'parent'     => $parent_id,
'hide_empty' => false, // true – исключает пустые категории
) );
if ( ! empty( $child_categories ) && ! is_wp_error( $child_categories ) ) {
foreach ( $child_categories as $category ) {
echo '<p>' . esc_html( $category->name ) . ' (ID: ' . $category->term_id . ')</p>';
}
}

Функция возвращает массив объектов WP_Term, содержащих информацию о каждой дочерней категории: название, ID, слаг, описание и другие свойства.

Если используется произвольная таксономия, замените ‘category’ на нужное значение в параметре taxonomy.

Чтобы вывести дочерние категории в цикле WordPress Loop, необходимо использовать функцию get_categories() с параметрами, которые ограничат выборку только дочерними рубриками. Для этого важно правильно настроить параметры запроса. В частности, вам нужно указать родительскую категорию с помощью параметра parent, а также ограничить отображение только нужных категорий.


$args = array(
'parent' => $parent_id, // ID родительской категории
'orderby' => 'name',    // Сортировка по имени
'order' => 'ASC'        // Порядок сортировки
);
$categories = get_categories($args);
foreach ($categories as $category) {
echo '
  • ' . $category->name . '
  • '; }

    В этом примере $parent_id – это ID родительской категории, для которой вы хотите вывести дочерние категории. Вы можете получить ID родительской категории, используя get_term_by() или задать его вручную.

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

    
    if (have_posts()) :
    while (have_posts()) : the_post();
    $categories = get_categories(array(
    'parent' => get_queried_object_id(),
    ));
    foreach ($categories as $category) {
    echo '
    • ' . $category->name . '
    '; } endwhile; endif;

    Для улучшения производительности можно использовать параметр hide_empty в функции get_categories(), чтобы скрыть пустые категории:

    
    $categories = get_categories(array(
    'parent' => $parent_id,
    'hide_empty' => true
    ));
    

    Использование функции get_categories для фильтрации по parent

    Чтобы использовать фильтрацию по родительской категории, нужно передать ID родительской категории в параметр parent. Если параметр parent равен 0, будут выбраны все корневые категории, то есть категории без родителей. Если передать значение больше нуля, get_categories вернёт только те категории, которые имеют заданный родитель.

    Пример использования фильтрации по родителю:

    
    $parent_id = 5; // ID родительской категории
    $args = array(
    'parent' => $parent_id
    );
    $categories = get_categories($args);
    foreach ($categories as $category) {
    echo $category->name . '
    '; }

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

    Для оптимизации работы с категориями можно дополнительно использовать параметры orderby и order, чтобы управлять сортировкой. Например, для сортировки по имени в алфавитном порядке можно использовать:

    
    $args = array(
    'parent' => $parent_id,
    'orderby' => 'name',
    'order' => 'ASC'
    );
    

    Создание выпадающего списка с дочерними категориями

    Создание выпадающего списка с дочерними категориями

    Для начала нужно убедиться, что родительские и дочерние категории правильно настроены в разделе «Категории» в панели администратора. Каждая дочерняя категория должна быть привязана к родительской категории. Для этого, при добавлении или редактировании категории, выберите нужную родительскую категорию в соответствующем поле.

    Далее создадим выпадающий список с дочерними категориями. В коде темы добавьте следующий фрагмент в нужное место шаблона (например, в файл sidebar.php или header.php):

     'category',
    'child_of'     => $parent_id,
    'orderby'      => 'name',
    'order'        => 'ASC',
    'hide_empty'   => false,
    );
    $categories = get_categories($args);
    if ($categories) {
    echo '';
    } else {
    echo '

    Нет дочерних категорий.

    '; } } ?>

    Чтобы использовать эту функцию на своем сайте, достаточно вызвать ее с ID родительской категории. Например:

    
    

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

    Этот метод помогает сделать навигацию по категориям удобной и быстрой, особенно для сайтов с большим количеством контента.

    Добавление дочерних категорий в меню сайта

    Добавление дочерних категорий в меню сайта

    Чтобы добавить дочерние категории в меню WordPress, необходимо выполнить несколько простых шагов. Для этого в первую очередь нужно убедиться, что дочерние категории правильно настроены в разделе «Категории» админ-панели.

    Перейдите в админку WordPress и откройте раздел «Внешний вид» > «Меню». В этом разделе можно создать или отредактировать меню, в которое будут добавлены дочерние категории.

    1. В левой части экрана найдите блок «Категории». Здесь будут отображаться все доступные категории, включая дочерние. Если дочерние категории не отображаются, убедитесь, что они созданы и находятся в иерархии нужной родительской категории.

    2. Выберите нужные дочерние категории и добавьте их в меню, нажав «Добавить в меню». Они будут отображаться как обычные пункты меню.

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

    4. Не забудьте сохранить изменения в меню, нажав «Сохранить меню».

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

    Отображение постов только из дочерних категорий

    Отображение постов только из дочерних категорий

    Для начала, важно узнать, как правильно получить дочерние категории для текущей категории. Это можно сделать с помощью функции get_terms(), которая позволяет извлекать дочерние категории. Пример кода:

    
    $parent_cat = 123; // ID родительской категории
    $args = array(
    'taxonomy' => 'category',
    'parent' => $parent_cat
    );
    $child_categories = get_terms($args);
    

    После того как дочерние категории получены, их можно использовать для создания специального запроса. Для этого применим аргумент category__in в WP_Query, чтобы ограничить выборку только постами из дочерних категорий:

    
    $child_cat_ids = wp_list_pluck($child_categories, 'term_id');
    $args = array(
    'category__in' => $child_cat_ids,
    'posts_per_page' => 10
    );
    $query = new WP_Query($args);
    
    
    function filter_posts_by_child_categories($query) {
    if ($query->is_main_query() && !is_admin() && is_category()) {
    $category = get_queried_object();
    $child_categories = get_terms(array(
    'taxonomy' => 'category',
    'parent' => $category->term_id
    ));
    $child_cat_ids = wp_list_pluck($child_categories, 'term_id');
    if ($child_cat_ids) {
    $query->set('category__in', $child_cat_ids);
    }
    }
    }
    add_action('pre_get_posts', 'filter_posts_by_child_categories');
    

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

    Работа с дочерними категориями в кастомных таксономиях

    Чтобы создать дочернюю категорию в кастомной таксономии, необходимо использовать функцию wp_insert_term(), указывая родительский термин через параметр parent. Например:

    
    wp_insert_term(
    'Название дочерней категории', // Название термина
    'custom_taxonomy', // Название таксономии
    array(
    'parent' => $parent_term_id // ID родительской категории
    )
    );
    
    
    $parent_term_id = 5; // ID родительской категории
    $args = array(
    'taxonomy' => 'custom_taxonomy',
    'parent' => $parent_term_id,
    'orderby' => 'name',
    'order' => 'ASC'
    );
    $terms = get_terms($args);
    foreach ($terms as $term) {
    echo '

    ' . $term->name . '

    '; }
    
    $args = array(
    'taxonomy' => 'custom_taxonomy',
    'hierarchical' => true,
    'orderby' => 'name',
    'order' => 'ASC'
    );
    $terms = get_terms($args);
    foreach ($terms as $term) {
    if ($term->parent != 0) {
    echo '

    ' . $term->name . '

    '; } }

    Для улучшения производительности на крупных сайтах рекомендуется кэшировать результаты запросов к терминам, чтобы снизить нагрузку на базу данных. Это можно сделать с помощью кэширования результатов через set_transient() или внешние плагины для кэширования.

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

    Вопрос-ответ:

    Как вывести дочерние категории в WordPress?

    Для вывода дочерних категорий в WordPress можно воспользоваться стандартным инструментом — виджетом «Категории». Он позволяет отображать иерархию категорий, включая дочерние. Чтобы это сделать, в админке сайта перейдите в раздел «Внешний вид» — «Виджеты», выберите виджет «Категории» и добавьте его в нужную область. В настройках виджета установите опцию «Показывать иерархию», и дочерние категории будут отображаться с отступом.

    Ссылка на основную публикацию