Йо-йо! Сегодня я расскажу как можно вывести список категорий в worpdress. Хоть эта тема, на мой взгляд, хорошо освещена, до сих пор у многих людей возникают с ней трудности.
Итак. Вывести список категорий или как их иначе называют рубрики можно двумя путями. Первый путь это сразу вывести html, а второй получить массив с объектами категорий. Хоть первый вариант и проще, в нём есть серьёзный недостаток. Он либо может вывести всё в тэгах <li>, либо в виде ссылок через запятую. Это довольно простой вариант, но как правило нам нужно обернуть категорию во что-то другое, например в <div>. В этом случае нам подойдёт второй вариант. Ну начнём.
Данная функция выводит 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> нет. Так что давайте рассмотрим второй способ.
Данная функция возвращает массив объектов, содержащих информацию о категориях. И она лучше подходит для того, чтобы список ваших категорий обернуть в произвольные тэги. Рассмотрим пример.
$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
Кроме того что я вам показал, есть еще способ, который я использовал на сайте моего коллеги и описал в своей статье «Как сделать аккордеон меню для категорий сайта на WordPress (реализация jQuery и Bootstrap 3 и Bootstrap 4)«. Там я показал как можно обернуть категории в аккордеон. Возможно этот способ вам подойдёт как никакой другой.