WordPressのカスタムメニューのソースはやたらごちゃごちゃしているので、使わなそうなidやclassを削除してすっきりさせる方法を書きたいと思います。
はじめに
通常カスタムメニューを出力してソースを見ると、下記のようにdivやid、いろいろなclassが自動でつきます。
<div class="menu-footernav-container"> <ul id="menu-footernav" class="menu"> <li id="menu-item-1301" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1301"><a href="http://....">サイトマップ</a></li> <li id="menu-item-1302" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1302"><a href="http://....">プライバシーポリシー</a></li> </ul> </div>
ちなみにこの役割はそれぞれあったりします。
こちらに書いてあります。
テンプレートタグ/wp nav menu – WordPress Codex 日本語版
でも使用する用事があまりないような気がする場合は、スッキリさせてもよいかと思います。
divを消して、ulのclassも消す
下記にカスタムメニューを追加する方法は書いています。
ノーマルな命令で出力した場合
メニュー名にfooternavとすると
<div class="menu-footernav-container"> ・ ・ ・ </div>
というようにdivが入りclass="menu-footernav-container"が自動で出力します。
divでulを囲む必要がないなという場合は、これを消す方法があります。
通常は単純にfunctions.phpにフッターメニューの追加としてfooter-menuを入れていたら
<?php wp_nav_menu( array('theme_location' => 'footer-menu')); ?>
な感じでphpに書いているかと思います。
それを下記に変更します。
divとulのclassを消します。
<?php wp_nav_menu( array ( 'theme_location' => 'footer-menu', 'items_wrap' => '<ul>%3$s</ul>', 'container' => false ) ); ?>
これでソースを見ると下記のようになっていると思います。
<ul> <li id="menu-item-1301" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1301"><a href="http://....">サイトマップ</a></li> <li id="menu-item-1302" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1302"><a href="http://....">プライバシーポリシー</a></li> </ul>
ちなみにitems_wrapの説明ですが
テンプレートタグ/wp nav menu – WordPress Codex 日本語版
(文字列) (オプション) Sprintf()関数の引数として評価される書式の文字列です。 フォーマット文字列には番号付きトークンによって他のパラメーターが組み込まれています. %1$s に 'menu_id' のパラメーターの値が展開され、 %2$s に 'menu_class' のパラメーターの値が展開され、 そして %3$s はリスト項目が値として展開されます.番号付きトークンをフォーマット文字列から省略すると、メニューのマークアップから関連するパラメーターは省略されます。注: メニュー項目をかこむタグを除外したい場合(もし現在のテーマにメニュー項目をかこむタグが含まれている場合など)でも 、パラメータとして %3$s を渡す必要があります. もし空の文字列を渡してしまいますとメニューは表示されません.
初期値: <ul id="%1$s" class="%2$s">%3$s</ul>
となっており「%3$s」の値は必須です。
もしもulにclassを指定したい場合は、
<?php wp_nav_menu( array ( 'theme_location' => 'footer-menu', 'items_wrap' => '<ul class="%2$s">%3$s</ul>', 'container' => false ) ); ?>
にすれば、
<ul class="menu"> <li id="menu-item-1301" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1301"><a href="http://....">サイトマップ</a></li> <li id="menu-item-1302" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1302"><a href="http://....">プライバシーポリシー</a></li> </ul>
になると思います。class=”menu”じゃないほうが良い時は、
<?php wp_nav_menu( array ( 'theme_location' => 'footer-menu', 'items_wrap' => '<ul class="footernav">%3$s</ul>', 'container' => false ) ); ?>
にすればulのclassにfooternavなど好きなclass名を入れられます。
<ul class="footernav"> <li id="menu-item-1301" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1301"><a href="http://....">サイトマップ</a></li> <li id="menu-item-1302" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1302"><a href="http://....">プライバシーポリシー</a></li> </ul>
liのclassも消す
liのいろいろ書いてあるclassを消すには、functions.phpに命令を書きます。
//カスタムメニューのliのid,classを削除 add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1); add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1); add_filter('page_css_class', 'my_css_attributes_filter', 100, 1); function my_css_attributes_filter($var) { return is_array($var) ? array_intersect($var, array('current-menu-item')) : ''; }
これでソースを確認してみると、
<ul class="footernav"> <li><a href="http://....">サイトマップ</a></li> <li class="current-menu-item"><a href="http://....">プライバシーポリシー</a></li> </ul>
このように開いているページだけにcurrent-menu-itemがついています。
任意に付けたclassを入れる
ちなみに「メニュー」のオプションでclassを入れてもそれは反映しないようです。
この場合は自分でfunctions.phpに追加するしかないのかなと思います。
//カスタムメニューのliのid,classを削除 add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1); add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1); add_filter('page_css_class', 'my_css_attributes_filter', 100, 1); function my_css_attributes_filter($var) { return is_array($var) ? array_intersect($var, array('current-menu-item','sitemap','privacy')) : ''; }
これでソースにclassがつきました。
<ul class="footernav"> <li class="sitemap current-menu-item"><a href="http://....">サイトマップ</a></li> <li class="privacy"><a href="http://....">プライバシーポリシー</a></li> </ul>
詳しい説明が下記の記事にあります。
参考
【WordPress】カスタムメニューのクラスやidを削除したり、liに任意のクラスを付けたり。
テーマ「OnePress」の場合
ちなみに「OnePress」の場合は、ソースを見ると
<ul class="onepress-menu"> <?php wp_nav_menu(array('theme_location' => 'primary', 'container' => '', 'items_wrap' => '%3$s')); ?> </ul>
となっており、items_wrapではulを消し、自分で <ul class="onepress-menu">のように書く方法をとっているようですね
コメントをどうぞ