Как создать и вывести дочерние рубрики WordPress. Примеры вывода подрубрик на странице категории.

Рубрики в 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 убирает заголовок блока, который по умолчанию выводиться.

На этом сегодня все. Надеюсь материал был для вас полезен.

Поделиться в социальных сетях:
Нет комментариев к данной статье

Оставить новый комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *