| 投稿件数が0件の時、archive.phpでpost_typeを取得する方法ブログトップ | CMS関連 | PHP関連 | Google Chromeでチェックボックスが表示されない
メニューをカスタマイズ(WordPress)
この記事は1年以上前の記事のため、内容が古い可能性があります。
WordPressの外観>メニューで作ったメニューは、wp_nav_menu関数で簡単出力されます。
階層も反映されてて便利なのですが、どうしてもこの関数は実現できないことが発生したため、独自に関数を作ることにしました。
メニューをデータを取得するには、wp_get_nav_menu_itemsを使用して配列で取得します。
ただし階層構造にはなってません。
なので、以前の記事「WordPressのサイトマップを作る【プラグインなし】」を参考に、階層構造で作り直して出力します。
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 .= '<ul class="sub-menu">'."\r\n"; $exist_flag = 1; } //リンクの開き方 $target = ''; if($menu_item->target){ $target = 'target="_blank"'; } //class $class = 'menu-item'; if($menu_item->classes[0]){ $class .= ' '.implode(" ", $menu_item->classes); } //title要素 $attr_title = ''; if($menu_item->attr_title){ $attr_title = 'title="'.$menu_item->attr_title.'"'; } $return .= '<li class="'.$class.'"><a href="'.$menu_item->url.'" '.$target.' '.$attr_title.'>'.$menu_item->title."</a>"; $return .= my_wp_nav_menu($menu_type, $menu_item->ID, 1); $return .= '</li>'."\r\n"; } } if($exist_flag == 1){ if($ul_use_flag == 1) $return .= '</ul>'."\r\n"; } } return $return; }
使用する場合は以下の通り
<ul> <?php echo my_wp_nav_menu('main_navi'); ?> </ul>
これで大体wp_nav_menu関数の標準設定と同じ挙動となります。
再帰のたびに、wp_get_nav_menu_itemsで全部取りなおすので、あんまり効率は良くないですが、とりあえずこれで改造し放題です。
総合管理者 | 2015年07月08日 | コメント(0) | トラックバック(0) | CMS関連 | PHP関連
トラックバック
トラックバックURL
コメントする
※メールアドレスが公開されることはありません。