私は現在カスタムテーマに取り組んでいます。このテーマでは、私はregister-nav-menu
を使って登録したメニューを持っています、そして次に私はwp_nav_menu
関数を使って私のウェブページにメニューを表示しています。
しかし、私はメニュー項目のリスト(メニューを作成するためにwp-admin領域で使用され、htmlなしで使用された実際のメニュー項目名のみ)のみを取得したいと思います(つまり表示しない).
そのため、擬似コードは次のようになります。
$menu_items = get_list_of_items($name_of_menu); // $name_of_menu is the result of register-nav-menu, and get_list_of_items is the psuedo function
foreach ($menu_items as $item) {
// do something with the item
}
そうする方法はありますか?ありがとう。
wp_get_nav_menu_items はまさにあなたが必要としているように見えるでしょう。メニューオブジェクトの配列を返します。
@vancoderが述べているように、wp_get_nav_menu_items()
が進むべき道です、しかし私はより良い詳細な答えが将来の人々にとってもっと役に立つだろうと思います。
この関数はWP_Post Object
オブジェクトの配列を返します(そのため、矢印で値にアクセスします(例:$item->title
))。
basic セットアップの場合は、次のようにします。
$menuLocations = get_nav_menu_locations(); // Get our nav locations (set in our theme, usually functions.php)
// This returns an array of menu locations ([LOCATION_NAME] = MENU_ID);
$menuID = $menuLocations['primary']; // Get the *primary* menu ID
$primaryNav = wp_get_nav_menu_items($menuID); // Get the array of wp objects, the nav items for our queried location.
次に、その$primaryNav
変数をループするだけです。次に例を示します。
foreach ( $primaryNav as $navItem ) {
echo '<li><a href="'.$navItem->url.'" title="'.$navItem->title.'">'.$navItem->title.'</a></li>';
}
メニューの単純な配列を取得します。
Functions.phpに追加
function wp_get_menu_array($current_menu) {
$array_menu = wp_get_nav_menu_items($current_menu);
$menu = array();
foreach ($array_menu as $m) {
if (empty($m->menu_item_parent)) {
$menu[$m->ID] = array();
$menu[$m->ID]['ID'] = $m->ID;
$menu[$m->ID]['title'] = $m->title;
$menu[$m->ID]['url'] = $m->url;
$menu[$m->ID]['children'] = array();
}
}
$submenu = array();
foreach ($array_menu as $m) {
if ($m->menu_item_parent) {
$submenu[$m->ID] = array();
$submenu[$m->ID]['ID'] = $m->ID;
$submenu[$m->ID]['title'] = $m->title;
$submenu[$m->ID]['url'] = $m->url;
$menu[$m->menu_item_parent]['children'][$m->ID] = $submenu[$m->ID];
}
}
return $menu;
}
ヘッダーに移動して関数を呼び出す
<?php
$a = wp_get_menu_array('top-menu-header');
print_r($a); exit;
?>