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

时间:2019-02-16 16:59:28

标签: php wordpress navigation widget args

我花了一些时间进行搜索,但是对于将新的$args传递给导航小部件而言,我还没有发现任何具体的东西。我确实偶然发现了this post。但是,我认为答案对我想要达到的目标有些过高。

要总结链接的帖子,它基本上会继续说明如何完成我需要的工作,但前提是必须创建一个全新的小部件。


  

具体来说,我正在寻找合并或覆盖以下内容的方法   $args专用于放置在Wordpress侧栏中的菜单小部件;

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');

2 个答案:

答案 0 :(得分:1)

您快到了。 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中的文档。

希望有帮助!

答案 1 :(得分:-2)

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' => ''
);