WordPressのナビゲーションメニューで出力されるソースにスラッグを追加してみました。
命名規則は、カテゴリーと固定ページなどで同じスラッグを使っても問題とならないよう、投稿タイプやタクソノミーのスラッグも含めて、menu-item-category-news(newsというカテゴリーのメニューの場合)となるようにしています。
function add_slug_nav_menu_css_class( $classes, $item ) {
switch ( $item->type ) {
case 'post_type' :
$post = get_post( $item->object_id );
if ( $post ) {
$classes[] = esc_attr( 'menu-item-' . $item->object . '-' . $post->post_name );
}
break;
case 'taxonomy' :
$term = get_term( $item->object_id, $item->object );
if ( $term ) {
$classes[] = esc_attr( 'menu-item-' . $item->object . '-' . $term->slug );
}
break;
default :
}
$classes = array_unique( $classes );
return $classes;
}
add_filter( 'nav_menu_css_class', 'add_slug_nav_menu_css_class', 10, 2 );
出力例
<ul id="menu-header" class="menu"> <li id="menu-item-250" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-246 current_page_item menu-item-250 menu-item-page-home"><a href="http://www.example.com/">トップページ</a></li> <li id="menu-item-36" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-36 menu-item-page-privacy"><a href="http://www.example.com/privacy/">個人情報保護方針</a></li> <li id="menu-item-35" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-35 menu-item-page-sitemap"><a href="http://www.example.com/sitemap/">サイトマップ</a></li> </ul>