Быстрый и надёжный хостинг на SSD-дисках от 220 ₽ в месяц   •   Реклама
Артём Мáлков

Как вывести количество записей (постов) в рубрике (категории) в меню в WordPress?

20 окт3 комм

Доводилось ли вам видеть на сайтах навигационное меню, в котором помимо самих пунктов (разделов) показывается ещё и количество записей в них? Лично я не только видел это, но и создавал подобное на одном из сайтов.

Именно этой (правда слегка доработанной) реализацией (и ещё парочкой вариаций) я сегодня с вами поделюсь.

Итак, «костяк», общий вариант, который в последующем по необходимости мы будем изменять:

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/папка темы сайта/), либо через панель управления сайтом (Внешний видРедактор тем).

Как вывести количество записей (постов) в рубрике (категории) в меню в WordPress?

Этот (тот, что выше) вариант выводит количество записей у каждой ссылки типа рубрики (независимо от её вложенности) во всех меню.

Как вывести количество записей (постов) в рубрике (категории) в меню в WordPress?

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

Показать количество записей только в конкретном меню:

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» – название меню.

Как вывести количество записей (постов) в рубрике (категории) в меню в WordPress?

Показать количество записей только для конкретного пункта (не путать с конкретной категорией):

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 пункта можно узнать, наведя на ссылку «Удалить»,

Как вывести количество записей (постов) в рубрике (категории) в меню в WordPress?

после чего в нижней части экрана появится полная ссылка, где в ней вы смотрите на часть:

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. Если вашего случая здесь нет – пишите об этом в комментариях, обязательно дополню ими пост.

3
комментария
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 0
    986
      •  Команда Pandoge
    26 мар в 16:54

    Хочется дополнить пост ещё несколькими моментами.

    1. Если вы хотите вынести счётчик записей за ссылку, строку:

    return str_replace('</a>', ' ('.$count_post.')</a>', $output);

    замените на:

    return $output.' ('.$count_post.')';

    2. Если вы хотите стилизовать счётчик записей, строку:

    return str_replace('</a>', ' ('.$count_post.')</a>', $output);

    замените на:

    return str_replace('</a>', ' <span class="post-count">('.$count_post.')</span></a>', $output);

    После этого, вы можете задать нужные стили для класса post-count.

    3. Если вы не хотите выводить число 0, когда записей в категории нет, строку:

    return str_replace('</a>', ' ('.$count_post.')</a>', $output);

    замените на:

    return str_replace('</a>', ($count_post ? ' ('.$count_post.')' : '').'</a>', $output);
    • 1
    1
      •  Пользователь
    3 мар в 20:11

    Здравствуйте! Как можно вывести в меню количество записей только в подрубриках?

    Пример:

    Основная рубрика (здесь не выводится)

    -Подрубрика 1 (7)

    -Подрубрика 2 (3)

    -Подрубрика 3 (4)

    --подрубрика 3.1 (2)

    Буду благодарен, если подскажете как сделать, чтобы цифры были в той же строке, что и подрубрика, а не переносились на новую

      • 0
      986
        •  Команда Pandoge
      25 мар в 19:15

      Андрей Иванов, Здравствуйте!

      Прошу прощения за затянувшийся ответ. Обновили пост и рассмотрели в нём ваш случай.

Подняться наверх
«Pandoge» - помощник вебмастера