ナビゲーションメニューのclassにページやカテゴリーのスラッグを追加してみる

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>