WordPress 3.0 から追加された wp_nav_menu
のコードを追ったオレメモ。
多分「カスタムメニュー」に関係あるはず。
WordPress.com 日本語ブログ : 新カスタムメニュー機能 (など)
WordPress.com Support : Menus
Function Reference/wp nav menu
trac : nav-menu-template.php
$defaults = array( 'menu' => , 'container' => 'div', 'container_class' => , 'container_id' => , 'menu_class' => 'menu', 'menu_id' => , 'echo' => true, 'fallback_cb' => 'wp_page_menu', 'before' => , 'after' => , 'link_before' => , 'link_after' => , 'depth' = 0, 'walker' => , 'theme_location' => );
wp_nav_menu
の fallback_cb
の設定をしない時は wp_page_menu
を使って出力するので Parameter は wp_page_menu の Parameter を追加して設定できます。
fallback_cb => wp_page_menu
のデフォルト時は wp_nav_menu
の Parameter で次のものは設定しても無視されるようです。
container_class, container_id, before, after, link_before, link_after, menu_id.
wp_nav_menu
は「カスタムメニュー」を使用しない時は wp_page_menu
を出力します。
このとき出力される ul
タグを container
オプションのデフォルト div
でwrapします。
この div
には menu_class
オプションのデフォルト class='menu'
が設定されます。
menu_class
オプションは wp_page_menu
を使っているときでも設定可能です。
複数のクラスを設定したい時は半角スペースを使い設定します。
Usage :
'menu_class' => 'menu main-menu navigation'
theme_location
が重要なようですが、さてこれは何を指定すれば良いのでしょう?
コードを追っていくと
// nav-menu.php function get_nav_menu_locations() { return get_theme_mod( 'nav_menu_locations' ); } // theme.php function get_theme_mod($name, $default = false) { $theme = get_current_theme(); $mods = get_option( "mods_$theme" ); if ( isset($mods[$name]) ) return apply_filters( "theme_mod_$name", $mods[$name] ); return apply_filters( "theme_mod_$name", sprintf($default, get_template_directory_uri(), get_stylesheet_directory_uri()) ); } |
ということはこんな感じかなぁ。
apply_filters(theme_mod_nav_menu_locations, $mods['nav_menu_locations']); |
で、何をやってるのかは???
おしえて、わかる人。
2010-08-25
カスタムメニューで登録したメニューをデフォルト設定にした時、”primary” にすることで
wp_nav_menu
で出力できるようです。
“primary” のほかにどんな設定値があるのかは以前不明です。
wp_nav_menu
の menu
オプションを設定すると「カスタムメニュー」で登録したメニューを呼び出せます。
カスタムメニューを使うとタイトルへのリンクをパーマリンクを変更せずに名称を変更できます。
カスタムメニューはページ、カテゴリー、タグなどを混在させたメニューを簡単に作成できます。
テンプレート・タグを駆使してグローバル・ナビゲーションを作成したことのある方にはありがたい機能です。
Usage:
'menu-header', 'menu' => 'gnavi', 'container_id' => 'menu-main-menu', 'menu_class' => 'inazumatv-menu inazumatv', 'link_before' => '<span>', 'link_after' => '</span>', 'menu_id' => "menu-main-menu-nav", 'theme_location' =>; 'primary', 'depth' => '1' ) ); |
Output:
<div id="menu-main-menu" class="menu-header"> <ul id="menu-main-menu-nav" class="inazumatv-menu inazumatv"> <li id="menu-item-ID" class="menu-item menu-item-type-custom current-menu-item current_page_item menu-item-home menu-item-ID"> <a href="/"><span>Home</span></a></li> <li id="menu-item-ID2" class="menu-item menu-item-type-post_type menu-item-ID2"> <a href="URL"><span>Title</span></a></li> </ul> </div> |
外観 -> メニュー
で “gnavi” という名称のカスタムメニューを登録しています。
これはかなり便利そうです。
カスタムメニューは複数登録できそうなので、これからメニューを作る時は「カスタムメニュー」+ wp_nav_menu
の組み合わせがステキです。
update 2010-08-25
タグに関してはカスタムリンクを使えばメニューに加えることも可能ですが、他と比べて「簡単に」ではないので削除しました。
「WordPress 3.x, wp_nav_menu コードを追ってみた」への2件のフィードバック