问题描述

我在 wp_nav_menu 功能中使用以下内容创建一个选择下拉菜单,其中每个菜单项是选择下拉列表中的一个选项…

'items_wrap' => '<select>%3$s</select>'
'before'     => '<option value="">'
'after'      => '</option>'

如何在'before'声明中添加链接值?有没有更好的方法来解决这个问题?我知道 wp_dropdown_pages,但是这不起作用,因为我希望用户能够从”Menus” 页面控制菜单。

最佳解决方案

您无法使用 wp_nav_menu 执行此操作,因为它会输出列表项,并且您将使用代码生成无效的标记。

尝试使用 wp_get_nav_menu_items()代替。


使用自定义步行器的下拉菜单的快速解决方案:

class Walker_Nav_Menu_Dropdown extends Walker_Nav_Menu{

    // don't output children opening tag (`<ul>`)
    public function start_lvl(&$output, $depth){}

    // don't output children closing tag    
    public function end_lvl(&$output, $depth){}

    public function start_el(&$output, $item, $depth, $args){

      // add spacing to the title based on the current depth
      $item->title = str_repeat("&nbsp;", $depth * 4) . $item->title;

      // call the prototype and replace the <li> tag
      // from the generated markup...
      parent::start_el(&$output, $item, $depth, $args);
      $output = str_replace('<li', '<option', $output);
    }

    // replace closing </li> with the closing option tag
    public function end_el(&$output, $item, $depth){
      $output .= "</option>n";
    }
}

在你的模板中使用它像这样:

wp_nav_menu(array(
  'theme_location' => 'primary', // your theme location here
  'walker'         => new Walker_Nav_Menu_Dropdown(),
  'items_wrap'     => '<select>%3$s</select>',
));

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。