В WordPress категории по умолчанию поддерживают иерархическую структуру, позволяющую создавать вложенные категории. Однако часто возникает задача визуализировать и управлять сложной пирамидой категорий с несколькими уровнями вложенности, например, для удобного отображения на сайте или для специфической логики в шаблонах. В этой статье подробно рассмотрим, как программно создать, вывести и настроить такую пирамиду категорий в WordPress с примерами кода.
Что такое пирамида категорий и зачем она нужна в WordPress
Пирамида категорий — это древовидная структура, где родительские категории содержат дочерние, а те в свою очередь могут иметь собственные подкатегории, формируя многоуровневую иерархию. Такая структура помогает:
- Упорядочить контент по тематическим группам.
- Обеспечить удобную навигацию для пользователей.
- Реализовать фильтрацию и сортировку постов в зависимости от категории.
- Автоматизировать вывод меню и списков категорий в шаблонах.
Стандартные функции WordPress позволяют создавать иерархические категории, но для более тонкого контроля и кастомизации потребуется написать собственный код.
Как программно создавать категории и выстраивать их в иерархию
Для создания категорий с указанием родителя используется функция wp_insert_term(). Рассмотрим пример создания пирамиды из трёх уровней:
// Создаем родительскую категорию
$parent = wphierarchy_wp_insert_term('Электроника', 'category');
// Создаем подкатегорию с родителем
if (!is_wp_error($parent)) {
$parent_id = $parent['term_id'];
$child = wphierarchy_wp_insert_term('Смартфоны', 'category', array('parent' => $parent_id));
// Создаем подкатегорию второго уровня
if (!is_wp_error($child)) {
$child_id = $child['term_id'];
wphierarchy_wp_insert_term('Android', 'category', array('parent' => $child_id));
}
}
/**
* Обертка для wp_insert_term с префиксом домена
*/
function wphierarchy_wp_insert_term($term, $taxonomy, $args = array()) {
return wp_insert_term($term, $taxonomy, $args);
}
В результате создастся пирамида: Электроника > Смартфоны > Android.
Вывод пирамиды категорий с помощью рекурсивной функции
Для отображения иерархии удобно использовать рекурсивную функцию, которая будет проходить по категориям и выводить вложенные списки.
function wphierarchy_display_category_tree($parent = 0) {
$args = array(
'taxonomy' => 'category',
'parent' => $parent,
'hide_empty' => false
);
$categories = get_terms($args);
if ($categories) {
echo '<ul>';
foreach ($categories as $category) {
echo '<li>' . esc_html($category->name);
wphierarchy_display_category_tree($category->term_id);
echo '</li>';
}
echo '</ul>';
}
}
// Вызов функции для вывода всей пирамиды
wphierarchy_display_category_tree();
Эта функция получает категории по родителю и выводит их в виде вложенных списков. Таким образом можно легко встроить вывод пирамиды в шаблон сайта.
Фильтрация и выборка постов по уровню вложенности категорий
Иногда нужно получить посты, относящиеся не только к конкретной категории, но и к её дочерним и внукам. WordPress по умолчанию не умеет так удобно фильтровать, но мы можем расширить запрос:
function wphierarchy_get_posts_by_category_tree($category_id) {
// Получаем все дочерние категории
$all_cat_ids = wphierarchy_get_all_child_categories($category_id);
$all_cat_ids[] = $category_id; // Добавляем саму категорию
$query = new WP_Query(array(
'category__in' => $all_cat_ids,
'posts_per_page' => -1
));
return $query->posts;
}
function wphierarchy_get_all_child_categories($parent_id) {
$child_cats = get_terms(array(
'taxonomy' => 'category',
'parent' => $parent_id,
'hide_empty' => false
));
$ids = array();
foreach ($child_cats as $cat) {
$ids[] = $cat->term_id;
$ids = array_merge($ids, wphierarchy_get_all_child_categories($cat->term_id));
}
return $ids;
}
// Использование:
$posts = wphierarchy_get_posts_by_category_tree(10); // где 10 - ID категории
Этот код позволяет получить все посты из категории и всех её подкатегорий рекурсивно.
Практические советы по работе с иерархией категорий
Для удобства управления иерархией категорий рекомендуется:
- Использовать понятные имена и описания категорий.
- Автоматизировать создание категорий с помощью скриптов или плагинов.
- Кэшировать результаты запросов, если иерархия большая, чтобы избежать нагрузок.
- В шаблонах выводить дерево в удобном формате, например, с раскрывающимися списками.
- Если требуется AJAX-загрузка подкатегорий, можно расширить функцию вывода и добавить обработчики на JS.
Использование плагина Clearfy Pro для оптимизации категорий
Плагин Clearfy Pro помогает оптимизировать работу с таксономиями, включая категории. С его помощью можно отключить ненужные категории, оптимизировать URL и ускорить загрузку страниц с категориями.
Заключение
Создание и вывод пирамиды категорий в WordPress — задача, решаемая с помощью стандартных функций и небольшой порции кода. Рекурсивные функции и правильное использование API категорий позволят гибко формировать и отображать иерархию на сайте. Для более продвинутой оптимизации можно использовать специализированные плагины, такие как Clearfy Pro.