各メニュー項目のクラスにテンプレート名(またはpage-template.phpファイル名)を表示する方法はありますか?多分wp_nav_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>
ありがとうございます。
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 );