0

Im trying to replace my template's primary menu through a plugin so that I don't have to make changes to the header.php.

I found this code in another question answered here in 2011 (Replacing WordPress menu functionality with a plugin)

add_filter('wp_nav_menu', 'my_menu_func'); function my_menu_func(){ print "Testing 123"; } 

It worked but it replaced both my top primary menu and the widget side menu.

How can I specify which menu to target when using the filter?

1 Answer 1

1

You could try the following code snippet to override the primary menu:

/** * Override the primary menu. * * @param string $nav_menu The HTML content for the navigation menu. * @param array $args Array of wp_nav_menu() arguments. * @return string $nav_menu */ function wpse_150003( $nav_menu, $args ) { //Override the primary menu: if( 'primary' === $args->theme_location ) $nav_menu = 'My new menu'; return $nav_menu; } add_filter( 'wp_nav_menu', 'wpse_150003', PHP_INT_MAX, 2 ); 

where we find the input arguments info from the source.

Notice that we return the $nav_menu value, instead of echoing it.

You could also filter my other attributes, for example menu_id.

You might also consider these filters:

  • wp_nav_menu_items
  • wp_nav_menu_{$menu->slug}_items

I hope this helps.

0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.