Removes the terms with no posts from the menu.
<?php
add_filter( 'wp_nav_menu_objects', 'delete_empty_terms_from_menu', 10, 2 );
function delete_empty_terms_from_menu( $items, $args ) {
// Проверяем, что область меню primary, чтобы не обрабатывать лишние меню
if ( $args->theme_location === 'primary' ) {
foreach ( $items as $key => $item ) {
// Проверяем, что пункт меню относится к термину и что у него нет постов, и удаляем таковые.
if ( 'taxonomy' == $item->type && get_term( $item->object_id )->count === 0 ) {
unset( $items[ $key ] );
}
}
}
return $items;
}