ワードプレスのメニュー項目一覧を取り出したい。


スポンサーリンク

ワードプレスのメニュー項目を取り出したいという場面は、あまりでくわしません、メニューをカスタマイズしたいのなら、通常は wp nav menu でカスタマイズしてあげたり、WPのプラグイン MaxMegaMenu などでカスタマイズしてあげればおしまいです。

ですが、ワードプレスのメニュー項目を取り出したいという場面は、たま~に、メニュー項目をメニュー項目としてではない使い方をしたくなる時があります。

ということで、メニュー項目の取り出し方を調べたのですが、どうも回りくどいものが多く難儀しました。

四の五の言いません。こんな感じで抜き出します。

$menu_name = 'Menu1';
$menu_obj = wp_get_nav_menu_object($menu_name); //メニューID,メニュースラッグ,メニュー名どれでもOK
// $menu_obj に 指定したメニュー項目の情報を取り出されている。
$menu_items = wp_get_nav_menu_items($menu_obj->term_id);
foreach ( (array) $menu_items as $key => $menu_item ) {
// $menu_item に 指定したメニュー項目の情報を取り出されている。
}


実際にメニュー項目の取り出せるものの一覧を出力するモジュール



$menu_name = 'Menu1';
$menu_obj = wp_get_nav_menu_object($menu_name); //メニューID,メニュースラッグ,メニュー名どれでもOK
echo '– wp_get_nav_menu_object —<br />';
echo 'term_id='.$menu_obj->term_id.'<br />';
echo 'name='.$menu_obj->name.'<br />';
echo 'slug='.$menu_obj->slug.'<br />';
echo 'term_group='.$menu_obj->term_group.'<br />';
echo 'term_taxonomy_id='.$menu_obj->term_taxonomy_id.'<br />';
echo 'taxonomy='.$menu_obj->taxonomy.'<br />';
echo 'description='.$menu_obj->description.'<br />';
echo 'parent='.$menu_obj->parent.'<br />';
echo 'count='.$menu_obj->count.'<br />';
$menu_items = wp_get_nav_menu_items($menu_obj->term_id);
foreach ( (array) $menu_items as $key => $menu_item ) {
echo '– menu item —<br />';
echo 'ID='.$menu_item->ID.'<br />';
echo 'post_title='.$menu_item->post_title.'<br />';
echo 'menu_item_parent='.$menu_item->menu_item_parent.'<br />';
echo 'post_author='.$menu_item->post_author.'<br />';
echo 'post_date='.$menu_item->post_date.'<br />';
echo 'post_date_gmt='.$menu_item->post_date_gmt.'<br />';
echo 'post_content='.$menu_item->post_content.'<br />';
echo 'post_excerpt='.$menu_item->post_excerpt.'<br />';
echo 'post_status='.$menu_item->post_status.'<br />';
echo 'comment_status='.$menu_item->comment_status.'<br />';
echo 'ping_status='.$menu_item->ping_status.'<br />';
echo 'post_password='.$menu_item->post_password.'<br />';
echo 'post_name='.$menu_item->post_name.'<br />';
echo 'to_ping='.$menu_item->to_ping.'<br />';
echo 'pinged='.$menu_item->pinged.'<br />';
echo 'post_modified='.$menu_item->post_modified.'<br />';
echo 'post_modified_gmt='.$menu_item->post_modified_gmt.'<br />';
echo 'post_content_filtered='.$menu_item->post_content_filtered.'<br />';
echo 'post_parent='.$menu_item->post_parent.'<br />';
echo 'guid='.$menu_item->guid.'<br />';
echo 'menu_order='.$menu_item->menu_order.'<br />';
echo 'post_type='.$menu_item->post_type.'<br />';
echo 'post_mime_type='.$menu_item->post_mime_type.'<br />';
echo 'comment_count='.$menu_item->comment_count.'<br />';
echo 'filter='.$menu_item->filter.'<br />';
echo 'format_content='.$menu_item->format_content.'<br />';
echo 'db_id='.$menu_item->db_id.'<br />';
echo 'object_id='.$menu_item->object_id.'<br />';
echo 'object='.$menu_item->object.'<br />';
echo 'type='.$menu_item->type.'<br />';
echo 'type_label='.$menu_item->type_label.'<br />';
echo 'url='.$menu_item->url.'<br />';
echo 'title='.$menu_item->title.'<br />';
echo 'target='.$menu_item->target.'<br />';
echo 'attr_title='.$menu_item->attr_title.'<br />';
echo 'description='.$menu_item->description.'<br />';
// リンクを作るならこんな感じでためていけばいい
// もちろん階層型メニューの場合は、menu_item_parent を参照してネストを構成しないといけないけどね。
$title = $menu_item->title;
$url = $menu_item->url;
$menu_list .= '<li><a href="' . $url . '">' . $title . '</a></li>';
}

スポンサーリンク