【カスタムメニューの操作性の良さを利用しよう】WordPressのカスタムメニューで「メニュー構造」に追加したアイテムに入力したデータを取得する方法

WordPressの「カスタムメニュー」って、感覚的に投稿・固定ページ・カテゴリーページなどのリンクを追加・削除したり、ドラッグ&ドロップでメニューの位置を入れ替えたりできるので便利ですね。

カスタムメニューは便利

WordPressの管理画面→「外観」→「メニュー」から、カスタムメニューのページを開くことができます。

wordpress_custom_menu_get_item_data00

このカスタムメニューの「メニュー構造」に追加したアイテムに入力したデータを取得する必要がありました。

メニュー構造に追加したアイテム

wordpress_custom_menu_get_item_data06

アイテムに入力したデータを取得したい

wordpress_custom_menu_get_item_data03

以下にその方法を書きましたので、機会がありましたらご参考ください。

WordPressのカスタムメニューで「メニュー構造」に追加したアイテムのデータを取得する方法

WordPressの「wp_get_nav_menu_items」を使うとできます。メニュー名(メニューID)が変わっても動作するように、ロケーション名を指定する方法が柔軟に対応できます。

サンプルコード

<?php
 $menu_name = 'primary'; //ロケーション名を入れる
 $locations = get_nav_menu_locations();
 $menu_id = $locations[ $menu_name ]; //メニューIDを取得する
 $menu_object = wp_get_nav_menu_object($menu_id); //引数にメニューIDを指定して情報を取得する

 $nav_items = wp_get_nav_menu_items( $menu_id ); //メニューIDを指定してアイテムのデータを取得
 foreach( $nav_items as $item ){
  //アイテムの数だけループさせて何かする
 }
?>

「なぜメニュー名(メニューID)よりロケーション名を入れたほうが柔軟か」という話は、以下のページに以前書きましたのでご参考ください。

というわけで、例えば固定ページ「ヘルプ」のアイテムの入力欄に、以下のようなデータが入っていたとします。

wordpress_custom_menu_get_item_data03

上記のコードを使えば、

  • ナビゲーションラベル
  • リンクを新しいタブで開く(チェックが入っている場合は「_blank」が取得できる)
  • タイトルの属性
  • CSSのclass名
  • XFN
  • 説明

など、アイテム別に入力したデータを取得できます。(取得できる値は他にもあるので、詳細は「wp_get_nav_menu_items」でご確認ください)

「wp_get_nav_menu_items」はどんな時に使えるか

私の場合は、アイテムの説明欄にショートコードを入れることがあって、メニューを表示する場所とは別のところにそのショートコードを出力させたかったので、この方法を使いました。

カスタムメニューの操作性の良さを利用して、ナビゲーション以外の目的に使うのもありじゃないかな、と思います。

著者:bouya Imamura