Support » Fixing WordPress » WP 4.0 Broke Main Menu

  • Resolved shainanz

    (@shainanz)


    Hi there,
    Just updated my site to WP 4.0 and all is well except my main menu. It is no longer aligned correctly and it is using a different menu than the one set in WP-Admin. In WP-Admin > Appearance > Menus, everything looks normal, including the location settings.

    See what is happening here.

    The weird thing is that I have another site that is almost identical in terms of structure and menu, and it’s totally fine.

    Any ideas on what’s going on?

Viewing 15 replies - 16 through 30 (of 34 total)
  • asparrow, you will mostly find this code or code like this in your header file (which can be accessed either through FTP or possibly in Appearance > Editor, depending on your set-up).

    I’m also having the same or very similar issue on one of the websites I recently updated.

    Some details for my issue: the site in question had been calling wp_nav_menu with just the name (string, not an object instance) of the menu like wp_nav_menu('My Menu Name'); and it fails and defaults to the first menu in Appearance -> Menus. The site also incorporates a nav walker.

    I’ve narrowed the culprit code down to the wp-includes/nav-menu-template.php file which is now requiring the walker to be an object instance vs. a string for the wp_nav_menu function on v4.0 line 218.

    I did a file comparison on the 3.9.2 nave-menu-template.php (the version we upgraded from) against the 4.0 and there seems to be a few other changes as well that I didn’t happen to see noted in the wp_nav_menu changelog http://codex.wordpress.org/Function_Reference/wp_nav_menu#Change_Log. It appears the defaulting of the first menu on “failure” might be coming from the v4.0 line 280 where $menus = wp_get_nav_menus( array( 'orderby' => 'name' ) ); was added.

    Hopefully this information can get the ball rolling and help someone else out until I have time to look into the issue further.

    I’ve seen this now on two sites after upgrading. I have 2 menus registered – a main header navigation and smaller footer navigation. In each case, regardless of what is specified in the menu location section, it is putting the footer in the header AND the footer.

    Nothing else changed, only the upgrade.

    There’s a bug for sure.

    Having the same problem,
    No programmer fast working solution:
    in “wp-includes” use the older (3.9.2) versions of
    “nav-menu-template.php” and
    “nav-menu.php”

    check it out working @ http://galeried2.ch
    i’ll be back to read a clean solution

    Thanks in advance

    “I have 2 menus registered – a main header navigation and smaller footer navigation. In each case, regardless of what is specified in the menu location section, it is putting the footer in the header AND the footer.”

    Same here.

    Look at another thread I made after replying to this one; I was wrong about it fixing my problem and discovered that custom post types were a part of my problem.

    http://wordpress.org/support/topic/custom-menus-are-still-broken-in-wp-4-locationmenu-name-being-ignored?replies=4

    Look at another thread I made after replying to this one; I was wrong about it fixing my problem and discovered that custom post types were a part of my problem.

    http://wordpress.org/support/topic/custom-menus-are-still-broken-in-wp-4-locationmenu-name-being-ignored?replies=4

    For some reason, my reply posted twice. When I posted it, I got a blank page and WordPress error here in forums. Sorry.

    In regards to my earlier post, I was able to resolve the situation with by replacing:

    wp_nav_menu('My Menu Name');

    with

    $args = array('menu' => 'My Menu Name');
    wp_nav_menu($wp_nav_args);

    To clear up my earlier comment now that I’ve had time to look into the WordPress codex more, the particular failing menu on our site was not using a walker, as you can see the original wp_nav_menu('My Menu Name'); I posted wasn’t being passed the walker parameter or even an array at all.

    What happened:
    The original code most likely had been failing for several past versions of WP, and defaulted to the first menu created, which happened to be the menu we wanted. Now in 4.0, there is a sort on the menus by name on line 280 of wp-includes/nav-menu-template.php triggered when $menu returns false from bad, or no parameters.

    The problem:
    If you’re not properly passing menu parameters through an array, or your passing a broken array or string it will now default to a new menu, assuming you have more than one menu in your WP site, and the title names were not added in alphabetical order.

    The fix:
    Verify the argument arrays you send to wp_nav_menu do not contain any trailing characters, extra commas, incorrect parameters, etc.

    my menu also does work anymore since updating 4.0
    I deactivated all plugins … still not working.

    when I go to the appearance-menus and pull one down to become a submenu … when I save the changes all menu items fall back into first row. The menu does not save the way I structure it.

    the menus that I did before 4.0 are still fine … just when you move them around they also break.

    http://www.hogerzeil.com

    The site that worked used:
    <?php wp_nav_menu( array(‘menu’ => ‘Main Menu’ )); ?>

    The site that didn’t work used:
    <?php wp_nav_menu( array(‘menu’ => ‘Primary Menu’ )); ?>

    That fixed it for me!

    Tore

    Hello lblechl,

    where did you replace the expressions

    “… replacing:

    wp_nav_menu(‘My Menu Name’);

    with

    $args = array(‘menu’ => ‘My Menu Name’);
    wp_nav_menu($wp_nav_args);”

    Thank you!

    have the same problem with the menu that is displayed, but is not clickable.

    where in which file the code must be exchanged for now? that is not apparent from Member lblechl description.

    replace:
    wp_nav_menu(‘My Menu Name’);

    with

    $args = array(‘menu’ => ‘My Menu Name’);
    wp_nav_menu($wp_nav_args);”

    I found that the problem seams to be related to a plug in, just that I do not yet know which one ))

    It will depend on what theme (or potentially plugin or plugins) you have installed. A likely spot will be somewhere in the theme’s header.php or footer.php files, which would be located in your wp-content/themes/<YOUR_CURRENTLY_ACTIVE_THEME_FOLDER>/header.php and wp-content/themes/<YOUR_CURRENTLY_ACTIVE_THEME_FOLDER>/footer.php respectively.

    For those who posted asking where the code is located, do you happen to know what theme (including version number) is currently active on your site? It should be able to be found under the “Appearance -> Themes” menu, and will be listed as “Current Theme”.

    To follow up for the two types of audiences that will be reading this thread…

    For non-developers/non-programmers:
    If you don’t feel comfortable editing source code, you may want to look into trying a new theme, or contacting the theme developer and request they release a fix. It’s also possible the latest release of the theme or plugin in question has been fixed, and a quick update will solve the problem.

    Typically this would not be the type of edit made by the average WordPress end user that simply downloads themes/plugins and installs them. If you do manage to fix the code without contacting the original developer(s), the code will need to be fixed every time the theme or plugin is updated. However, if you have written your own theme or plugin, you would be the intended audience to change the code mentioned above.

    For developers/do-it-yourselfer’s:
    Assuming you have a typical WordPress setup, you will have to do a code search in your editor through all of your active theme’s files for the wp_nav_menu function. It’s important you are looking for the code in the directory for your *currently active* theme. There may be more than one call to this function, and it may exist in more than one page. A good plugin called “What the File”, can be installed to help you identify the files loaded for any particular page or post in question. Keep in mind, it will not identify the header.php and footer.php files, which most likely are always loaded on your themes pages as well.

    If your issue is caused by a faulty plugin, code should be checked in the wp-content/plugins directory as well.

Viewing 15 replies - 16 through 30 (of 34 total)
  • The topic ‘WP 4.0 Broke Main Menu’ is closed to new replies.