Как вывести категории записей в WordPress

Йо-йо! Сегодня я расскажу как можно вывести список категорий в worpdress. Хоть эта тема, на мой взгляд, хорошо освещена, до сих пор у многих людей возникают с ней трудности.

Итак. Вывести список категорий или как их иначе называют рубрики можно двумя путями. Первый путь это сразу вывести html, а второй получить массив с объектами категорий. Хоть первый вариант и проще, в нём есть серьёзный недостаток. Он либо может вывести всё в тэгах <li>, либо в виде ссылок через запятую. Это довольно простой вариант, но как правило нам нужно обернуть категорию во что-то другое, например в <div>. В этом случае нам подойдёт второй вариант. Ну начнём.

wp_list_categories

Данная функция выводит html на экран или возвращает его в переменную. Давайте сразу посмотрим пример.

<?php
$args = [
	'echo' => true,
	'style'=>'list',
	'show_count' => false, // что-бы не показывало количество записей в категории
];
?>
<ul>
	<?php wp_list_categories( $args ); ?>
</ul>
// Получим что-то типа этого 
<ul>
	<li><a href="http://exmpl.ru/cat-1">Название категории 1</a></li>
	<li><a href="http://exmpl.ru/cat-2">Название категории 2</a></li>
</ul>

Таким образом мы получили ненумерованный список. Можно получить ссылки.

<?php
$args = [
	'echo' => true,
	'style'=>'none',
	'show_count' => false, // что-бы не показывало количество записей в категории
];
?>
<?php wp_list_categories( $args ); ?>
// Получим что-то типа этого 
<a href="http://exmpl.ru/cat-1">Название категории 1</a>, <br>
<a href="http://exmpl.ru/cat-2">Название категории 2</a>, <br>

У этой функции есть еще множество параметров, которые помогут вам структурировать список, их вы можете узнать в официальной документации или на wp-kama. Однако всё будет крутиться вокруг списков или ссылок и простого способа обернуть категорию, например, в <div> нет. Так что давайте рассмотрим второй способ.

get_categories()

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

$categories = get_categories( array(
	'taxonomy'     => 'category',
	'type'         => 'post',
	'orderby'      => 'name',
	'order'        => 'ASC',
	'number'       => 0,
) );

foreach( $categories as $categoty ){
	// Ваш код.
}

Какие данные есть в категории

$categoty->term_id // id термина таксономии
$categoty->name // Название категории
$categoty->slug // Слаг
$categoty->term_taxonomy_id
$categoty->taxonomy // category
$categoty->description // Описание рубрики
$categoty->parent // Родитель
$categoty->count // Количество записей
$categoty->cat_ID // ID рубрики
$categoty->category_count // Количество категорий
$categoty->category_description // Описание рубрики
$categoty->cat_name (Рубрика 1) // Название категории
$categoty->category_nicename (rubrika-1) // Никнэйм категории
$categoty->category_parent (0) // ID родительской категории

Вам скорее всего нужно будет переформатировать ваш массив так, чтобы иметь иерархическую схему массива. Вы можете это сделать, опираясь на $cat->cat_ID (id категории) и $cat->category_parent (id родительской категории). Тут у вас есть простор для творчества.

Ссылка на категорию

Чтобы получить ссылку на категорию в цикле воспользуйтесь функцией

get_category_link( $category->term_id );

Разобраться с функцией get_categories() вам поможет wp-kama и документация в wordpress

3-й способ

Кроме того что я вам показал, есть еще способ, который я использовал на сайте моего коллеги и описал в своей статье «Как сделать аккордеон меню для категорий сайта на WordPress (реализация jQuery и Bootstrap 3 и Bootstrap 4)«. Там я показал как можно обернуть категории в аккордеон. Возможно этот способ вам подойдёт как никакой другой.