仕事で必要になったのでメモ。WordPressで作れるカスタムメニューをショートコードで実装出来るようにする、という方法です。やってみて思ったけど結構便利です。
カスタムメニュー、という名ですけど、メニューコンテンツ以外にも利用出来るので、ショートコードで実装する方法は覚えておいて損は無いです。
コード
以下のようなコードをfunctions.phpに含めます。
function single_page_custom_menu($atts, $content = null) { extract(shortcode_atts(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' => ''), $atts)); return wp_nav_menu( array( 'menu' => $menu, 'container' => $container, 'container_class' => $container_class, 'container_id' => $container_id, 'menu_class' => $menu_class, 'menu_id' => $menu_id, 'echo' => false, 'fallback_cb' => $fallback_cb, 'before' => $before, 'after' => $after, 'link_before' => $link_before, 'link_after' => $link_after, 'depth' => $depth, 'walker' => $walker, 'theme_location' => $theme_location)); } add_shortcode("cmenu", "single_page_custom_menu");
上の配列はカスタムメニューのセッティング用です。
[cmenu menu=”foo”]
これで、管理画面の外観→メニューで作成した「foo」という名のカスタムメニューを上記のようなショートコードで実装する事が出来ます。
[cmenu menu=”foo” menu_id=”bar”]
とすれば、id="bar"
が付きます。
カスタムメニューの設定はCodex(テンプレートタグ/wp nav menu)をご参照ください。
冒頭にも書きましたが、カスタムメニューと言ってもメニューにしか使えない、という訳ではありません。
- 管理画面で管理可能
- ネスト可能
- リンク先を自由に設定
- 複数作成可能
- 詳細やclassも加えられる
といった特徴があるので、リンク集やサイトマップ(コードはカスタムメニューとショートコードを使ったサイトマップ作成を参照)も任意の内容で作成出来ます。また、固定ページの子ページや孫ページへのインデックスを作るのもいいかもしれません。
以前書いた、「カスタムメニューを使って、サブタイトル付きのナビゲーションを実装する」方法を利用して、ツールチップでリンク先の説明文を出す、などのコンテンツも作成出来るし、管理画面でツールチップ内の文章を管理出来ます。
いずれにしてもショートコードで実装する事も出来るのでカスタムメニューの利用価値は非常に高い機能と言えますね。ともあれ、地味に大変なのはクライアントさんにカスタムメニューの使い方を知って貰うことなんですけども。