wp_list_categories() — вывод категорий в виде списка

Эта функция довольно часто используется в темах WordPress для создания меню. А так же с её помощью очень удобно выводить виджет со списком категорий в сайдбаре. Когда я говорю список, я имею ввиду HTML-список.

Если же вам нужно вывести рубрики к текущей записи или к записи с указанным ID — воспользуйтесь функцией the_category() или get_the_category().

А теперь рассмотрим простейший пример:

wp_list_categories('orderby=name');

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

<li class="categories">Рубрики
<ul>
	<li class="cat-item cat-item-1">
		<a href="http://ваш_сайт.com/category/plugins" title="Просмотреть все записи в рубрике &amp;laquo;Плагины&amp;raquo;">Плагины</a> 
	</li> 
	<li class="cat-item cat-item-3">
		<a href="http://ваш_сайт.com/category/themes" title="Просмотреть все записи в рубрике &amp;laquo;Темы&amp;raquo;">Темы</a> 
	</li> 
</ul>
</li>

Теперь добавим несколько параметров

wp_list_categories('orderby=name&style=none&title_li=');

Оставляем сортировку по имени, но теперь категории будут выводиться не через <li>-список, а просто в виде ссылок (каждая с новой строки), пустой параметр title_li означает, что не нужно добавлять заголовок. Вот, как это выглядит в HTML-коде:

<a href="http://ваш_сайт.com/category/plugins" title="Просмотреть все записи в рубрике &amp;laquo;Плагины&amp;raquo;">Плагины</a><br />
<a href="http://ваш_сайт.com/category/themes" title="Просмотреть все записи в рубрике &amp;laquo;Темы&amp;raquo;">Темы</a><br />

Понятно, что чем больше вы засунете параметров в скобки, тем труднее будет во всем этом разобраться в дальнейшем, поэтому есть ещё один вариант записи.

Сначала идёт присвоение значений массиву $args, а потом он просто указывается в скобках.

$args = array(
	'orderby' => 'name',
	'style' => 'none',
	'title_li' => ''
);
 
wp_list_categories($args);

Теперь посмотрим, какие ещё могут быть параметры у функции:

show_option_all
(строка) Нужно ли добавить ссылку на главную страницу? Можно указать любое значение, например ‘На главную’ — оно и будет анкором для ссылки.

orderby
(строка) Каким образом вы хотите отсортировать категории?

  • ID — по id категории (по умолчанию)
  • name — по имени
  • slug — по ярлыку
  • count — по числу записей

order
(строка) Устанавливает порядок сортировки.

  • asc — по возрастанию (по умолчанию)
  • desc — по убыванию

style
(строка) Стиль вывода списка категорий.

  • list — в виде <li>-списка (по умолчанию)
  • none — в виде ссылок, разделенных тегом

show_count
(логическое) Указывает в скобках количество постов в каждой из рубрик.

  • 1 — да
  • 0 — нет (по умолчанию)

hide_empty
(логическое) Нужно ли исключить пустые рубрики (категории) из списка?

  • 1 — да (по умолчанию)
  • 0 — нет

use_desc_for_title
(логическое) Нужно ли использовать описание рубрик в атрибуте title для ссылок, если оно имеется. (пример: <a title="Описание_категории" href="…)

  • 1 — да (по умолчанию)
  • 0 — нет

child_of
(целое число) Нужно указать id рубрики, подрубрики которой вы хотите вывести.

feed
(строка) Рядом с каждой категорией вставляет ссылку на RSS-ленту. Указанное значение будет анкором этих ссылок.

feed_image
(строка) Аналогичен предыдущему параметру, но только вставляет ссылку с картинкой. В качестве значения укажите адрес картинки.

feed_type
(строка) Тип RSS-ленты.

  • atom
  • rdf
  • rss
  • rss2 (по умолчанию)

exclude
(целое число) Перечислите через запятую id категорий, которые вы хотите исключить из списка.

exclude_tree
(целое число) Исключить рубрику и все её подрубрики из списка. Работает только при выключенном hierarchical.

include
(целое число) Укажите через запятую категории (их id), которые вы хотите включить в список.

hierarchical
(логическое) Нужно ли создавать вложенные списки для подкатегорий?

  • 1 — да (по умолчанию)
  • 0 — нет

title_li
(строка) Заголовок для списка категорий. По умолчанию __( ‘Categories’ ). То есть в русском WordPress это будет переведено в «Рубрики». Оставьте параметр пустым, чтобы избавиться от заголовка.

number
(целое число) Сколько категорий нужно отобразить в списке?

echo
(логическое) Вывод списка категорий или сохранение результата в переменную.

  • 1 — да (по умолчанию)
  • 0 — нет

depth
(целое число) Количество уровней вложенности списка.

  • 0 — неограниченно (по умолчанию)
  • -1 — без уровней вложенности, параметр hierarchical игнорируется
  • n — любое целое число

taxonomy
(строка) Выберите таксономию для вывода:

  • category — рубрики (по умолчанию)
  • taxonomy — любая зарегистрированная таксономия

current_category
(целое число) Укажите id категории из списка, для которой вы хотите добавить css-класс «current-cat». По умолчанию он добавляется к той категории, в которой в данный момент находится пользователь.

Пример:

$args = array(
	'show_option_all'    => 'Перейти на главную',
	'orderby'            => 'name',
	'order'              => 'desc',
	'style'              => 'list',
	'show_count'         => 1,
	'hide_empty'         => 0,
	'use_desc_for_title' => 1,
	'feed'               => 'RSS',
	'exclude'            => '4,3',
	'exclude_tree'       => 7,
	'hierarchical'       => 1,
	'title_li'           => 'Мои рубрики',
	'echo'               => 1,
	'depth'              => 0
);
 
wp_list_categories($args);

Вот как это будет выглядеть в итоге:

<li class="categories">Мои рубрики
<ul>
	<li>
		<a href="http://ваш_сайт.com">Перейти на главную</a>
	</li>
	<li class="cat-item cat-item-2">
		<a href="http://ваш_сайт.com/category/ярлык_рубрики" title="описание_рубрики">название_рубрики</a> (<a href="http://ваш_сайт.com/category/ярлык_рубрики/feed" title="RSS">RSS</a>) (0)
	</li> 
	<li class="cat-item cat-item-1">
		<a href="http://ваш_сайт.com/category/ярлык_рубрики" title="описание_рубрики">название_рубрики</a> (<a href="http://ваш_сайт.com/category/ярлык_рубрики/feed" title="RSS">RSS</a>) (1)
		<ul class='children'> 
			<li class="cat-item cat-item-5"><a href="http://ваш_сайт.com/category/ярлык_рубрики/ярлык_рубрики" title="описание_рубрики">название_рубрики</a> (<a href="http://ваш_сайт.com/category/ярлык_рубрики/ярлык_рубрики/feed" title="RSS">RSS</a>) (0)
			</li> 
		</ul> 
	</li> 
</ul>
</li>

Комментарии 42

  • JeJey1 ноября 2011 в 19:11 #

    а что такое анкор?

  • sanches8128 сентября 2012 в 01:09 #

    Я думаю, что сайт сделан на уровне! Приятно находится! На по гугл +1! )

    И вопрос: а как вывести заголовок текущей категории? в single.php

    • Миша10 сентября 2012 в 00:09 #

      спс) используй функцию the_category() например, есть и другие варианты, но там побольше кода уже)

  • Александр10 апреля 2013 в 12:04 #

    А как указать путь к картинке категории, параметр feed_image ?

  • Александр10 апреля 2013 в 12:04 #

    И как сделать, чтобы картинка выводилась перед названием категории, а не за ней?

  • Сергей31 августа 2013 в 05:08 #

    Подскажите, как добавить доп. теги к элементам списка? Я, к примеру, хочу выделить категории заголовком h2. before_link и after_link здесь не работают.

    • Миша31 августа 2013 в 11:08 #

      как вариант:

      $categories = wp_list_categories("style=none&echo=0&title_li=");
      echo '<h2>' . str_replace("<br />", "</h2>\n<h2>", $categories) . '</h2>';
  • sergey66613 апреля 2014 в 19:04 #

    как к аргументу show_count присвоить свой стиль css?

  • Антон18 марта 2015 в 23:03 #

    Добрый день.

    Тоже интересует вопрос – как присвоить стиль к show_count?

    • Миша19 марта 2015 в 07:03 #

      Добрый день!
      Тут можно поступить так - присваиваете стиль к элементу li (он же и будет применяться для show_count), а потом отдельно для элемента а.

  • Антон19 марта 2015 в 10:03 #

    Михаил, я нашел на разработанном вами сайте пример, что именно требуется – http://rghost.ru/78nZ6gFFc. Как это реализовать:

    "Название рубрики"
    (число)

    Я правильно понимаю, что требуется править файл category-template.php?

    • Миша20 марта 2015 в 11:03 #

      Ни в коем случае не надо, используйте функцию get_categories().

      • Антон20 марта 2015 в 14:03 #

        А почему? Якобы после обновления движка все слетит? Я просто уже сделал у себя на сайте. А как использовать get_categories() я не знаю. Может на статью кинете ссылку - разберусь с этой темой?)
        Как сделал - можете по ссылке посмотреть – http://seo-drojji.ru/bez-rubriki/

        • Миша21 марта 2015 в 07:03 #

          Не только, могут появиться баги или сбои с работе движка (даже незаметные).

          Ссылку на описание функции я оставил в предыдущем комментарии.

  • Антон21 марта 2015 в 10:03 #

    Ооох. Сложно как-то все описано:) Ладно, буду дальше искать ответ.

    • Миша21 марта 2015 в 17:03 #

      Пожалуйста :)

      $all_categories = get_categories('hide_empty=0');
      echo '<ul>';
      foreach( $all_categories as $single_cat ){
      	echo '<li><a href="' . get_category_link($single_cat->term_id) . '">' . $single_cat->name . ' <span>(' . $single_cat->count . ')</span></a></li>';
      }
      echo '</ul>';
    • Миша21 марта 2015 в 17:03 #

      Если будут вопросы по коду, спрашивайте пожалуйста — буду рад вам помочь, если будет время.

  • Антон22 марта 2015 в 12:03 #

    Михаил, а этот код куда необходимо вставлять? sidebar.php? У меня просто реализовано через виджеты вывод рубрик.

  • Антон22 марта 2015 в 18:03 #

    Вроде разобрался, но не знаю так или не так я сделал...Могли бы вы посмотреть на сайте? Код очень большой, чтобы его присылать:)

    Можно еще вопрос: в раздел рубрик я добавил текстовые поля (http://seo-drojji.ru/bez-rubriki/). На первой странице записи отображаются, но на второй (http://seo-drojji.ru/bez-rubriki/page/2/) текст скрывается (так необходимо) и записи "наезжают" друг на друга (так не должно быть). С чем это может быть связано?!

    • Миша23 марта 2015 в 07:03 #

      Вроде всё окей. А то, что текст исчезает — возможно для вывода второй страницы у вас используется файл pages.php?

  • Антон22 марта 2015 в 19:03 #

    Код для вывода рубрик сайта, который вы указали выше, не добавляется класс "current-cat" для выбранного раздела. Это можно реализовать в виджете?

  • Эдуард3 июня 2015 в 20:06 #

    Подскажите, как вывести категории без сортировки в моем порядке. я в include указал id категорий через запятую.

  • Эдуард3 июня 2015 в 23:06 #

    пробовал. не отключается :(. проблему решил используя orderby=slug и пришлось менять имя ярлыков для упорядочения

    • Миша4 июня 2015 в 08:06 #

      Та да, я тоже давно с этим мучался, то, что рубрики не имеют возможности сортировки по установленному порядку, сейчас уже и не помню, как решил задачу.

  • Александр11 июля 2015 в 01:07 #

    подскажите пожалуйста, в какой именно файл стиля прописывать

    li.categories { ... } /* общий селектор */
    li.cat-item { ... }
    li.cat-item-7 { ... } /* Рубрика с ID #7 */
    li.current-cat { ... }
    li.current-cat-parent { ... }
    ul.children { ... }

    пытался в стайл в корневой папке шаблона, так не вышло..помогите плиз

  • Алексей10 декабря 2015 в 13:12 #

    Здравствуйте Сегодня обновил вордпрес до последней версии В списки рубрик появились рубрики которые были исключены exclude=1,2,3,4 подскажите как быть Что нужно править чтобы исключенные рубрики не выводились в меню?

  • Алексей11 декабря 2015 в 08:12 #
    <nav class="widget">
    <div class="widget-header">заголовок</div>
    <ul><?php wp_list_categories('orderby=ID&show_count=0&title_li=&hide_empty=0&exclude=1,2,3,4'); ?></ul> 
    </nav>

    exclude=1,2,3,4 в этом списке не отображается только 1 рубрика Меняю местами exclude=3,1,2,4 не отображается 3 рубрика

  • Михаил18 декабря 2015 в 18:12 #

    Подскажите, возможно ли при помощи этой функции вывести списком картинки и название категорий woocommerce?
    А если нет, то какая функция дает такую возможность?
    Спасибо

    • Миша19 декабря 2015 в 10:12 #

      Возможно, если указать правильное значение параметра taxonomy.

      • Михаил19 декабря 2015 в 12:12 #

        Да, все верно. Список категорий у меня вывести получилось. Вот мой код:

        			<?php
        				$args = array(
        				'taxonomy'				=> 'product_cat',	// название таксономии
        				'child_of'				=> 7,				// родительская категория (Очки)
        				'use_desc_for_title'	=> 0,		// 
        				'depth'					=> 1,				// глубина вложенности потомков
        				'show_count'			=> 0,				// не показываем количество записей
        				'pad_counts'			=> 0,				// не показываем количество записей у родителей
        				'hierarchical'			=> 1,				// древовидное представление
        				'title_li'				=> '',				// список без заголовка
        				'hide_empty'			=> 0,				// показать пустые категории
        				);
        			?>
        			<ul>
        				<?php wp_list_categories( $args ); ?>
        			</ul>

        Здесь все ок. Но, мне нужно теперь к каждой категории добавить еще ее картинку. И тут у меня проблема - куда что нужно для этого добавить я понятия не имею :(
        Может вы подскажите?

  • Иван19 марта 2016 в 17:03 #

    Миша, подскажите пожалуйста у меня название к-либо отдельной рубрики выводится в заголовке на определенной странице. Вывожу заголовок так:

    if ( is_category() ) { echo mytheme_title('',true); }

    Плюс в функциях у меня настройки на заголовок.. в общем получается так:
    ... статей на тему "Какая-то тема"
    Мне нужно вместо точек ... поставить количество записей этой категории.
    $show_count показывает ноль, не считает (см. ниже)
    Вот функция вывода заголовка..

    // Вывожу третий заголовок для рубрик
    function mytheme_title_three($display = true, $seplocation = '') {
    	global $wpdb, $wp_locale;
     
    	$title = '';
     
    	// If there's a category or tag
    	if ( is_category() || is_tag() ) {
    		$title = 'Всего'. $show_count .single_term_title( ' статей по теме &#171;', false );
    	}
    	// If there's a taxonomy
    	if ( is_tax() ) {
    		$term = get_queried_object();
    		if ( $term ) {
    			$tax = get_taxonomy( $term->taxonomy );
    			$title = single_term_title( $tax->labels->name . $t_sep, false );
    		}
    	}
     
    	$title = apply_filters( 'mytheme_title', $title, $sep, $seplocation );
     
    	// Send it out
    	if ( $display )
    		echo $title;
    	else
    		return $title;
     
    }

    Спасибо!

  • Иван20 марта 2016 в 12:03 #

    Решение нашел сам, спасибо

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

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Добрый день! В принципе вам только немного нужно доработать код из этого поста - категории уже есть, цена - это и так...

  • eveniy: Добрый день Михаил, подскажите на примере как добавить свои произвольные поля в в вашу форму фильтрации: Я так понимаю...

  • Миша: Отлично! )

  • Дмитрий: сам разобрался: в настройках кастомного типа записи недавно оптимизировал настройки и переоптимизировал: в аргументе 'ta...

  • Дмитрий: У меня по какой-то причине пропало отображение (как в колонке меню слева, так и метабокс в записях ) раздела рубрик для...