Недавно один из наших читателей спросил, как можно исключить категории из меню навигации налету, если в категории нет записей. В этой статье мы покажем как реализовать задуманное.
Для этого решения мы будем использовать фильтр wp_get_nav_menu_items и global $wpdb object [codex]. Они помогут нам убрать пустые термы из любых таксономий.
Фильтр wp_get_nav_menu_items применяется к массиву элементов меню в функции wp_get_nav_menu_items() [codex] и наша отфильтрованная функция получит три аргумента, но мы будем использовать только первый из них:
- $items – массив элементов меню
- $menu – объект меню
- $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;
}
По всем вопросам и отзывам просьба писать в комментарии ниже.
Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.
