Недавно один из наших читателей спросил, как можно исключить категории из меню навигации налету, если в категории нет записей. В этой статье мы покажем как реализовать задуманное.
Для этого решения мы будем использовать фильтр 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; }
По всем вопросам и отзывам просьба писать в комментарии ниже.
Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.