Рубрики в WordPress могут иметь иерархическую структуру, которая заключается во вложенности одних категорий в другие. Используется такой подход в построении правильного формата ЧПУ ссылок при продвижении сайта и грамотной структуризации контента. Например, создается категория «Квартиры», к которой будет добавлена вложенная подкатегория «Однокомнатные». Url такой структуры будет иметь вид: site.com/apartments/one-room/item1.html.
В этой статье мы разберемся, как создавать и выводить дочерние на данном движке.
Как создать подрубрику в WordPress?
Сделать это можно двумя способами.
Первый. С помощью меню «Рубрики».
1. Переходим в меню «Записи» — «Рубрики».
2. В форме «Добавить новую рубрику», заполняем поля, и обязательно указываем родительскую рубрику, выбрав из выпадающего списка нужную категорию.

3. Нажимаем кнопку «Добавить новую рубрику».
4. Справа, в списке созданных категорий вы увидите древовидную структуру категорий вашего сайта.

Второй. При редактировании записи.
1. Переходим в меню «Записи» и выбираем либо добавить новую, либо редактировать уже созданную.

2. Справа, в блоках редактирования записи находим вкладку «Рубрики», нажимаем ее и снизу увидим ссылку с названием «Добавить новую рубрику». Нажимаем ее.

3. Перед вами откроются поля для создания категории. Заполняем название рубрики и добавляем родительскую категорию.

4. После этого вы можете активировать чекбокс напротив только что созданной подкатегории, и запись будет привязана к ней.
Как вывести дочерние подкатегории WordPress?
Вложенная структура рубрик используется на многих сайтах для создания удобной цепочки навигации для пользователей. Одна из часто встречаемых задач – это вывод дочерних подрубрик на странице родительской категории. В WordPress по умолчанию в качестве шаблона для категории используются файлы темы: category.php или же archive.php. Именно в них мы и будем добавлять код для вывода подкатегорий.
Пример 1. Используем функцию get_terms().
Пример кода.
<?php
$this_category = get_category($cat);
//echo $this_category->cat_ID;
$parent_term_id =$this_category->cat_ID; // term id of parent term
//$termchildren = get_terms('category',array('child_of' => $parent_id));
$taxonomies = array(
'taxonomy' => 'category'
);
$args = array(
// 'parent' => $parent_term_id,
'child_of' => $parent_term_id
);
$terms = get_terms($taxonomies, $args);
if (sizeof($terms)>0) {
echo ' <div class="sub-categories"> ';
echo '<p> Подкатегории рубрики: '. get_cat_name( $parent_term_id ) .'</p>';
foreach ( $terms as $term ) {
echo '<li><a href="'. esc_url( get_category_link( $term->term_id ) ) . '">'.$term->name . '</li>';
}
}
echo '</div><!-- sub categories div end-->';
?>
Вначале мы определяем id текущей категории, с помощью кода.
$this_category = get_category($cat);
//echo $this_category->cat_ID;
$parent_term_id =$this_category->cat_ID; // term id of parent term
//$termchildren = get_terms('category',array('child_of' => $parent_id));
Далее мы задаем параметры для функции get_terms(), это таксономию и аргументы выборки.
$taxonomies = array(
'taxonomy' => 'category'
);
$args = array(
// 'parent' => $parent_term_id,
'child_of' => $parent_term_id
);
Получаем рубрики, проверяем, созданы ли они, и с помощью foreach выводим их.
$terms = get_terms($taxonomies, $args);
if (sizeof($terms)>0) {
echo ' <div class="sub-categories"> ';
echo '<p> Подкатегории рубрики: '. get_cat_name( $parent_term_id ) .'</p>';
foreach ( $terms as $term ) {
echo '<li><a href="'. esc_url( get_category_link( $term->term_id ) ) . '">'.$term->name . '</li>';
}
}
Пример 2. С использованием функции get_categories().
Пример кода.
<?php
$this_category = get_category($cat);
//echo $this_category->cat_ID;
$parent_term_id =$this_category->cat_ID; // term id of parent term
if (is_category()) {
if (count(get_categories('child_of='.$parent_term_id))) {
echo '<ul class="sub_categories">';
$current_cat=get_query_var('cat');
wp_list_categories('child_of='.$current_cat.'&title_li=&show_count=0');
echo '</ul>';
}
}
?>
Алгоритм тут похожий. Сначала определяем текущую категорию и ее id.
$this_category = get_category($cat);
//echo $this_category->cat_ID;
$parent_term_id =$this_category->cat_ID; // term id of parent term
Далее с помощью функции is_category() проверяем, находимся ли мы на странице категории. А используя функцию count(), запускаем вторую дополнительную проверку на наличие дочерних категорий в заданной (родительской категории).
if (is_category()) {
if (count(get_categories('child_of='.$parent_term_id))) {
echo '<ul class="sub_categories">';
$current_cat=get_query_var('cat');
wp_list_categories('child_of='.$current_cat.'&title_li=&show_count=0');
echo '</ul>';
}
}
Переменная $current_cat включает в себя данные категории, в которой мы находимся в текущий момент. И с помощью функции wp_list_categories(), мы выводим список дочерних категорий. Для этой функции задаются параметры, например child_of, он определяет рубрику, подрубрики которой нужно выводить. Параметр title_li убирает заголовок блока, который по умолчанию выводиться.
На этом сегодня все. Надеюсь материал был для вас полезен.