Познакомимся более подробно с функцией отвечающей за вывод рубрик Wordpress в сайдбаре шаблона. Она имеет следующий вид:
wp_list_categories();
Такая запись в коде сайдбара темы Wordpress приводит к выводу рубрик с параметрами по-умолчанию.
Пример:
1 | <?php wp_list_categories(); ?> |
Вот, что мы увидим в результате:

Такой вид многих не устроит, тк слово Рубрики не находится в контейнтере заголовка второго уровня.
Попробуем так:
1 2 | <h2>Рубрики<h2> <?php wp_list_categories(); ?> |
Увидим это

Что тоже нас не устроит. Все из-за того, что по-умолчанию ф-ция выводит слово Рубрики сама. Можно схитрить:
1 2 3 4 | <h2>Рубрики<h2> <ul> <?php wp_list_categories('title_li='); ?> </ul> |
Получим:

Как видим мы добились нормального отображения виджета с рубриками в сайдбаре Wordpress указав в параметре title_li к функции wp_list_categories(); значение “пусто”. То же у нас получится, если мы сделаем так:
1 | <?php wp_list_categories('title_li=<h2>Рубрики</h2>'); ?> |
Давайте что-нибудь нестандартное организуем. Например отобразим в списке рубрики, в которых еще нет записей, ведь по-умолчанию такие рубрики не отображаются в списке:
1 | <?php wp_list_categories('title_li=<h2>Рубрики</h2>&hide_empty=0'); ?> |
Увидим

Давайте еще отсортируем по ID
1 | <?php wp_list_categories('title_li=<h2>Рубрики</h2>&hide_empty=0&orderby=ID'); ?> |
Увидим

Теперь попробуем заставить выделяться текущую рубрику. Для этого создадим новое свойство в css файле для тега а внутри li с классом current-cat, так как каждая “текущая” рубрика, если в нее зайти помещается в контейнер li с таким классом. У себя я должен прописать следующее в css-файле:
1 | #sidebar ul li ul li.current-cat a {color: #ff0000;} |
Результат:

Ну и кроме этого я еще создал подрубрики или “дочерние рубрики”, если так выразиться.
Бывает так, что нужно исключить из списка определенные рубрики. Это не проблема. Зададим параметр exclude к функции рубрик Wordpress и укажем ему ID лишних для нас категорий:
1 | <? wp_list_categories('title_li=<h2>Рубрики</h2>&hide_empty=0&exclude=4,18,16'); ?> |
Как видим рубрики пропали из списка

Бывает наоборот - нужно включить лишь некоторые рубрики в список. Включим те, которые мы убрали в прошлом примере:
1 | <? wp_list_categories('title_li=<h2>Рубрики</h2>&hide_empty=0&include=4,18,16'); ?> |
Результат:

Думаю что общая суть работы с параметрами функции wp_list_categories(); понятна. Пришло время привести списком полезные (но не все существующие) параметры для этой функции. Итак:
*orderby - Параметр, отвечающий за то как будет сортироваться список рубрик.
Значения - ID, name, count, slug. Что соответственно означает - по ID, по имени, по количеству записей в рубрике и по короткой ссылке рубрики. По-умолчанию имеет значение name.
*order - Отвечает за то, как будет сортироваться список - по возрастанию или по убыванию значения заданного в orderby. Значения - ASC и DESC. По-умолчанию ASC.
*style - Определяет стиль отображения рубрик. Либо list (список) либо none - просто список из ссылок на каждую рубрику, но через тег br. По-умолчанию list.
*show_count - Показывать количество записей в рубрике возле ее названия или нет? Значения 1 и 0. По-умолчанию 0 - “не показывать”.
*hide_empty - Отвечает за пустые рубрики. (то есть те, в которых нет записей) Выводить их в список или нет? Значения 1 и 0. По-умолчанию 1 - “скрывать”.
*use_desc_for_title - Использовать ли описание рубрике в параметре title для ссылки на ее архив? Значения 1 и 0. По-умолчанию 1 - “показывать”.
*child_of - Заставляет выводить лишь подрубрики для указанной ей рубрики. При этом выводит и подрубрики без записей. В качестве значения нужно укзать ID нужной рубрики.
*exclude - Исключает указанные рубрики из списка. Значения - ID рубрик.
*include - Включает в список лишь указанные рубрики. Значения - ID рубрик.
Если нужно подключать виджет стандартным образом в боковую колонку, а не прописывать вручную, то можно изменить параметры по-умолчанию для этой функции в файле category-template.php найдя вот такой код:
1 2 3 4 5 6 7 8 9 10 11 | function wp_list_categories( $args = '' ) { $defaults = array( 'show_option_all' => '', 'orderby' => 'name', 'order' => 'ASC', 'show_last_update' => 0, 'style' => 'list', 'show_count' => 0, 'hide_empty' => 1, 'use_desc_for_title' => 1, 'child_of' => 0, 'feed' => '', 'feed_type' => '', 'feed_image' => '', 'exclude' => '', 'current_category' => 0, 'hierarchical' => true, 'title_li' => __( 'Categories' ), 'echo' => 1, 'depth' => 0 ); |
и изменив нужные вам значения параметров по-умолчанию.
Спасибо, весьма полезная статья, если бы не она я бы ещё долго не смог бы победить вывод необходимых рубрик в сайтбаре
А как убрать надпись “Нет рубрик”?
И вывести описание категории под каждым заголовком?
Надпись “Нет рубрик” пропадает сама при создании хотя бы одной рубрики и присваивании ей одной записи. Ну а описание категории можно достать функцией category_description($category) где $category это либо ее ID либо название.
“Ну и кроме этого я еще создал подрубрики или “дочерние рубрики”, если так выразиться.”
А как? Черкните код.
Подрубрики я создал не кодом, а из админки перед тем как продемонстрировать пример. Это в Рубрики, Создать новую и при ее создании назначить ей родительской одну из тех, что уже существуют.
Я так и делал, но рубрики вперемешку с подрубриками выстраиваются по алфавиту. Хотя в админке написано подрубрика 3.1 входит в рубрику 3.
Т.е.
Окунь
Отдых
Рыбалка
А цель какя вообще?
Чего добиваемся-то?
Добиваемся:
Рубрика 1
Подрубрика 1.1
Подрубрика 1.2
Рубрика 2
Подрубрика 2.1
а сейчас:
Подрубрика 1.1
Подрубрика 1.2
Подрубрика 2.1
Рубрика 1
Рубрика 2
По идее в код нужно добавить еще такой параметр ‘&hierarchical=true’ Он и по-умолчанию должен быть true, но видимо где-то уже поменялся.
Насколько я понял имеем это:
а как надо?
”
“
Чего то код не вставляется
Завтра напишу.
Поставил плагин MyCategory Order, рубрики и подрубрики расставил, но хотелось бы еще. что бы подрубрики имели отступ слева, как в Вашем примере.
Это зависит от шаблона и того, что прописано в его файле стилей. Можете сами написать css-класс с именем .children и задать ему нужный отступ.
А как увеличить расстояние между рубриками???
Задать в css-файле например “margin:15px 0;” для элементов списка
Или “padding 15px 0;” для них же. Если разбираетесь в css, то это не составит труда.
Спасибо за статью, очень помогла!
Спасибо! перепробовала множество вариантов кодов, но нашла простое решение благодаря Вашей статье. В закладки.
Спасибо! Пригодилось.
Но есть вопрос: Если делаешь, чтобы текущая рубрика отображалась, то ее подрубрики тоже отображаются. Как сделать, чтобы они не отображались?
Именно то, что искал, по поводу show_count
А как сделать чтобы не все рубрики отображались в верхнем меню?
За статью большое спасибо!
Не правильно выразился.
Как сделать чтобы не все рубрики отображались в верхнем меню, но все отображались в боковом?
Сделал подсветку выбранной рубрики, замечательно! Но.. выделяется цветом только тогда, когда находишься на странице с перечнем статей рубрики, а если выбираешь конкретную статью, входящую в эту рубрику, то цветовое выделение пропадает. Возможно ли это исправить, если да, то как?
Всем привет!!! Делая рубрики мои мозги атрофировались и теперь я плохо соображаю, короче - нужна помощь !
У меня вот так рубрики состоят :
Анапа
Джемете
Витязево
Геленджик
Кабардинка
А я хочу сделать вот так!
АНАПА - заголовок (не ссылка)
-Анапа
-Джемете
-Витязево
Геленджик -заголовок (не ссылка)
-Геленджик
-Кабардинка
Если не трудно напишите как сделать
Всё сделал -дошло )))
slug - это сортировка по короткой ссылке рубрики
Спасибо, поправил. Знаю это конечно, но на момент написания статьи еще не был осведомлен.
Здравствуйте!
Спасибо за подробную инструкцию.
Подскажите как сделать меню как здесь www(точка)ringo-kzn(точка)ru
чтобы меню работало в сайдбаре попринципу
если открыта рубрика1, то
Рубрика1
-подрубрика1
-подрубрика2
Рубрика2
Рубрика3
если открыта рубрика 2, то
Рубрика1
Рубрика2
-подрубрика1
-подрубрика2
Рубрика3