如何在WordPress的自定义贴子类型菜单中包含‘Current-Menu-Ancior’类?

时间:2013-01-02 作者:Emerson Maningo

我需要Wordpress菜单包含“当前菜单祖先”类,以反映站点当前在配方部分。假设我有一个食谱自定义帖子类型。我的函数中有以下代码。php,但它不起作用:

function add_active_item_classes($classes = array(), $menu_item = false){

if ( get_post_type() == \'recipe\' && $menu_item->title == \'Recipes\') {
$classes[] = \'current-menu-ancestor\';

return $menuclasses;
}
}
此外,我不知道我将使用什么过滤器挂钩来产生这种效果?感谢您的建议和帮助。

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

这是最终工作代码:

<?php
function additional_active_item_classes($classes = array(), $menu_item = false){
global $wp_query;

if(in_array(\'current-menu-item\', $menu_item->classes)){
    $classes[] = \'current-menu-item\';
}

if ( $menu_item->post_name == \'product\' && is_post_type_archive(\'product\') ) {
    $classes[] = \'current-menu-item\';
}

if ( $menu_item->post_name == \'product\' && is_singular(\'product\') ) {
    $classes[] = \'current-menu-item\';
}


return $classes;
}
add_filter( \'nav_menu_css_class\', \'additional_active_item_classes\', 10, 2 );

?>

SO网友:Marek

如果管理面板中没有嵌套菜单结构,则此代码将类“当前菜单祖先”添加到子CPT的父项菜单或自定义分类法或默认单篇文章中-仅当您有“0级”菜单时。例如,如果您有显示产品网格的页面Product,并且您转到单个产品,则WP将看不到父菜单项。下面的代码改进了这一点:

function additional_active_item_classes( $classes = array(), $menu_item = false ) {
    // custom taxonomy
    if ( $menu_item->title == \'Custom Tax Name Page\' && is_tax(\'custom_tax\') ) {
        $classes[] = \'current-menu-ancestor\';
    }
    // custom post type single
    if ( $menu_item->title == \'Custom Post Type Page\' && is_singular(\'products\') ) {
        $classes[] = \'current-menu-ancestor\';
    }
    // blog post single
    if ( $menu_item->title == \'Blog Page\' && is_singular(\'post\') ) {
        $classes[] = \'current-menu-ancestor\';
    }
    return $classes;
}
add_filter( \'nav_menu_css_class\', \'additional_active_item_classes\', 10, 2 );

结束

相关推荐

Wordpress Custom Menus Issue

在我的模板中,我使用这样的调用来输出一些自定义菜单:<?php wp_nav_menu(array(\'container_class\' => \'secondary-navigation\', \'theme_location\' => \'secondary\')); ?> 自从升级到WordPress 3.1.4后,我就可以获得完整的页面列表,而不是自定义菜单我看到修复程序(通过谷歌)说我应该添加以下内容来修复此问题:\'fallback_cb\' => f