「外観」→「メニュー」の「テーマの場所」で「メインナビゲーション」が空欄の場合、全ての固定ページが自動でメニューに表示される。これはこれで別にいいんだけど「このページはメニューに出したくない」とか「○階層までしか表示したくない」とかがあった場合はカスタムメニューを作成してそれを指定することになる。でもそれだと全メニューを手動で追加しなければならずめんどくさい。
「追加したページを自動でメニューに追加してほしいがカスタマイズもしたい」場合は wp_nav_menu
の fallback_cb
に指定されている関数を上書きしてしまう。デフォルトでは theme-functions.php の themify_default_main_nav
関数
583 584 585 586 587 |
function themify_default_main_nav() { echo '<ul id="main-nav" class="main-nav clearfix">'; wp_list_pages('title_li='); echo '</ul>'; } |
が呼び出されるようになっているので(wp_page_menu
じゃないよ)、custom-functions.phpに以下を追記。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// wp_nav_menu のパラメータの上書き add_filter('wp_nav_menu_args', 'custom_wp_nav_menu_args'); function custom_wp_nav_menu_args($args) { if ($args['theme_location'] == 'main-nav') { // メインナビゲーションの場合、fallback_cb をこちらで用意した関数に置き換える $args['fallback_cb'] = 'custom_default_main_nav'; } return $args; } // カスタム fallback_cb function custom_default_main_nav() { echo '<ul id="main-nav" class="main-nav clearfix">'; wp_list_pages('title_li=&depth=3&exclude=12,34,56'); // 最大3階層まで、ページID 12, 34, 56 は表示しない echo '</ul>'; } |
wp_nav_menu_args
フィルターフックで fallback_cb
パラメータを書き換えて独自メニューを表示させる。wp_list_pages
の詳しい使い方については WordPress Codex 日本語版を参照。