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>