WP_NAV_MENU不生成父类/祖先类

时间:2010-10-14 作者:chodorowicz

我不知道为什么没有为菜单项生成合适的类-树中所有具有子树的元素都只获取menu-item menu-item-type-post_type. 没有子元素的元素在被单击(活动)后获得适当的类。

链接:http://lichens.ie/

菜单结构的一部分:http://imgur.com/5Lj00.png

密码

$args = array(
    \'menu\'      => \'Main menu\',
    \'container\' => \'\',
    \'menu_id\'   => \'nav\',
);
wp_nav_menu($args);
当您访问时,例如。http://lichens.ie/view-lichens-by/lichens-by-habitat/ 您可以看到它没有“当前”类。还有它的父母。

PS抱歉发布“无效链接”-这是因为声誉限制

任何想法-非常感谢您的帮助。

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

这是中代码的一部分_wp_menu_item_classes_by_context() 处理页面的当前类的:

// if the menu item corresponds to the currently-queried post or taxonomy object
} elseif (
    $menu_item->object_id == $queried_object_id &&
    (
        ( ! empty( $home_page_id ) && \'post_type\' == $menu_item->type && $wp_query->is_home && $home_page_id == $menu_item->object_id ) ||
        ( \'post_type\' == $menu_item->type && $wp_query->is_singular ) ||
        ( \'taxonomy\' == $menu_item->type && ( $wp_query->is_category || $wp_query->is_tag || $wp_query->is_tax ) )
    )
) {
    $classes[] = \'current-menu-item\';
ID必须匹配post_type 类型is_singular.is_singular 有条件的

您是否在页面上运行任何辅助循环?条件句中断的最常见原因是query_posts().

SO网友:goldenapples

我不知道为什么在你的情况下不起作用。。。正如您所说,活动页面应该将“current\\u menu\\u item”添加到其类中。如果您由于一个原因或另一个原因遇到问题,您可以始终使用“nav\\u menu\\u css\\u class”过滤器添加您自己的类。这一小段代码将基本上复制“当前菜单项”&;\'当前\\u menu\\u parent“类,并添加“has\\u children”类(对可扩展或下拉菜单有用):

function check_for_submenu($classes, $item) {
    global $wpdb, $post;
    if ($item->ID == $post->ID) array_push($classes,\'current_menu_item\');
    $has_children = $wpdb->get_var("SELECT COUNT(meta_id) FROM wp_postmeta WHERE meta_key=\'_menu_item_menu_item_parent\' AND meta_value=\'".$item->ID."\'");
    if ($has_children > 0) {
        array_push($classes,\'has_children\');
        $child_pages = $wpdb->get_col("SELECT c.meta_value FROM wp_postmeta AS c, wp_postmeta AS th 
                                      WHERE c.meta_key = \'_menu_item_object_id\' AND c.post_id = th.metavalue 
                                      AND th.meta_key= \'_menu_item_menu_item_parent\' AND th.post_id = {$item->ID}");
        if (in_array($post->ID,$child_pages)) array_push($classes,\'current_menu_parent\');
    }
    return $classes;
}

add_filter( \'nav_menu_css_class\', \'check_for_submenu\', 10, 2);
当然,在破解某些东西以复制它之前,您想知道为什么内置功能不适合您,但如果需要,您可以使用该过滤器做很多事情。。。

结束

相关推荐

Thesis -style Navigation

我正在研究一个主题,我希望用户能够像论文一样选择要在主题选项页面中显示的页面。我已经在谷歌上搜索了几个小时的逆向工程论文,但还没有找到一个很好的解决方案。我想知道是否有人做过这件事或看过教程。