В предыдущей статье мы увидели, как легко работать с категориями в WordPress . Мы рассмотрели, как мы можем сортировать наши посты по различным категориям, которые затем можно редактировать или удалять.
Изучив основы, теперь пришло время взглянуть на что-то, что будет более интересным для разработчиков: API категорий, а также способы получения и отображения данных категорий.
Как и API менеджера ссылок, API категорий является большой темой, даже с точки зрения количества доступных функций. В этой статье мы рассмотрим одну функцию, которая полезна, когда мы хотим перечислить наши категории.
Списки категорий
В API менеджера ссылок мы находим важную функцию, которая позволяет нам перечислять наши ссылки. Поэтому неудивительно, что мы находим то же самое в API категорий: wp_list_categories()
, с этой функцией мы будем работать здесь.
По сути, вы должны вызывать эту функцию там, где вы хотите увидеть свои категории в списке.
wp_list_categories();
Как вы можете себе представить, этот результат полностью настраиваемый. Чтобы приспособить его к нашим потребностям, мы можем передать аргумент этой функции: массив, содержащий значения для параметров, которые мы хотим установить. Давайте посмотрим на некоторые из доступных вариантов.
Выбор категорий для отображения
Прежде чем посмотреть, как настроить вывод, мы начнем с некоторых опций, которые позволяют нам выбирать, что отображать.
Включить и исключить категории
Сначала мы находим опцию include
которая принимает список идентификаторов категорий для отображения. Когда вы используете эту опцию, wp_list_categories()
будет отображать только категории с идентификаторами, которые вы передали. Вы можете указать один или несколько идентификаторов. Если вы хотите указать два или более идентификаторов, вы должны разделить эти цифры запятой.
$args = array( 'include' => '15,16,9' ); wp_list_categories($args);
Если, с другой стороны, вы не хотите выбирать, что отображать, а что не отображать, опция exclude
для вас. Он может использоваться точно так же, как include
.
$args = array( 'exclude' => '15,16,9' );
Обратите внимание, что если вы хотите использовать опцию exclude
, include
должен быть пустым (значение по умолчанию). В противном случае include
опция include
и отображаются только переданные ей категории.
Другая опция для исключения категорий — exclude_tree
. Еще раз, он принимает разделенный запятыми список идентификаторов категорий для исключения. Разница в том, что это исключит выбранные категории и всех их детей. Обратите внимание, что для того, чтобы эта опция работала, вы должны установить hierarchical
опцию на 0
(ниже мы увидим, что делает эта опция).
// 14 is the ID of "My life", parent of "My goldfish" and "My garden" which will also be hidden $args = array( 'exclude_tree' => '14', 'hierarchical' => 0 );
Упорядочить вывод
По умолчанию категории перечислены в алфавитном порядке. Вы можете изменить это поведение благодаря опции orderby
, которая принимает строку. Вы можете выбрать одну из следующих опций: ID
чтобы упорядочить категории по их идентификатору (нет, правда?), name
чтобы отсортировать их по алфавиту (значение по умолчанию), slug
чтобы отсортировать их в алфавитном порядке их слагов, и count
по порядку. по количеству сообщений, которые они содержат.
Выбранный порядок можно изменить, установив DESC
(по убыванию) в качестве значения для параметра order
(по умолчанию для этого параметра установлено значение ASC
(по возрастанию)).
В приведенном ниже примере мы перечисляем категории по количеству постов, которые они содержат: при обратном порядке первым будет отображаться категория, содержащая наибольшее количество постов.
$args = array( 'orderby' => 'count', 'order' => 'DESC' );
Ограничить количество отображаемых категорий
После того, как мы заказали наши категории, мы можем захотеть ограничить количество товаров в списке. Это может быть достигнуто с помощью параметра number
. По умолчанию для этой опции задано значение null
и ограничений нет, поэтому отображаются все категории. Указав число, вы можете определить максимальное количество категорий для отображения. Например, мы можем перечислить пять наиболее часто используемых категорий.
$args = array( 'orderby' => 'count', 'order' => 'DESC', 'number' => 5 );
В этом примере перечислены категории с наибольшим количеством сообщений. Другое решение — скрыть неиспользуемые категории. Для этого мы можем использовать hide_empty
, логическое значение по умолчанию, hide_empty
1
: пустые категории не отображаются. Вы можете выбрать их отображение, установив для этого значение 0
.
// Show me all the categories, even the empty ones $args = array( 'hide_empty' => 0 );
Указание деталей для отображения
Детали важны, и мы всегда хотим включить некоторые из них.
Счетчики!
Например, вы можете отобразить количество сообщений, содержащихся в каждой категории. Чтобы отобразить это, вы можете использовать опцию show_count
и установить его в 1
. По умолчанию это логическое значение равно 0
и это количество не отображается.
$args = array( 'show_count' => 1 );
Обратите внимание, что сообщение в дочерней категории также будет добавлено к общему количеству сообщений его родителя. Например, на снимке экрана ниже представлены три сообщения из категории « Моя жизнь »: хотя в этой категории только один пост, два других находятся в дочерних категориях.
Вы можете изменить это поведение благодаря опции pad_counts
. Если вы установите это значение 0
, при подсчете количества родителей будет отображаться только количество сообщений в категориях этих родителей, и они не будут включать сообщения в дочерние категории.
$args = array( 'show_count' => 1, 'pad_counts' => 0 );
Описания категорий
Как мы видели в нашей предыдущей статье, мы можем задать описание для наших категорий. Это описание может отображаться с помощью опции use_desc_for_title
. По умолчанию это логическое значение 1
: описания отображаются в атрибуте title
ссылок в списке. Если вы не хотите видеть это описание, вы можете установить его на 0
.
$args = array( 'use_desc_for_title' => 1 );
Ленты
Так же, как WordPress создает канал для ваших сообщений, он также создает один для каждой категории. Посетители могут выбрать только следить за обновлениями интересующих их категорий, если им не нравится весь ваш контент.
Ссылки на эти каналы могут быть показаны в списке наших категорий, благодаря опции feed
. По умолчанию для этой опции задана пустая строка, а ссылки не отображаются. Код ниже показывает, как включить эту опцию.
$args = array( 'feed' => 'RSS' );
По умолчанию связанный канал — RSS2. Но WordPress может генерировать больше типов каналов. Если вы предпочитаете Atom, например, вы можете заставить WordPress показывать этот тип ленты вместо RSS2.
Чтобы выбрать тип канала, который вы хотите видеть отображаемым, вы можете указать любой из следующих параметров: atom
, rss
, rss2
и rdf
.
$args = array( 'feed' => 'Atom', 'feed_type' => 'atom' );
Наконец, если вы предпочитаете использовать изображение для ссылки на ваши RSS-каналы, вы можете указать URL-адрес изображения, которое хотите видеть, в опции feed_image
. Текст в параметре feed
станет альтернативным текстом для изображения.
$args = array( 'feed' => 'RSS', 'feed_image' => 'http://website.org/my-awesome-rss-image.png' );
Эта категория является текущей?
Если вы используете wp_list_categories()
на странице архива (в шаблоне archive.php
), вы увидите, что текущая категория (отображаемая страницей архива) выделена: у тега li
содержащего ссылку на эту категорию, есть еще один класс, чем другие, с именем current-cat
. Вам не нужно ничего делать, чтобы активировать это поведение, и вы не можете деактивировать его (но вы можете не использовать его в своем CSS!).
Однако, возможно, это поведение, которое вы хотите видеть на других страницах, например на тех, которые отображают сообщение Хорошей новостью является то, что вы можете, благодаря опции current_category
. Это логическое значение по умолчанию установлено в 0
. Если установить значение 1
текущая категория будет выделена предыдущим цитируемым классом.
$args = array( 'current_category' => 1 );
Например, предположим, что мы отображаем список наших категорий в шаблоне single.php
. Затем в предыдущем массиве категория текущего сообщения выделяется благодаря классу current-cat
. Все, что нам нужно сделать сейчас, чтобы отобразить это, это добавить соответствующий CSS.
Показ Иерархии
Если у вас много категорий, рекомендуется организовать их в логические иерархии, где под ними находятся родительские категории и их дочерние элементы. Существует несколько опций для обработки отображения иерархий.
Сначала мы рассмотрим hierarchical
. По умолчанию это логическое значение 1
, в результате чего wp_list_categories()
показывает иерархию между категориями (с родителями и детьми), точно так же, как на скриншотах с начала этой статьи. Если вы не хотите показывать свою иерархию, вы можете установить ее в 0
: ваши категории будут перечислены в одном столбце без отступа дочерних категорий.
Обратите внимание на побочный эффект hierarchical
: если вы решите отобразить иерархию, родительские категории всегда будут отображаться, даже если они пусты и опция hide_empty
установлена в 1
.
// Don't show me the hierarchy $args = array( 'hierarchical' => 0 );
Вы также можете использовать иерархию, чтобы делать другие вещи, такие как отображение дочерних элементов данной категории, используя child_of
. Мы можем описать его как противоположность exclude_tree
: мы даем ему идентификатор категории, а wp_list_categories()
будет отображать только его дочерние wp_list_categories()
. Однако имя родительской категории не отображается.
// Show me all the children of this category $args = array( 'child_of' => 14 );
В отличие от exclude_tree
, мы можем передать только один идентификатор child_of
.
Опция depth
позволяет вам контролировать количество уровней, которые могут отображаться в списке. Это может быть полезно, если вы любите категории и имеете сложное дерево с большим количеством поколений. По умолчанию он установлен на 0
и показывает все поколения. В приведенном ниже примере показаны только два уровня категорий: родители и их дети первого уровня. Если у этих детей есть свои дочерние категории, они не будут показаны.
$args = array( 'depth' => 2 );
Обратите внимание, что depth
связана с hierarchical
. Фактически, если вы установите hierarchical
значение 0
, задание значения depth
будет бесполезным: будут показаны все категории, независимо от их уровней в дереве. Напротив, вы также можете переопределить значение hierarchical
с depth
в одном случае: вы устанавливаете depth
-1
. Эффект этого значения заключается в отображении всех категорий без какого-либо отношения. Все категории будут отображаться в одном столбце, даже если для hierarchical
установлено значение 1
.
Управление выводом
По умолчанию wp_list_categories()
отображает список наших категорий. Если вы не хотите этого и предпочитаете хранить результат в переменной, чтобы отобразить его позже, вы можете установить echo
в 0
.
$args = array( 'echo' => 0 ); $cats = wp_list_categories($args);
Это может быть полезно, если вы хотите изменить список перед его отображением.
Далее, давайте посмотрим на show_option_none
. По умолчанию, если wp_list_categories()
не находит какую-либо категорию (это может случиться, если другие параметры слишком ограничивают, например), отображается текст « Нет категорий ». Вы можете изменить это на текст, который вы хотите, используя эту опцию.
$args = array( 'show_option_none' => 'Nothing found :(' );
Следующая title_li
. В наших тестах вы могли заметить, что список категорий инкапсулирован в элемент другого списка. Это может быть полезно, если вы используете wp_list_categories()
в меню, например. Более того, WordPress отображает заголовок для этого списка, который по умолчанию является « Категории ».
Вы можете изменить этот заголовок по умолчанию или даже отключить его, играя с title_li
. Он принимает строку, которая является заголовком для отображения. Если вы укажете эту опцию пустой строкой, список категорий вообще не будет заключен в другой список.
$args = array( 'title_li' => 'My awesome categories' );
Будьте осторожны: если вы отключите отображение списка с пустой строкой, вы должны заключить свой список в теги ul
!
Вам не нравятся списки? Вам понравится опция style
: по умолчанию она установлена в list
а wp_list_categories()
отображает категории в виде элементов списка. Если вы установили style
в none
, ваши категории будут разделены тегами br
.
$args = array( 'style' => 'none' );
Наконец, вы можете попросить WordPress отобразить ссылку на все ваши категории благодаря опции show_option_all
. Вы задаете строку для этой опции, и WordPress отобразит новую ссылку, указывающую на все ваши категории.
$args = array( 'show_option_all' => 'All categories' );
Вывод
Вот и все для wp_list_categories()
. Как видите, количество доступных для этой функции опций довольно велико.
Конечно, API категорий не ограничивается этой функцией. Однако это важно: если у вас нет особых потребностей и вы просто хотите получить базовый список категорий, не ищите другую функцию, эта самая простая опция!
Обратите внимание, что в этой статье мы не говорили о wp_dropdown_categories()
. Эта функция отображает наши категории в раскрывающемся HTML-элементе. Как и wp_list_categories()
, его вывод может быть полностью настроен благодаря множеству опций. Эти параметры аналогичны тем, что доступны в wp_list_categories()
, поэтому мы не будем их здесь описывать. Единственная сложность заключается в том, что некоторые параметры имеют другие значения по умолчанию. Чтобы узнать больше о wp_dropdown_categories()
, вы можете перейти к Кодексу WordPress .
Но есть и другие случаи: что если мы хотим отображать наши категории особым образом? В этом случае wp_list_categories()
недостаточно гибок, так как нам нужно построить наше собственное дерево DOM. Вот почему в следующей статье мы рассмотрим некоторые другие полезные функции в API категорий.