Как динамически исключать пустые категории из меню навигации в WordPress

Недавно один из наших читателей спросил, как можно исключить категории из меню навигации налету, если в категории нет записей. В этой статье мы покажем как реализовать задуманное.

Для этого решения мы будем использовать фильтр wp_get_nav_menu_items и global $wpdb object [codex]. Они помогут нам убрать пустые термы из любых таксономий.

Фильтр wp_get_nav_menu_items применяется к массиву элементов меню в функции wp_get_nav_menu_items() [codex] и наша отфильтрованная функция получит три аргумента, но мы будем использовать только первый из них:

  1. $items – массив элементов меню
  2. $menu – объект меню
  3. $args – аргументы, передаваемые для функции wp_get_nav_menu_items()

Сначала обращаемся к $wpdb, что позволит нам выполнять прямые SQL запросы. Затем используем метод get_col для того, чтобы получить массив, содержащий ID всех пустых термов в базе данных. Далее через цикл обрабатываем все элементы меню $items, и если элемент меню является термом таксономии и его ID находится в списке пустых термов, то убираем его.

Все, что нужно для работы кода, это добавить его в файл functions.php вашей темы или в плагин для сайта WordPress:

add_filter( 'wp_get_nav_menu_items', 'gowp_nav_remove_empty_terms', 10, 3 );
function gowp_nav_remove_empty_terms ( $items, $menu, $args ) {
	global $wpdb;
	$empty = $wpdb->get_col( "SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE count = 0" );
	foreach ( $items as $key => $item ) {
		if ( ( 'taxonomy' == $item->type ) && ( in_array( $item->object_id, $empty ) ) ) {
			unset( $items[$key] );
		}
	}
	return $items;
}

По всем вопросам и отзывам просьба писать в комментарии ниже.

Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.

VN:F [1.9.22_1171]
Rating: 2.0/5 (39 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top