WP_NAV_MENU-作为项目类的页面模板名称

时间:2014-11-28 作者:Adam

是否有任何方法可以在每个菜单项的类中显示模板名称(或page-template.php文件名)?可能使用wp\\u nav\\u menu walker?

具体来说,我使用的是标准菜单调用:

wp_nav_menu( array( \'menu\' => 3, \'container\' => false )
这给了我:

<div class="menu-wrap">
<ul id="menu-menu" class="menu">
<li id="menu-item-979" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-979"><a href="#">Homepage</a></li>
<li id="menu-item-844" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-844"><a href="#">Subpage</a></li>
</ul>
</div>
如果我有模板名称Homepage和Subpage,我希望得到相同的名称,但有模板名称类:

<div class="menu-wrap">
<ul id="menu-menu" class="menu">
<li id="menu-item-979" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-979 Homepage"><a href="#">Homepage</a></li>
<li id="menu-item-844" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-844 Subpage"><a href="#">Subpage</a></li>
</ul>
</div>
谢谢!

1 个回复
SO网友:Milo

这个nav_menu_css_class 过滤器将允许您向特定菜单项添加CSS类。我们将其与get_page_template_slug 函数获取页面模板文件名,然后将其用于get_page_templates 方法获取模板名称,如Template Name: 标题。然后我们通过这个结果sanitize_html_class 使其成为有效的类名。最后,我们将其添加到类数组中并返回它。

function wpd_page_template_nav_class( $classes, $item ) {
    // only check pages
    if( \'page\' == $item->object ){
        // if this page has a template assigned
        if( $slug = get_page_template_slug( $item->object_id ) ){
            // get the array of filenames => template names in the current theme
            $templates = wp_get_theme()->get_page_templates();
            // if there is a template with key matching our filename
            if( isset( $templates[$slug] ) ){
                // sanitize it and add it to the classes
                $classes[] = sanitize_html_class( $templates[$slug] );
            }
        }
    }
    return $classes;
}
add_filter( \'nav_menu_css_class\', \'wpd_page_template_nav_class\', 10, 2 );

结束

相关推荐

在Walker函数中使用Menu类

是否使用选项中打开的自定义菜单css类,通过walker函数将这些类应用于span 而不是li\'s?我的定制助行器:class ik_walker extends Walker_Nav_Menu { function start_lvl(&$output, $depth) { $GLOBALS[\'ik_walker_counter\'] = 0; $output .= \'<nav class=\"site-nav