2019.02.15

WordPress

Walker_Nav_Menuを使ってwordpressのメニュータグをカスタマイズする方法

階層が重なっているイメージ

wordpressにはwp_nav_menu()を使ってグローバルナビやフッターナビに表示する項目を出力することができますが、出力するコードの構造には制限があります。
今回はこれをカスタマイズし子階層のあるメニューやコードのカスタマイズを可能にするWalker_Nav_Menuについて紹介します。

Walker_Nav_Menuの呼び出し方

wp_nav_menu関数に引数arrayを設定し、walkerというキーを追加して任意のクラス名をnewで指定します。

  wp_nav_menu( array(
      'theme_location'    => '設定したメニューのスラッグ',
      'container'         => '',
      'container_id'      => '',
      'container_class'      => '',
      'items_wrap'        => '<ul>%3$s</ul>',
      'walker'            => new edit_walker_nav_menu
  ));

次に呼び出すedit_walker_nav_menuクラスを定義します。
function.phpに下記を記述します。

class custom_walker_nav_menu extends Walker_Nav_Menu {
    function start_lvl(&$output, $depth = 0, $args = array()) {
        $output .= '<div class="nav-child"><ul class="nav-child-ul">';
    }
    function end_lvl(&$output, $depth = 0, $args = array()) {
        $output .= '</ul></div>';
    }
}

start_lvl、end_lvlで定義したコードが2階層目の始まりと終わりで実行されます。
具体的に出力されるコードは以下のようになります。

  <ul class="main-menu">
   <li class="menu-item menu-item-01">
    <a href="#">親メニュー</a>
     <div class="nav-child">
      <ul class="nav-child-ul">
       <li class="menu-item menu-item-02">
        <a href="#">子メニュー01</a>
       </li>
       <li class="menu-item menu-item-02">
        <a href="#">子メニュー02</a>
       </li>
       <li class="menu-item menu-item-03">
        <a href="#">子メニュー03</a>
       </li>
      </ul>
     </div>
   </li>
  </ul>

親メニューが入っているaタグの次に行から、start_lvlで定義したコードが呼び出され、管理画面で設定した子メニューの終わりにend_lvlで定義したコードが呼び出されています。

まとめ

管理画面でのメニュー編集を可能にしておくことで、クライアントのからの要望に答えやすくなったり、必要な際の編集が簡単になったりします。
効果的に導入してサイトの完成度を高めましょう。

SHARE

この記事の筆者

Web&Soundクリエイター 田村 培修

Web&Soundクリエイター 田村 培修

楽器とパソコンのキーボードを使い分ける当社のマルチクリエイター。e-sportsに興味津々であれこれ情報を収集中。

WEBSITE DESIGN REQUEST

ホームページ制作・リニューアルの
ご相談はお気軽に

TEL 06-6537-9941 平日 9:00〜19:00

〒550-0012 大阪府大阪市西区立売堀2-5−41

ホームページ制作を相談する