» » » wp_list_categories() — как выводить рубрики WordPress
logotip

wp_list_categories() — как выводить рубрики WordPress

Всем привет! Сегодня на seo-mayak.com мы будем разбирать функцию wp_list_categories(), которая отвечает за вывод рубрик на WordPress.

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

Известно, что рубрики или категории, как угодно, разбивают сайт на разделы. Заголовки данных разделов выводятся в виде меню на боковой панели сайта (сайдбаре) или в шапке, а в некоторых темах рубрики можно найти даже в подвале. Как они там оказываются?

Конечно в админке есть интерфейс виджетов, с помощью которых можно вывести меню на экран. Но я спрашивал не об этом!

Как там оказываются заголовки разделов и ссылки на них? Ведь мы же их там не прописывали. Вот об этом мы и будем сегодня с Вами говорить.

rubriki-wordpress

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

Функция имеет массу настроек и уверен, что каждому, даже самому зеленому вебмастеру, не лишнем будет знать, как работает данная функция. Поехали!

Функция wp_list_categories()

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

Функция wp_list_categories() — это, так сказать, дочерняя функция, т.е. она работает на основе другой функции, а именно get_categories(), которая в свою очередь тоже имеет своего родителя — функцию get_terms().

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

Достаточно будет просто иметь представление о том, что процесс вывода рубрик — это сложное, многоступенчатое программное действо, которое в долю секунды осуществляется благодаря совместной работе нескольких php функций.

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

Еще надо сказать, что в работу функции можно вмешаться с помощью одноименного хука-фильтра wp_list_categories. Например:

function mayak_test_function(){
	/* Какой-то сценарий */
}
add_filter('wp_list_categories', 'mayak_test_function');

Живой пример использования хука можно посмотреть в статье Сквозные ссылки.

А теперь, для наглядного примера, возьмем стандартный виджет «Текст» и вставим в него функцию wp_list_categories(). Должно получится так:

rubriki-wordpress2

Сохраняем и идем смотреть результат:

rubriki-wordpress3

Вот так функция wp_list_categories() формирует вывод рубрик по умолчанию. Даже заголовок есть!

На заметку! Если Ваша тема не поддерживают исполнение php кода в виджетах, то настоятельно советую ознакомится со этой статьей.

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

Все аргументы функции wp_list_categories()

В данном шаблоне приведены все аргументы которые может принимать функция.

Это шаблон! Не надо его никуда вставлять!

<?php 
    $args = array(
	'show_option_all'    => '',
	'orderby'            => 'name',
	'order'              => 'ASC',
	'style'              => 'list',
	'show_count'         => 0,
	'hide_empty'         => 1,
	'use_desc_for_title' => 1,
	'child_of'           => 0,
	'feed'               => '',
	'feed_type'          => '',
	'feed_image'         => '',
	'exclude'            => '',
	'exclude_tree'       => '',
	'include'            => '',
	'hierarchical'       => 1,
	'title_li'           => __( 'Categories' ),
	'show_option_none'   => __( '' ),
	'number'             => null,
	'echo'               => 1,
	'depth'              => 0,
	'current_category'   => 0,
	'pad_counts'         => 0,
	'taxonomy'           => 'category',
	'walker'             => null
    );
    wp_list_categories( $args ); 
?>

Итак, давайте пройдемся по всем аргументам и рассмотрим их на конкретных примерах. Приступим.


show_option_all

Значением данного аргумента может быть любой текст, который будет выведен первым пунктом в общем списке рубрик в качестве ссылки на главную страницу. Например:

<?php wp_list_categories('show_option_all=Все записи'); ?>

rubriki-wordpress4

По умолчанию: нет.


orderby

C помощью аргумента orderby можно сортировать вывод рубрик, в зависимости от его значений. Вот список значений:

ID — Сортировка будет осуществляться по ID родительских рубрик, начиная с 1 и по возрастанию;
name — Сортировка будет осуществляться по названию родительских рубрик, согласно алфавиту;
slug — Сортировка будет осуществляться по ярлыкам родительских рубрик, согласно алфавиту;
count — Сортировка будет осуществляться по количеству записей;
term_group — Сортировка по группе.

Давайте рассмотрим пример сортировки по количеству записей в рубриках, дополнительно используя аргумент show_count:

<?php wp_list_categories('orderby=count&show_count=1'); ?>

rubriki-wordpress5

По умолчанию: name.


order

Данный аргумент отвечает за направление сортировки. Возможные значения:

ASC — сортировка в обычном порядке (от меньшего к большему);
DESC — сортировка в обратном порядке (от большего к меньшему);

Здесь есть один момент, который я хотел бы отметить. Рубрики без подрубрик окажутся в вверху списка не зависимо от количества записей:

<?php wp_list_categories('order=DESC&orderby=count&show_count=1');?>

rubriki-wordpress7

По умолчанию: ASC.


style

С помощью этого аргумента можно задавать html структуру для меню рубрик.

list — Структура html для рубрик будет формироваться с использованием тегов <ul> и <li>;
none — Список рубрик будет выведен в виде обычных ссылок, а перенос строк будет осуществляться с помощью тега <br/> (вложенность подрубрик будет соблюдена).

<?php wp_list_categories('style=none&orderby=count&show_count=1');?>

rubriki-wordpress8

По умолчанию: list.


show_count

Определяет показывать или не показывать количество записей в рубриках.

1 — Будет выводится количество записей в каждой рубрике;
0 — Количество записей выводится не будет.

По умолчанию: 0.


hide_empty

Определяет включать или не включать в меню пустые рубрики.

1 — Пустые рубрики будут скрыты;
0 — Пустые рубрики будут включены в список.

<?php wp_list_categories('hide_empty=0&show_count=1');?>

rubriki-wordpress-9

По умолчанию: 1.


use_desc_for_title

Для каждой рубрики можно сделать описание (description). Если такое описание существует, то с помощью данного аргумента его можно встроить в html код.

1 — Описание (если оно есть) будет встроено в html код;
0 — Описание встраиваться не будет.

<?php wp_list_categories('use_desc_for_title=1&show_count=1');?>

rubriki-wordpress-10

По умолчанию: 1.


child_of

В качестве значения для аргумента child_of служит ID родительской рубрики, из которой надо вывести все дочерние категории. Допускается указывать только один ID.

<?php wp_list_categories('child_of=10&show_count=1');?>

rubriki-wordpress-11

По умолчанию: 0.


feed

Добавляет к названию каждой рубрики ссылку на rss-канал. В качестве значения задается текст, который и будет отображаться.

<?php wp_list_categories('feed=RSS&show_count=1');?>

rubriki-wordpress-12

Не знаю использовал ли кто-нибудь данный аргумент, по мне, так он лишний.

По умолчанию: нет.


feed_type

Указывает на тип фида.

По умолчанию: rss-2.


feed_image

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

<?php wp_list_categories('feed_image=/wp-content/themes/wp-themes-blogger/images/feed_32x32.png&feed=RSS&show_count=1');?>

rubriki-wordpress-13

По умолчанию: нет.


exclude

Аргумент exclude позволяет исключать одну или несколько рубрик из списка по их ID, при этом действие аргумента child_of (если он указан) будет отменено.

Если исключить родительские рубрики, например с ID 10 и 14:

<?php wp_list_categories('exclude=10,14&show_count=1');?>

В этом случаи будут исключены все дочерние рубрики, относящиеся к родителям с вышеупомянутыми ID.

Чтобы этого не произошло, в значении аргумента hierarchical надо установить 0, при этом дерево рубрик будет отключено.

Если hierarchical равен 0, то для исключения всей ветки используется аргумент exclude_tree.

По умолчанию: нет.


exclude_tree

C помощью данного аргумента можно исключить из списка дерево одной или нескольких рубрик. В значении указывается ID одной или нескольких рубрик через запятую.

<?php wp_list_categories('exclude_tree=10,14&show_count=1');?>

Если значение аргумента hierarchical равно 0, то используется аргумент exclude, вместо exclude_tree.

По умолчанию: нет.


include

Аргумент include позволяет вывести в меню только указанные рубрики. ID рубрик перечисляется через запятую.

<?php wp_list_categories('include=10,14&show_count=1');?>

Рубрики выводятся в точно соответствии с ID , т.е. если указать ID родительских рубрик, дочерние рубрики выведены не будут.

По умолчанию: нет.


hierarchical

Позволяет выводить дочерние категории в виде вложенного списка (дерева).

1 — выведет древовидный список рубрик.
0 — выведет рубрики сплошным типом, при этом родительские рубрики будут исключены.

<?php wp_list_categories('hierarchical=0&show_count=1');?>

rubriki-wordpress-14

По умолчанию: 1.


title_li

Устанавливает заголовок для списка рубрик. В качестве значения указывается текст.

<?php wp_list_categories('title_li=Все разделы&show_count=1');?>

rubriki-wordpress-15

По умолчанию: Рубрики.


show_option_none

В том случаи, если по запросу не будет найдено ни одной рубрики, будет выведен указанный тест.

<?php wp_list_categories('include=99,100&show_option_none=Рубрик не найдено');?>

rubriki-wordpress-16

По умолчанию: Нет рубрик.


number

В данной аргументе можно установить лимит на отображение рубрик. Например:

<?php wp_list_categories('number=5&show_count=1');?>

Будет выведено 5 рубрик.

По умолчанию: нет.


echo

Применения данного аргумента позволяет возвращать html код списка рубрик или выводить его на экран.

0 — Возвращать данные для дальнейшей обработки;
1 — Выводить список рубрик на экран.

По умолчанию: 1.


depth

Определяет глубину вложенности рубрик.

0 — Будут выведены все уровни рубрик без ограничений;
-1 — Будут выведены все уровни, но без дерева (сплошным типом). Отменяет аргумент hierarchical;
1 — Будут выведены рубрики только первого уровня. Все дочерние категории исключаются.
n — Произвольное числовое значение глубины вложенности рубрик для вывода на экран.

По умолчанию: 0.


current_category

Интересный аргумент, позволяющий добавлять css класс current-cat к определенной рубрике. В обычном режиме такой класс добавляется к текущей рубрики и в основном применяется для подсветки. Также данный класс используется в php скриптах для удаления циклических ссылок.

В качестве значения указывается ID рубрики или нескольких рубрик через запятую.

<?php wp_list_categories('current_category=8,51&show_count=1'); ?>

rubriki-wordpress-17

По умолчанию: текущая рубрика.


pad_counts

Суммирует количество записей в дочерних рубриках и выводит результат в родительскую рубрику.

1 — выводит количество записей в родительскую рубрику;
0 — количество записей не выводится.

rubriki-wordpress-18

Значение 1 устанавливается автоматически при использовании show_count=1 и hierarchical=1.

По умолчанию: 0.


hide_title_if_empty

Определяет выводить или не выводить заголовок списка рубрик если нет ни одной записи.

0 — выводить заголовок;
1 — не выводить заголовок.

По умолчанию: 0.


taxonomy

В качестве значение указывается название таксономии, рубрики которой будут выведены на экран. Незаменимый аргумент для вывода таксономий произвольных типов записей.

<?php
$args = array(
  'taxonomy'     => 'product', // Название произвольной таксономии
  'orderby'      => 'name',  // Сортируем по названия, согласно алфавиту 
  'show_count'   => 1,       // Выводим количество записей
  'exclude'   => 10,22,       // Исключаем рубрики с ID 10 и 14
  'hierarchical' => 1,       // Включаем древовидный список
  'title_li'     => '',    // Убираем заголовок списка
  'use_desc_for_title' => 1   // Выводим описание рубрик
);
?>
// Код для вставки в виджет или другое место на сайте
<ul>
<?php wp_list_categories( $args ); ?>
</ul>

По умолчанию: category.


walker

Аргумент принимает расширение объекта (класса), который предназначен для создание списка категорий. Передаваемый аргументу объект — это расширение для класса Walker_Category или Walker.

По умолчанию: Walker_Category.

Встроенные CSS классы для тегов li и ul

li.categories { ... }  /* общий селектор */
li.cat-item { ... }    /* для всех рубрик в отдельности */
ul.children { ... }  /* селектор для родительских рубрик */
li.cat-item-7 { ... }  /* селектор для рубрики с ID 7 */
li.current-cat { ... }  /* селектор для текущей рубрики */
li.current-cat-parent { ... } /* селектор для родительской рубрики текущей подрубрики */

На этом у меня все. Если есть вопросы, всегда готов ответить на них в комментариях.

Еще статьи по теме:

Категории WordPress — термы и таксономии
Шаблоны для категорий — как сделать каталог из рубрики

До встречи!

С уважением, Виталий Кириллов

Комментарии: 26

  1. Татьяна:

    Здравствуйте, Виталий!
    Замечательно, что Вы затронули эту тему. Я вот давно интересуюсь, как сделать так, чтобы при нажатии на родительскую рубрику, не выводились ВСЕ записи дочерних рубрик? Можно ли, скажем, выводить записи именно этой родительской рубрики? Есть такой параметр?
    Спасибо!

    Ответить
    • Виталий Кириллов:

      Татьяна, параметры функции wp_list_categories() могут влиять на отображение меню рубрик и не распространяют свое действие на сами записи. Вы можете создать произвольное меню (внешний вид -> меню), где можно с легкостью реализовать задуманную Вами расстановку.

      Ответить
      • Татьяна:

        Спасибо за ответ! Но самой мне это не реализовать… Буду надеяться, что Вы когда-нибудь напишите подробную статью, как это сделать) Я думаю, что многие заинтересуются!

        Ответить
        • Виталий Кириллов:

          Хорошо Татьяна, буду иметь в виду.

          Ответить
  2. Наталья:

    Виталий, спасибо за подробную статью! Все очень понятно и доходчиво) Какую же Вы работу проделали объемную!

    Ответить
    • Виталий Кириллов:

      Здравствуйте Наталья! Рад снова Вас видеть на блоге! Я по-другому писать не умею, краткость не мой талант)

      Ответить
  3. Bogutskiy:

    Отличная статья. Сделал все как описано. Все получилось. Спасибо.

    Ответить
  4. Юрий:

    Вечер добрый! Может подскажите код CSS для создания стиля выводимых категорий , с появлением дочерних элементов как в меню. ( первичная попытка, показывает , что это возможно)

    Ответить
  5. Владимир:

    Виталий приветствую, помоги если можешь, как на сайте WP защитить рубрику паролем, короче нужно к одному разделу сделать ограниченный доступ, как это реализовать, заранее благодарю.

    Ответить
    • Виталий Кириллов:

      Владимир, на WP есть возможность защищать паролем только запись или страницу! Как это провернуть с рубрикой я не знаю.

      Ответить
      • Татьяна:

        Интересно… Виталий, а у Вас нет случайно статьи на эту тему?

        Ответить
        • Виталий Кириллов:

          Татьяна, на какую тему?

          Ответить
  6. Татьяна:

    На тему «Как защитить паролем запись или страницу». Первый раз услышала о такой возможности от WordPress…

    Ответить
    • Виталий Кириллов:

      Нет, такой статьи нет. Возможно стоит написать. Если честно, думал, что все знают, как защищать записи паролем.

      Ответить
  7. Татьяна:

    Тогда буду ждать такую статью. А вот еще Виталий, дайте, пожалуйста, ссылочку на статью, как вывести по клику на Рубрику список Дочерних рубрик в виде списка.Такая статья вроде у Вас была.

    Ответить
    • Виталий Кириллов:

      Вы имеете в виду меню-аккордеон? Нет какой статьи у меня пока нет.

      Ответить
  8. Татьяна:

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

    Ответить
    • Виталий Кириллов:

      Т.е. родительская рубрика располагается в меню сайдбара и по клику на нее должны отобразиться анонсы только дочерних рубрик. Я правильно понял?

      Ответить
  9. Татьяна:

    Да, это как раз то, что я имела в виду. Просто на данный момент в WP реализовано,что по клику на нее выдаются либо все записи (и дочерних и родительских) в куче…

    Ответить
    • Виталий Кириллов:

      Татьяна, так я описывал данные настройки в этой статье.

      Ответить
  10. Татьяна:

    Чтобы получилось нечто похожее на карту рубрики (аналогично тому, как это реализует плагин в карте сайте). Можно так сделать?

    Ответить
    • Виталий Кириллов:

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

      Ответить
      • Татьяна:

        Да. Простите, что Вас запутала…

        Ответить
  11. Татьяна:

    Вот я эту статью как раз и ищу. Спасибо большое, Виталий! Буду разбираться!

    Ответить
  12. Татьяна:

    Да, именно так. Можно было бы добавить еще описание этой рубрики.

    Ответить
  13. Steve:

    Добрый день. Спасибо за полезную статью. Подскажите, пожалуйста, а как сделать так, чтобы в меню отображались только категории с записями, а пустые не отображались, пока в них не появятся записи. Знаю, что менюшки можно настраивать, но можно ли как-то сделать так, чтобы оно автоматом подтягивало менюшки с записями, а пустые прятало (в wp-admin/nav-menus.php я все заранее настрою). Нужно это для того, что у меня 150+категорий и настроено меню, НО далеко не по всем подкатегориям и категориям есть записи.

    Спасибо!

    Ответить

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

Внимание комментатор! Прежде чем вставить: HTML, JavaScript или PHP код в свой комментарий, преобразуй его в html сущность!

Subscribe without commenting

» Подписаться на комментарии по RSS