WP_NAV_MENU_ITEMS Filter::自定义菜单不在ul类中

时间:2015-12-10 作者:kiarashi

我正在使用WP的过滤器添加额外的菜单项wp_nav_menu_items 但菜单不属于ul类。

我的代码如下:

     function your_custom_menu_item ( $items, $args ) {

    global $mytheme_option; 

    $layout = $kiwi_theme_option[\'home-blocks-logged\'][\'enabled\'];

    if ($args->theme_location == \'vendor_navigation\') {

        if ($layout && $args->theme_location == \'top_navigation\'): foreach ($layout as $key=>$value) {               
            switch($key) {   
                case \'cart\': 
                    $items_icon = get_template_part( \'templates/topbar\', \'rolecart\' ); 
                break;  

                case \'dashboard\': 
                    $items_icon = get_template_part( \'templates/topbar\', \'roledashboard\' );
                break;       
            }    
        }        
        endif;

    }   

    return $items_icon . $items;    

}
add_filter( \'wp_nav_menu_items\', \'your_custom_menu_item\', 10, 2 );
但是,在源代码中是这样的:Image - Source Code

我正在使用Redux框架字段分类器:

Stackoverflow :: Redux sorter - retrieve dynamic pages

Redux sorter field

有人能告诉我我做错了什么吗?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

问题在于以下几行:

$items_icon = get_template_part( \'templates/topbar\', \'rolecart\' ); 
$items_icon = get_template_part( \'templates/topbar\', \'roledashboard\' );
你期望的地方get_template_part() 返回输出,但它不返回,因为它基本上是require()require_once() 呼叫。

这意味着模板部分不是返回的筛选器值的一部分。

我同意get_ 前缀在这里很混乱!

拥有它会更有意义the_template_part() 相反;-)

这里有一些关于输出缓冲的黑客攻击。让我们使用wpse_return_ 前缀it强调它returns 输出:

if( ! function_exists( \'wpse_return_template_part\' ) )
{
    function wpse_return_template_part( $first = \'\', $second = \'\' )
    {
        ob_start();
        get_template_part( $first, $second );
        return ob_get_clean();
    }
}
然后

if( function_exists( \'wpse_return_template_part\' ) )
    $items_icon = wpse_return_template_part( \'templates/topbar\', \'rolecart\' );