★最新の情報は以下のページをご覧ください。
WordPress ナビゲーションメニュー(カスタムメニュー)
2019年3月31日
カスタムメニューを使うと複数の投稿タイプを組み合わせたり、表示する順番を変更したり、階層関係をつけたりと、柔軟にメニューが作成できる。
カスタムメニューの機能を有効にするには以下の3つの方法がある。
パラメータのキー:半角英数字のロケーション名 (カスタムメニューの識別名)
パラメータの値:管理画面に表示するロケーション名(日本語可)→カスタムメニューの設定画面の「テーマの場所」に表示される名前
register_nav_menus(array( 'topnav' => 'トップナビゲーション', 'sidenav' => 'サイドナビゲーション' ));
上記を記述すると、管理画面「外観」→「メニュー」が追加され、「テーマの場所」に登録したカスタムメニュー(ロケーション名)が表示されるので、カスタムメニューの設定画面「外観」→「メニュー」でメニューを作成。
この場合、メニューを表示(出力)するには、wp_nav_menu()のパラメータのキーに、「theme_location」を指定し、パラメータの値にregister_nav_menus()で指定したロケーション名を指定する。
wp_nav_menu(array('theme_location' => 'topnav'));
この方法でカスタムメニューを作成した場合、テンプレートファイルを書き換えなくても、管理画面の「外観」→「メニュー」の「テーマの場所」に登録したメニューを切り替えることで、メニューを変更することができる。
これに対して、add_theme_support(‘menus’) でカスタムメニューを作成した場合、メニューを変更するには、テンプレートファイルに出力するカスタムメニューを直接指定しているので、テンプレートファイルを書き換える必要がある。
add_theme_support('menus');
カスタムメニューの設定画面「外観」→「メニュー」でメニューを作成。
出力するには wp_nav_menu() のパラメータのキーに ‘menu’ を、パラメータの値に出力するメニューの名前を指定する。
「メニューの名前」を「globalnavi」として作成している場合以下のように記述する。
wp_nav_menu(array('menu' => 'globalnavi」'));
キー | 値 | デフォルト値 | 内容 |
---|---|---|---|
menu | 文字列 | なし | 出力するメニューの名前(管理画面「外観」→「メニュー」の設定ページの「メニューの名前」欄で設定した名前) |
theme_location | 文字列 | なし | 出力するメニューの種類(register_nav_menus 関数で登録した名前) |
container | 文字列 | div | メニューの ul 要素を囲む要素のタグ名。標準では「div」か「nav」(HTML5)のどちらかを指定 |
container_id | 文字列 | なし | メニューの ul 要素を囲む要素に割り当てる ID |
container_class | 文字列 | menu-{menu slug}-container | メニューの ul 要素を囲む要素に割り当てる クラス名 |
menu_id | 文字列 | menu-slug(順に増加) | メニューの ul 要素に割り当てる ID |
menu_class | 文字列 | menu | メニューの ul 要素に割り当てる クラス名 |
before | 文字列 | なし | リンクの前に出力する文字列 |
after | 文字列 | なし | リンクの後に出力する文字列 |
link_before | 文字列 | なし | リンク対象文字列の前に出力する文字列 |
link_after | 文字列 | なし | リンク対象文字列の後に出力する文字列 |
depth | 整数 | 0 | 出力するメニューの階層の上限。0 を指定すると全階層を出力 |
fallback_cb | 文字列 | wp_page_menu | メニューが存在しないときに実行する関数名 |
echo | true/false | true | false にすると、結果のHTMLを出力せずに、戻り値として返す |
カスタムメニューの設定画面「外観」→「メニュー」でナビゲーションバーに表示するメニューを作成する。
以下の設定が可能。
表示されていない項目は「表示オプション」の設定にチェックを入れると表示される。
wp_nav_menu 関数は、デフォルトではメニューの各項目を以下のような構造で出力する。
<div class="menu-XX-container"> <ul id="menu-XX" class="menu"> <li id="menu-item-YY" class="menu-item menu-item-type-ZZ menu-item-YY"> <a href="リンク先のアドレス">メニューのラベル</a></li> <li id="menu-item-YY" class="menu-item menu-item-type-ZZ menu-item-YY"> <a href="リンク先のアドレス">メニューのラベル</a></li> ・・・ <ul class="sub-menu"> <li id="menu-item-YY" class="menu-item menu-item-type-ZZ menu-item-YY"> <a href="リンク先のアドレス">メニューのラベル</a></li> ・・・ </ul> </ul> </div>
XX :メニューの名前(管理画面「外観」→「メニュー」の「メニューの名前」欄で設定した名前)
YY :メニュー項目の ID
ZZ :リンク先の種類(post_type など)
画像を用意してテーマフォルダ内の「images」フォルダにアップロードしておき、管理画面「外観」→「メニュー」で表示するメニューを作成する。
<?php wp_nav_menu(array( 'theme_location' => 'topcontent', 'link_before' => '<img src="' . get_template_directory_uri() . '/images/', 'link_after' => '" alt="*" />' )); ?>
出力される <li> 要素などの ID またはクラスを確認して、画像のレイアウトを指定する。