Как вывести список категорий
Я пытаюсь настроить список категорий с кликабельными ссылками на эти категории. Я просмотрел:
и не совсем уверен, куда поместить код или как получить к нему доступ на странице.
Я достаточно хорошо понимаю PHP - он довольно прост, просто я относительно новичок в WP и мне нужна помощь с реализацией.

Я покажу вам, как вывести список категорий в WordPress и пометить активную категорию, смотрите код ниже:
<?php // Получаем текущий запрашиваемый объект $term = get_queried_object(); $term_id = ( isset( $term->term_id ) ) ? (int) $term->term_id : 0; $categories = get_categories( array( 'taxonomy' => 'category', // Таксономия для получения терминов. Мы используем 'category'. Этот параметр по умолчанию 'category', поэтому его можно опустить 'orderby' => 'name', 'parent' => 0, 'hide_empty' => 0, // измените на 1, чтобы скрыть категории без записей ) ); ?> <ul> <?php foreach ( $categories as $category ) { $cat_ID = (int) $category->term_id; $category_name = $category->name; // При просмотре конкретной категории добавляем класс [active] $cat_class = ( $cat_ID == $term_id ) ? 'active' : 'not-active'; // Я не люблю показывать категорию [uncategorized] if ( strtolower( $category_name ) != 'uncategorized' ) { printf( '%3$s', esc_attr( $cat_class ), esc_url( get_category_link( $category->term_id ) ), esc_html( $category->name ) ); } } ?> </ul>
Примечания к коду выше:
get_queried_object() получает текущий запрашиваемый объект. Например:
- если вы на странице записи, вернётся объект записи
- если вы на странице, вернётся объект страницы
- если вы в архиве, вернётся объект типа записи
- если вы в архиве категории, вернётся объект категории
- если вы в архиве автора, вернётся объект автора
- и т.д.
Но есть нюансы при использовании get_queried_object()
, не стоит ожидать, что он вернёт объект типа записи, даже если is_post_type_archive() возвращает true. Проверьте это для получения дополнительной информации.
Также обратите внимание, что get_queried_object()
является обёрткой для $wp_query->get_queried_object()
, поэтому возвращает тип данных WP.
get_categories()
get_categories() получает список объектов категорий. Принимает только один параметр - $args
. Параметр $args задаёт список аргументов для получения категорий. Смотрите get_terms() для дополнительных опций.
Однако, чтобы получить категории для конкретной записи, вот простая функция, которую я написал: Как получить список категорий для записи

Как указано в связанной ветке WPSE и принятом ответе, код выглядит следующим образом (скопировано и вставлено):
$categories = get_categories('child_of=31');
foreach ($categories as $category) {
// Отображаем информацию о подкатегории, используя значения $category, такие как $category->cat_name
echo '<h2>'.$category->name.'</h2>';
echo '<ul>';
foreach (get_posts('cat='.$category->term_id) as $post) {
setup_postdata( $post );
echo '<li><a href="'.get_permalink($post->ID).'">'.get_the_title().'</a></li>';
}
echo '</ul>';
}
Для нас (разработчиков WordPress) Кодекс является ключом к большинству базовых вещей. Согласно WordPress Codex:
get_categories()
выполняет запрос для всех категорий сайта и возвращает массив.- Аналогично
get_posts()
выполняет запрос для всех записей сайта и возвращает массив.
Оба этих метода являются сокращёнными версиями WP_Query()
. Все возможные параметры для них можно найти на страницах Кодекса. Поскольку вы увлекаетесь PHP, вы понимаете, как работает код: переменная $categories
получает все категории, и для каждой категории get_posts()
получает её записи.
Это очень похоже на запрос mySQL и цикл foreach в чистом PHP. Вы можете поместить этот код в любую из шаблонных страниц активной темы вашего сайта WordPress. Иерархия шаблонов может дать вам более детальное понимание.
Поскольку заголовок вашего вопроса звучит так:
Как отобразить список категорий
Ответ может быть следующим:
$categories = get_categories();
echo '<ul>';
foreach ($categories as $category) {
echo '<li>'. $category->cat_name .'</li>';
}
echo '</ul>';
Я не совсем уверен, куда вставить этот код или как получить к нему доступ на странице.
Я уже говорил: попробуйте вставить код в index.php
, front-page.php
или куда угодно. Ключевая концепция заключается в том, что это просто SQL-запрос и полезный цикл foreach
на PHP.

Этот метод позволяет исключить любую категорию, просто добавив её ID в код.
Вот более удобный способ условного вывода списка категорий из файла функций вашей дочерней темы в любом хуке WordPress или конкретной темы:
add_filter( 'the_content', 'wpsites_list_cats' );
function wpsites_list_cats($content) {
if( is_singular('post') && is_main_query() ) {
$args = array(
'orderby' => 'name',
'exclude' => '',
'include' => '',
'parent' => 0
);
$categories = get_categories( $args );
echo'<nav id="primary-navigation" class="primary-navigation" role="navigation">';
foreach ( $categories as $category ) {
echo '<li><a href="' . get_category_link( $category->term_id ) . '">' . $category->name . '</a></li>';
}
echo'</nav>';
return $content;
}
}
Вот результат:
А вот результат, если вы хотите использовать существующие стили навигационных меню из темы Twenty Fourteen, которые включены в приведённый выше код.
Код также позволяет включать определённые категории или исключать любые, используя их ID.
Вы также можете создать пользовательскую область виджетов и использовать стандартный виджет категорий WordPress.
Просто измените хук the_content, чтобы поменять расположение списка категорий.
Модифицировано из этого источника

Или используйте плагин List Categories с его собственным настраиваемым шорткодом, который работает как ярлык для wp_list_categories( array|string $args = '' )
функции.
Вы можете настроить его аргументы, как описано в документации.
