WordPressの外観>メニューで作ったメニューは、wp_nav_menu関数で簡単出力されます。
階層も反映されてて便利なのですが、どうしてもこの関数は実現できないことが発生したため、独自に関数を作ることにしました。
メニューをデータを取得するには、wp_get_nav_menu_itemsを使用して配列で取得します。
ただし階層構造にはなってません。
なので、以前の記事「WordPressのサイトマップを作る【プラグインなし】」を参考に、階層構造で作り直して出力します。
[php]
function my_wp_nav_menu($menu_type, $menu_item_parent = 0, $ul_use_flag = 0){
$return = "";
$menu_items = wp_get_nav_menu_items('main_navi');
$menu_trees = array();
if($menu_items){
$exist_flag = 0;
foreach($menu_items as $menu_item){
//親が引数($menu_item_parent)と同じもののみ
if($menu_item_parent == $menu_item->menu_item_parent){
if($exist_flag == 0){
if($ul_use_flag == 1) $return .= '
'."\r\n";
}
}
return $return;
}
[/php]
使用する場合は以下の通り
[php]
[/php]
これで大体wp_nav_menu関数の標準設定と同じ挙動となります。
再帰のたびに、wp_get_nav_menu_itemsで全部取りなおすので、あんまり効率は良くないですが、とりあえずこれで改造し放題です。