質問: wp_nav_menuからコンテナを削除できない 私はこのhtmlメニューをワードプレスに変換しています。<ul> <li><a href="/" class="current"><span>home</span></a></li> <li><a href="/"><span>about</span></a></li> </ul> 私が使う:wp_nav_menu(array( 'menu'=>'mainmenu' , 'container' => false, 'link_before' => '<span>', 'link_after' => '</span>', 'theme_location' => 'primary') ); しかし、私が得るhtmlは:<div class="menu"> <ul> <li class="current_page_item"><a href="http://localhost/goodsoil/" title="home"><span>home</span></a></li> <li class="page_item page-item-2"><a href="http://localhost/goodsoil/?page_id=2" title="about"><span>about</span></a></li> </ul> </div> カスタムメニューを使用している場合は、次のようになります。<ul id="menu-test" class="menu"> <li id="menu-item-6" class="menu-item menu-item-type-custom current-menu-item current_page_item menu-item-home menu-item-6"><a href="url/"><span>home</span></a></li> <li id="menu-item-5" class="menu-item menu-item-type-post_type menu-item-5"><a href="url/?page_id=2"><span>about</span></a></li> </ul> しかし、私はカスタムメニューを使用しない場合 'コンテナ' => falseは動作しませんどの解決策?
回答: あなたはnav_menusのフォールバック関数を参照しています。これは "wp_page_menu"で、残念ながらカスタムメニューと同じ種類のマークアップを生成しません。これを修正するためにあなた自身の代替メニューを作成してください。私はこれを使っています:function my_page_menu($args){ $menu = ''; $args['echo'] = false; $args['title_li'] = ''; // if the front page is a page, add it to the exclude list if (get_option('show_on_front') == 'page') $args['exclude'] = get_option('page_on_front'); $menu .= str_replace(array("\r", "\n", "\t"), '', wp_list_pages($args)); if($menu): if($args['container']) $menu = '<'.$args['container'].' class="'.$args['container_class'].'">'.$menu; $menu .= '<ul class="'.$args['menu_class'].'">'.$menu; // add 'home' menu item $menu .= '<li class="home '.((is_front_page() && !is_paged()) ? 'current-menu-item' : null).'"><a href="'.home_url('/').'" title="'.__("home page").'">'.$args['link_before'].__("home").$args['link_after'].'</a></li>'; $menu .= '</ul>'; if($args['container']) $menu .= '</'.$args['container'].'>\n"'; $menu = apply_filters('wp_page_menu', $menu, $args); endif; echo $menu; } 私のテーマはそれ自身の方法でメニューを扱うのでこれを変更する必要があるかもしれませんが、私はあなたが基本的な考えを得ると思います。wp_nav_menuを呼び出すときは、wp_nav_menu(array('fallback_cb' => 'my_page_menu'));のようにしてください。これを使用してクラスをカスタムメニューのクラスに一致させることもできます。add_filter('page_css_class', 'atom_page_css_classes', 420, 2); function atom_page_css_classes($classes, $page){ // overwrite and use page (safe) name instead of id; nobody styles ids... $new_classes = array('page-'.$page->post_name); // adjust active menu classes to match the ones added by wp_nav_menu() foreach($classes as $class) if($class == 'current_page_item') $new_classes[] = 'current-menu-item'; elseif($class == 'current_page_parent') $new_classes[] = 'current-menu-parent'; elseif($class == 'current_page_ancestor') $new_classes[] = 'current-menu-ancestor'; return $new_classes; } これにより、いくつかのcssルールを削減できます。