如何在walker类中的最终</ul>标记之前添加内容?

时间:2018-01-25 作者:Abdus Sattar Bhuiyan

这是我想要制作的真实图片。

 <ul>
    <li>
        <ul>
            <li> </li>
            <li> </li>
           ###NOT HERE ###
        </ul>
     </Ii>
    ###I want to add some html here ###
</ul>
我尝试如下:

public function end_lvl( &$output, $depth = 0, $args = array() ) {
    if ( isset( $args->item_spacing ) && \'discard\' === $args->item_spacing ) {
        $t = \'\';
        $n = \'\';
    } else {
        $t = "\\t";
        $n = "\\n";
    }
    $indent = str_repeat( $t, $depth );
    $output .= "$indent".get_search_form(false)."</ul>{$n}";
}
但它在每个子菜单的末尾追加了搜索框(#####不在这里###部分)。如何实现所需的输出。有什么想法吗?

2 个回复
最合适的回答,由SO网友:Abdus Sattar Bhuiyan 整理而成

我应用此技巧过滤菜单:

add_filter(\'wp_nav_menu_items\',\'add_search_box_to_menu\', 10, 2);
    function add_search_box_to_menu( $items, $args ) {
        if( $args->theme_location == \'primary\' )
            return $items."<li class=\'menu-header-search\'><form action=\'http://example.com/\' id=\'searchform\' method=\'get\'><input type=\'text\' name=\'s\' id=\'s\' placeholder=\'Search\'></form></li>";

        return $items;
    }

SO网友:swissspidy

您应该检查$depth 参数以确保搜索表单仅显示在特定的深度/级别,例如。if( 0 === $depth ) { ... }

我个人会把搜索表放在<ul> 虽然我认为它不是有效的HTML。这会影响网站的可访问性。或者,将其包裹在<li></li> 所以这是一个合适的列表项。

结束