2010,1008
WordPress テーマをカスタムメニュー対応にしてみた(wp_nav_menu)
Twenty Ten | WordPress | wp_nav_menu | カスタムメニュー
WordPress3.0から実装された『カスタムメニュー』を自分で作成したテーマに組み込んでみた。標準テーマの『Twenty Ten』は対応しているので、そのコードを参考に実装。実際に対応させてみて気が付いたのは、コーポレートサイト構築に便利な機能だって事。面白い!
functions.phpに下記のソースを追加する。
<?php register_nav_menus( array( 'primary' => __( 'Primary Navigation' ), ) ); ?>
上のソースを見ると、『Primary Navigation』というのが『primary』という言葉に関連付けられているのが予測できた。このソースはWordPress3.0標準テーマのTwenty Tenのソースなんだけど、実際にTwenty Tenを有効にした状態でカスタムメニューの画面に入ると、下記の様になってる。
日本語のWordPressなので一見しても分からないけど、よく考えてみたらソース内の『Primary Navigation』ってのが日本語になって、『メインナビゲーション』って表示されている気がするのは気のせいか?そして『primary』ってのがロケーションらしいんだけど、これはTwenty Tenのheader.phpを見たら理解が出来た。
<?php wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary' ) ); ?>
このソースが85行目にいるんだけど、ここの『primary』に関係してるのが分かる。
つまり、管理画面で作成したメニュー(画像ではmain)を、「メインナビゲーション」のセレクトメニューで選んで保存すると、header.phpに記述された箇所にメニューが表示されるって事。
って事は、ここを書き換えて使いまわせば、幾つでも複製出来るって事も分かる。そこで自作テーマに下記のソースを書いてみた。
<?php register_nav_menus( array( 'top_navi' => __( 'Top Navigation' ), ) ); register_nav_menus( array( 'gloval_navi' => __( 'Gloval Navigation' ), ) ); ?>
とりあえず2つにしてみる。次に、上記の『Top Navigetion』と『Gloval Navigation』を表示させたい箇所に下記を記述。自分はheader.php内に書いた。
■Top Navigetion
<?php wp_nav_menu( array('container_id' => 'Tnavi', 'fallback_cb' => '', 'theme_location' => 'top_navi', 'depth' => '1') ); ?>
■Gloval Navigation
<?php wp_nav_menu( array('container_id' => 'Gnavi', 'theme_location' => 'gloval_navi', 'depth' => '1') ); ?>
こんな感じにしてみた。実際に管理画面を見てみると、
バッチリじゃ~ん!(ニヤリ)
本当は出力されてるのも掲載したいんだけど、まだ何もスタイルをかけていないので勘弁して下さい。
ちなみにwp_nav_menuは、カスタムメニューを作っていない時には代用としてwp_page_naviで出力するようになってるらしい。これもページ一覧の一種だと思うんだけど、function.phpをもう少し下まで見ると、
<?php function twentyten_page_menu_args( $args ) { $args['show_home'] = true; return $args; } add_filter( 'wp_page_menu_args', 'twentyten_page_menu_args' ); ?>
とある。平たく言えば、
テーマTwenty Tenのwp_page_menuは、トップページへのリンク(show_home)を、ページ一覧と一緒に出力(true)してちょうだいな。
って指示をしてるっぽい。実際にそう出力されてたw
って事で、以下まとめ・・・
■function.php
<?php register_nav_menus( array( '■■■' => __( '▲▲▲' ), ) ); ?>
■メニューを表示させたい箇所
<?php wp_nav_menu( array( 'theme_location' => '■■■') ); ?>
- ■■■ = functions.phpと表示させたい箇所の関連付け
- ▲▲▲ = メニュー管理画面での表示させる文言
各パラメータは紹介してるサイトが色々あるので、「wp_nav_menu」で検索して下さい。






