1

I have a site whose navigation disappears on category pages for posts in the ‘post’ post type, but not for posts in any of my custom post types. The ‘post’ post type and post of the custom post types use the same template file for theirs archives and headers – no differences. The menu is using the wp_nav_menu function. Example links below (again, same template files being used):

Menu: http://politichicks.tv/column/

No Menu: http://politichicks.tv/category/videos

0

Have you tried using the wp_nav_menu() function? here is the wp_nav_menu reference.

Instead of this:

<?php if ( has_nav_menu( 'primary' )) {
                                if(!getMainMenu('primary')){
                    /*$backup = $wp_query;
                    $wp_query = NULL;
                    $wp_query = new WP_Query(array('post_type' => 'post'));*/
                    getMainMenu('primary');
                    /*$wp_query = $backup;*/
                }
                            }

I wold try this:

<?php if ( has_nav_menu( 'primary' )) {     
    wp_nav_menu( array('menu' => 'primary' ))
}
  • That's essentially what's happening right now, but yes, I've tried explicitly calling wp_nav_menu( array('menu' => 'primary' ) ). In fact, the code as seen in header.php is a response to the wp_nav_menu() not working. – Jacob Lamont Nov 27 '13 at 21:57
0

I know this is an old question but seems that is still unresolved. As @Milo said you may have an incorrect pre_get_posts implementation.

Most people do this like this (example):

add_filter( 'pre_get_posts', 'query_post_type' );

function query_post_type( $query ) {
    if ( is_category() ) {
        $post_type = get_query_var( 'post_type' );
        if ( $post_type ) {
            $post_type = $post_type;
        } else {
            $post_type = array( 'nav_menu_item', 'post', 'departments' );
        }
        $query->set( 'post_type', $post_type );

        return $query;
    }
}

But we must change the line: $post_type = $post_type; and pass 'nav_menu_item' to the $post_type in order to menu to display, as follow:

add_filter( 'pre_get_posts', 'query_post_type' );
function query_post_type( $query ) {
    if ( is_category() ) {
        $post_type = get_query_var( 'post_type' );
        if ( $post_type ) {
            $post_type = array( 'nav_menu_item', $post_type );
        } else {
            $post_type = array( 'nav_menu_item', 'post', 'departments' );
        }
        $query->set( 'post_type', $post_type );

        return $query;
    }
}

I hope this help people who do this wrong and sorry for my bad English.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.