私はこの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は動作しませんどの解決策?
存在しない場所を参照しているときにITが機能しない[解決しよう]。例えば他の場所からコードをコピーしたとき、またはまだダッシュボードにメニューまたは場所を作成していないとき。
例えば次のコードから "、 'theme_location' => 'primary'"を削除します。
wp_nav_menu( array( 'container'=> false, 'menu_class'=> false, 'menu_id'=> 'ia_toplevel', 'theme_location' => 'primary' ) );
だからそれは肩のように見える
wp_nav_menu( array( 'container'=> false, 'menu_class'=> false, 'menu_id'=> 'ia_toplevel' ) );
それは私のウェブサイト SocialBlogsiteWebDesign.comのコンテナなしでうまく機能します
Try: <?php wp_nav_menu( array( 'container' => '' ) ); ?>
あなたは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ルールを削減できます。
私はstr_replace
を使用してシンプルで効率的なソリューションを開発しました。これはul li
ではなくメニューテーブルでの使用に別々に適用できます。
$menu = wp_nav_menu( array(
'theme_location' => 'main-menu',
'container_id' => 'mainMenu',
'container_class' => 'ddsmoothmenu',
'echo' => FALSE
));
$menu = str_replace(
array('ul id="main-menu" class="menu">','/ul>','li','/li>'),
array('table id="main-menu" class="menu">tr>','/tr>/table>','td','/td>'),
$menu
);
echo $menu;