campusboy87
10/10/2018 - 12:15 AM

Removes the terms with no posts from the menu.

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;
}