Как создать дерево категорий в WordPress с помощью кода

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

Почему важно использовать дерево категорий в WordPress

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

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

Использование функции wpcontent_get_category_tree для вывода дерева категорий

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

function wpcontent_get_category_tree($parent = 0) {
    $args = array(
        'taxonomy' => 'category',
        'parent' => $parent,
        'hide_empty' => false,
        'orderby' => 'name',
        'order' => 'ASC'
    );
    $categories = get_terms($args);
    if (!empty($categories) && !is_wp_error($categories)) {
        echo '<ul>';
        foreach ($categories as $category) {
            echo '<li><a href="' . get_category_link($category->term_id) . '">' . esc_html($category->name) . '</a>';
            wpcontent_get_category_tree($category->term_id); // рекурсия
            echo '</li>';
        }
        echo '</ul>';
    }
}

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

Чтобы вывести дерево на сайте, достаточно вызвать функцию в нужном месте шаблона:

wpcontent_get_category_tree();

Настройка внешнего вида и добавление классов CSS

Для удобства стилизации желательно добавить CSS-классы к элементам списка, например, помечать уровни вложенности или выделять активную категорию. Для этого можно расширить функцию:

function wpcontent_get_category_tree($parent = 0, $level = 0) {
    $args = array(
        'taxonomy' => 'category',
        'parent' => $parent,
        'hide_empty' => false,
        'orderby' => 'name',
        'order' => 'ASC'
    );
    $categories = get_terms($args);
    if (!empty($categories) && !is_wp_error($categories)) {
        echo '<ul class="category-level-' . $level . '">';
        foreach ($categories as $category) {
            $class = '';
            if (is_category($category->term_id)) {
                $class = ' current-category';
            }
            echo '<li class="category-item' . $class . '"><a href="' . get_category_link($category->term_id) . '">' . esc_html($category->name) . '</a>';
            wpcontent_get_category_tree($category->term_id, $level + 1);
            echo '</li>';
        }
        echo '</ul>';
    }
}

Теперь вы можете в CSS оформить .category-level-0, .category-level-1 и так далее, а также выделить активную категорию через класс current-category. Это дает гибкость в дизайне.

Пример использования плагина Category Tree Widget для автоматизации

Если хотите готовое решение без кода, обратите внимание на плагин Category Tree Widget. Он автоматически создает виджет с древовидной структурой категорий, поддерживает настройки отображения и фильтрации.

Для установки:

  • Перейдите в админ-панель WordPress → Плагины → Добавить новый
  • В поиске введите "Category Tree Widget"
  • Установите и активируйте плагин

После этого вы сможете добавить виджет в боковую панель и настроить его параметры: уровни вложенности, сортировку, показывать/скрывать пустые категории и т.д.

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

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

Пример добавления кэша с использованием Transients API WordPress:

function wpcontent_get_category_tree_cached($parent = 0, $level = 0) {
    $cache_key = 'wpcontent_category_tree_' . $parent . '_' . $level;
    $tree = get_transient($cache_key);
    if ($tree !== false) {
        echo $tree;
        return;
    }
    ob_start();
    wpcontent_get_category_tree($parent, $level);
    $tree = ob_get_clean();
    set_transient($cache_key, $tree, 12 * HOUR_IN_SECONDS);
    echo $tree;
}

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

Выводы по созданию дерева категорий в WordPress

Создание дерева категорий с помощью собственного кода позволяет гибко управлять выводом и дизайном. Рекурсивный подход с функцией wpcontent_get_category_tree() — универсальный инструмент для решения задачи. Для быстрого результата подойдет плагин Category Tree Widget. А для высоконагруженных проектов важно использовать кэширование.

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

Как добавить автоматические оглавления в блоках Gutenberg WordPress
15.01.2026
Как автоматически отключать неиспользуемые плагины в WordPress
29.03.2026
Как автоматически удалить посты из категории в WordPress по расписанию
26.03.2026
Как автоматически удалять неактивных пользователей в WordPress
08.02.2026
Как изменить длину URL в WordPress через функцию wpcontent_custom_url_length
07.03.2026