是否有任何方法可以在每个菜单项的类中显示模板名称(或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>
谢谢!
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 );