是否可以在 Wordpress(侧边栏)new $args 中传递导航小部件?

Is it possible to pass a nav widget in the Wordpress (Sidebar) new $args?

我花了一些时间搜索,但我还没有真正找到任何关于通过新 $args to a navigation widget. I did stumble across this post 的具体内容。但是,我认为这个答案对于我想要实现的目标来说有点矫枉过正。

总结链接 post 它基本上继续展示了如何完成我需要的,但前提是创建了一个全新的小部件。


Specifically, I'm looking to either merge or overwrite the following $args exclusively for a menu widget placed within a Wordpress sidebar;

wp_nav_menu( array $args = array(
   'menu'              => "header-quicklinks",
   'menu_id'           => "quicklinks",
   'theme_location'    => "sidebar-header"
) );

如果可能的话,我想传递小部件的 ID,在我的例子中 nav_menu-6;到该功能,并让 $args 仅专门应用于该菜单,这样我可以修改代码以针对其他菜单,如果我有要求的话。

目前正在修改以下内容;

function widget_nav_args($args){
  $menu = $args['menu'];
  if($menu->term_id === "menu-quick-links") { // < Error: non-object.
     return array_merge( $args, array(
            'menu_class' => 'TESTING', // for testing.
            // More settings here ... 
     ) );
  }
  return $args;
}
add_filter('widget_nav_menu_args', 'widget_nav_args');
add_filter('widget_nav_menu_args', 'my_wp_nav_menu_args');

function my_wp_nav_menu_args($args) {

    if (is_page(2) //Only target page 2 
            && $args['theme_location'] === 'primary') { // Check and only target the primary menu
        $args['menu'] = 'Menu for Profile';
    }
    return $args;
}

示例参数如下。

$arguments = array(
    'menu' => '',
    'container' => 'div',
    'container_class' => '',
    'container_id' => '',
    'menu_class' => 'menu',
    'menu_id' => '',
    'echo' => true,
    'fallback_cb' => 'wp_page_menu',
    'before' => '',
    'after' => '',
    'link_before' => '',
    'link_after' => '',
    'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
    'item_spacing' => 'preserve',
    'depth' => 0,
    'walker' => '',
    'theme_location' => ''
);

你快到了。 widget_nav_menu_args 过滤器比导航的 $args 接受更多的参数。您想要查看作为第三个参数的小部件参数。它看起来像这样:

function widget_nav_args( $nav_menu_args, $nav_menu, $args, $instance){ // <- notice extra params..

    if( $args['id'] === 'sidebarheader' ) { // < This is where we check if it's the right widget
      return array_merge( $nav_menu_args, array(
          'menu_class' => 'TESTING', // for testing.
          // More settings here ... 
     ) );
  }

  return $nav_menu_args;
}

add_filter('widget_nav_menu_args', 'widget_nav_args', 10, 4);

请注意,我必须明确说明要传递给过滤函数的参数数量。请务必通读 WP Codex here.

中的文档

希望对您有所帮助!