将具有自定义功能的过滤器添加到菜单/导航

时间:2014-10-15 作者:Alex

我会对这个问题发疯的:

我想向菜单项添加一个特定的css类,具体取决于自定义分类法。这是我目前的代码。

add_filter(\'nav_menu_css_class\', \'auto_custom_type_class\', 10, 2 );
function auto_custom_type_class($classes, $item) {

if($item->object == "marke") {
   if( has_term( "laden-1", "laden", $item->ID ) ) {
        $classes []= "laden-1";
   }
}
return $classes;
}
首先我检查,如果帖子类型是“marke”,然后我检查“marke”在分类法“ladden”中是否具有“ladden-1”的特征。

大约三个小时后,我认为函数“has\\u term”有问题,似乎该函数调用不正确。

有人有什么建议吗?

万分感谢

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

我不确定你是如何设置菜单的,但这可能是最可靠的方法。

function auto_custom_type_class( $classes, $item ) {
    $type = get_post_type( $item->object_id );
    if( $type == "marke" && has_term( "laden-1", "laden", $item->object_id ) ) {
        $classes []= "laden-1";
    }
    return $classes;
}
add_filter(\'nav_menu_css_class\', \'auto_custom_type_class\', 10, 2 );
代码的问题是$item->ID 引用导航项目ID,而不是位于$item->object_id. 使用ID获取post类型可能比检查更可靠$item->object 尽管你可能会使用这种方法。

SO网友:Courtney Ivey

Hmm... try this:

// Adding menu classes based on single post taxonomy terms
add_filter( \'nav_menu_css_class\', \'special_nav_class\', 10, 2 );
function special_nav_class($classes, $item){
        $post_type = get_post_type( get_the_ID());
        if( is_single() && $post_type == \'marke\' && has_term( \'laden-1\', \'laden\' ){
                $classes[] = \'laden-1\';
        }
        return $classes;
}
结束