【问题标题】:Is it possible to pass a nav widget in the Wordpress (Sidebar) new $args?是否可以在 Wordpress(侧边栏)新的 $args 中传递导航小部件?
【发布时间】:2019-02-16 16:59:28
【问题描述】:

我花了一些时间搜索,但我还没有真正找到任何关于将新的$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');

【问题讨论】:

    标签: php wordpress navigation widget args


    【解决方案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 中的文档。

    希望有帮助!

    【讨论】:

    • 嘿伙计,感谢您的努力,但我没有运气,它似乎根本没有针对任何东西,知道为什么吗?
    • @Beaniie 对不起,我返回的是 $args 而不是 $nav_menu_args。我已经编辑了代码示例。 (基本上我使用了 WP codex 中的 var 名称,这与您示例中的 var 名称不同)
    • @Beaniie $args 是当前小部件的参数,请参阅WP Codex,其中包括其id。您需要检查的是 nav_menu-6 是否是您要查找的 id。只需在该函数中弹出print_r($args) 看看它是否有帮助..
    • @Beaniie 我已经在 WP 网站上对其进行了测试,我可以看到它在菜单中添加了“TESTING”类。你没看到吗?
    【解决方案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' => ''
    );
    

    【讨论】:

      猜你喜欢
      • 2020-09-14
      • 2010-11-26
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多