我试图找到一种方法,根据页面中元键的值来更改不同导航菜单项的类。
当前菜单如下所示:
<li class="menu-item-1">Menu item 1</li>
<li class="menu-item-2">Menu item 2</li>
<li class="menu-item-3">Menu item 3</li>
<li class="menu-item-4">Menu item 4</li>
<li class="menu-item-5">Menu item 5</li>
使用自定义键,我想从每个页面中提取单个键,并将它们作为类放入相应的菜单项中,如:
<li class="menu-item-1 pink">Menu item 1</li>
<li class="menu-item-2 yellow">Menu item 2</li>
<li class="menu-item-3 green">Menu item 3</li>
<li class="menu-item-4 pink">Menu item 4</li>
<li class="menu-item-5 bordeaux">Menu item 5</li>
到目前为止,我得到的是:
add_filter(\'nav_menu_css_class\' , \'special_nav_class\' , 10 , 2);
function special_nav_class($classes, $item){
global $post;
$colorcode = get_post_meta($post->ID, \'color_dropdown\', true);
if(is_page()) {
$classes[] = $colorcode;
}
return $classes;
}
它所做的是将元键添加到类中,但仅在访问指定了元键值的页面时,然后将其添加到所有菜单项中,这是不对的。
我无法使用CSS类功能手动返回菜单编辑器。用户将无法访问该区域,在实际页面编辑模式下,用户可以通过metabox下拉菜单设置不同的类,这一点至关重要。
我拉扯头发有一段时间了,但我似乎无法让它工作,这是不可能的吗?
EDIT: UPDATED MY QUESTION
最合适的回答,由SO网友:Stephen Harris 整理而成
您的代码没有,因为全局$post
指正在查看的帖子/页面(如果有…)。传递的内容nav_menu_css_class
是一个菜单项-这是一种特殊的帖子类型。其特性包括:object
其中存储:
如果链接引用文章,则为文章类型;如果链接引用分类术语页,则为分类法;如果链接是自定义链接,则为“自定义”,则还存储object_id
如果链接引用一篇文章,则为文章id如果链接引用分类术语页,则为术语id自定义链接的文章id,因此您要做的是检查术语是否实际引用一篇文章(或自定义文章类型),然后传递object_id
到get_post_meta()
:
function wpse51076_special_nav_class($classes, $item){
if( \'post\' == $item->object ){
$colorcode = get_post_meta($item->object_id, \'color_dropdown\', true);
$classes[] = $colorcode;
}
return $classes;
}
add_filter(\'nav_menu_css_class\' , \'wpse51076_special_nav_class\' , 10 , 2);