Как вывести количество записей (постов) в рубрике (категории) в меню в WordPress?
Доводилось ли вам видеть на сайтах навигационное меню, в котором помимо самих пунктов (разделов) показывается ещё и количество записей в них? Лично я не только видел это, но и создавал подобное на одном из сайтов.
Именно этой (правда слегка доработанной) реализацией (и ещё парочкой вариаций) я сегодня с вами поделюсь.
Хак работает только для меню, выведенного через функцию wp_nav_menu(). Подробнее по работе с этой функции вы можете почитать в отдельных наших постах.
Итак, «костяк», общий вариант, который в последующем по необходимости мы будем изменять:
function menu_item_count($output, $item, $depth, $args) {
if($item->object == 'category') {
$count_post = get_term($item->object_id, $item->object)->count;
return str_replace('</a>', ' ('.$count_post.')</a>', $output);
}
return $output;
}
add_action('walker_nav_menu_start_el', 'menu_item_count', 10, 4);
Этот код вы вставляете в низ файла functions.php либо по FTP (путь - /wp-content/themes/папка темы сайта/), либо через панель управления сайтом (Внешний вид – Редактор тем).
Этот (тот, что выше) вариант выводит количество записей у каждой ссылки типа рубрики (независимо от её вложенности) во всех меню.
Если вы хотите внедрить этот функционал на ваш сайт выборочно, то воспользуйтесь следующими его вариациями.
Показать количество записей только в конкретном меню:
function menu_item_count($output, $item, $depth, $args) {
if($item->object == 'category' && $args->menu == 'main_menu') {
$count_post = get_term($item->object_id, $item->object)->count;
return str_replace('</a>', ' ('.$count_post.')</a>', $output);
}
return $output;
}
add_action('walker_nav_menu_start_el', 'menu_item_count', 10, 4);
Здесь «main_menu» – название меню.
Показать количество записей только для конкретного пункта (не путать с конкретной категорией):
function menu_item_count($output, $item, $depth, $args) {
if($item->object == 'category' && $item->ID == 13) {
$count_post = get_term($item->object_id, $item->object)->count;
return str_replace('</a>', ' ('.$count_post.')</a>', $output);
}
return $output;
}
add_action('walker_nav_menu_start_el', 'menu_item_count', 10, 4);
Здесь «13» – это ID нужного пункта. Я узнавал его (ID) через исследование поля «Текст ссылки» в редактировании меню. Код поля выглядит следующим образом:
<input type="text" id="edit-menu-item-title-13" class="widefat edit-menu-item-title" name="menu-item-title[13]" value="Релизы CMS">
Также ID пункта можно узнать, наведя на ссылку «Удалить»,
после чего в нижней части экрана появится полная ссылка, где в ней вы смотрите на часть:
menu-item=13
Показать количество записей только для конкретной рубрики (если ссылок с конкретной категорией в меню несколько – покажет у всех):
function menu_item_count($output, $item, $depth, $args) {
if($item->object == 'category' && $item->object_id == 3) {
$count_post = get_term($item->object_id, $item->object)->count;
return str_replace('</a>', ' ('.$count_post.')</a>', $output);
}
return $output;
}
add_action('walker_nav_menu_start_el', 'menu_item_count', 10, 4);
Здесь «3» – это ID нужной рубрики. Узнать ID рубрики можно в URL, перейдя на страницу редактирования рубрики. Ищите часть:
tag_ID=3
Показать количество записей только для родительских пунктов (без вложенных пунктов):
function menu_item_count($output, $item, $depth, $args) {
if($item->object == 'category' && $item->menu_item_parent == 0) {
$count_post = get_term($item->object_id, $item->object)->count;
return str_replace('</a>', ' ('.$count_post.')</a>', $output);
}
return $output;
}
add_action('walker_nav_menu_start_el', 'menu_item_count', 10, 4);
Показать количество записей только для дочерних (вложенных) пунктов (без родительских):function menu_item_count($output, $item, $depth, $args) {
if($item->object == 'category' && $item->menu_item_parent != 0) {
$count_post = get_term($item->object_id, $item->object)->count;
return str_replace('</a>', ' ('.$count_post.')</a>', $output);
}
return $output;
}
add_action('walker_nav_menu_start_el', 'menu_item_count', 10, 4);
Кажется, всё. Это, на мой взгляд, популярные вариации вывода счётчика записей у категорий в меню WordPress. Если вашего случая здесь нет – пишите об этом в комментариях, обязательно дополню ими пост.