WordPressでテーマ内にカスタムメニューを設置すると、以下のようにリストに対して自動的にIDやクラスが付与されます。
<ul class="nav-menu"> <li id="menu-item-58" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-58"><a title="TechMemo" href="https://techmemo.biz/" data-wpel-link="internal">HOME</a></li> </ul>
今回は、カスタムメニューに自動付与されるIDやクラスを削除して、コードをスッキリさせる方法をご紹介いたします。
カスタムメニューに付与されるIDやクラスを削除する方法
テーマ内にカスタムメニューを設置するには、wp_nav_menu関数を記述しますが、以下のようにitems_wrapを指定してあげると、IDやクラスは付与されなくなります。
<?php wp_nav_menu( array( 'container' => false , 'items_wrap' => '<ul>%3$s</ul>' ) ); ?>
containerでは、メニューを囲むdiv要素も無効化しています。
カスタムメニューからIDやクラスを削除しつつ、閲覧中のページではcurrent_page_itemクラスを追加する
上述した方法でカスタムメニューを設置すれば、IDやクラスが削除されてコードはスッキリしますが、カレント表示が使えなくなります。閲覧中のページではリストの装飾を変更したい場合もあるかと思いますので、開いているページではli要素にcurrent_page_itemクラスを追加するようにします。
//クラスの削除とcurrent_page_itemクラス付与 function removeclass_and_currentadd( $classes, $item ) { //管理画面で設定されたカスタムクラス名を変数に代入 if( !empty( $classes[0] ) ){ $custom_class = esc_attr( $classes[0] ); } $classes = array(); if( $item -> current == true ) { $classes[] = 'current_page_item'; } //変数に入れておいたカスタムクラス名を配列へ格納 if( !empty( $custom_class ) ){ $classes[] = $custom_class; } return $classes; } add_filter( 'nav_menu_css_class', 'removeclass_and_currentadd', 10, 2 ); //IDの削除 function removeid( $id ){ return $id = array(); } add_filter('nav_menu_item_id', 'removeid', 10);
functions.phpに上記を追加すると、カスタムメニューからIDやクラスが削除され、閲覧中のページではli要素にcurrent_page_itemクラスが追加されるようになります。
あとがき
カスタムメニューのコードをカスタマイズしたい時は、参考にしていただけると幸いです。
逆に任意のIDやクラスを追加したい場合は、「カスタムメニューで出力されるulやliに任意のクラスを追加する方法」をご参照ください。