サイト構築でCSSのフレームワークを使用して装飾をまとめようとすることはよくあると思います。

ナビゲーション作成の時にulタグにクラスを充てて見栄え良いナビ表示しようとする方もいると思います。

その為、WPのメニューを出力する際に、wp_nav_menuという関数を使用して管理画面で準備したナビゲーション用のメニュリストを出力しようとしたときのお話です。

実際私もulタグにCSSフレームワークのクラスを充ててナビゲーションを作成したコーディングをしたため、wp_nav_menu()にはオプションを以下のようにつけて出力を行おうとしました。

 

wp_nav_menu( array(
  'container' => false,
  'menu_class' => 'nav-list',
  'theme_location' => 'primary',
));

 

しかし、出力したナビはulタグを囲むラップのdivが削除されず、クラスはdivにつけられた状態で出力されました。

 

<div class="nav-list">
  <ul>
    <li><a href="">メニュー</a></li>
    <li><a href="">メニュー</a></li>
  </ul>
</div>

 

はて、ulタグにクラスがついてくれなければ困るんですが…

ネットで調べると、containerにfalseを設定しても適応されずに削除できない現象が起きるんだそう。現象というか、こういう仕様なんだそうで未だ議論が続いている問題だとか。

解決方法としてはメニュー位置を指定すると良いという情報が多く出ているのですが、一応theme_locationでprimaryを指定しているんですけどね。

念のためこちらを解除し、管理画面 > 外観 > メニューにある「位置を管理」タブで指定したパターンも試してみましたがダメでした。

しかし、今回このメニューを作成したときにメニュー名を入れた文字をオプションのmenuで指定したところ、ラップのdivが削除されて出力することが出来ました。

 

wp_nav_menu( array(
  'menu' => '出力したいメニュー名',
  'container' => false,
  'menu_class' => 'nav-list',
  'theme_location' => 'primary',
));

 

メニュー位置の指定も関係なし。出力するメニュー名を指定する必要があったわけですね。

指定しない場合は、メニュー位置指定したものが出力するようにtheme_locationをオプションに入れる必要があると。なければ、管理画面でメニューを作成した最新のものが優先的に表示するようです。