wp_nav_menuからのコンテナーの削除が機能しない


10

私はこの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>

しかし、カスタムメニュー 'container' => falseを使用しない場合は機能しませんか?


カスタムメニューを使用しないとはどういう意味ですか?どのような状況で望ましい結果が得られ、いつ得られないかをより明確に説明していただけませんか?
Rarst、2011年

私のテーマはカスタムメニューをサポートしています。カスタムメニューを使用する場合、 'container' => falseは正常に機能しますが、使用しない場合は機能しません。'container' => ''を使用した場合も同じです。
Oterox、2010年

回答:


17

[解決済み]存在しない場所を参照しているときは機能しません。たとえば、どこか他の場所からコードをコピーした場合や、メニューや場所をまだダッシュボードに作成していない場合などです。

たとえば、次のコードから "、 '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のコンテナなしで正常に動作します


WordPress 3.9では動作しないようです
tepkenvannkorn 2014

appearance->menu最初に管理者でメニューを作成し、次にwp_nav_menu(array('menu'=>'<menu_name>','container'=>false))
Warfaceを

5
Try: <?php wp_nav_menu( array( 'container' => '' ) ); ?>

http://codex.wordpress.org/Function_Reference/wp_nav_menu


1
それはとしてチェックされているif ( $args->container )ので、コード内falseempty string違いはありません。
Rarst、2011年

ラースト、私が最近取り組んでいるサイトでテストしたところ、「コンテナー」=> ''の設定は実際に機能しました。値をテストするのではなく、nullに設定してデータを出力しないと思います。
tw2113 2010年

'container' => ''が機能しません。私はwp 3.0.1を使用しています
Oterox、2010年

私にとっても
うまくいき

5

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ルールを削減します...


1

私はを使用してシンプルで効率的なソリューションを開発しました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;

0

解決策を見つけました。

「コンテナー」には単に「ul」を使用します

wp_nav_menu(array(
 'menu'=>'mainmenu' ,
 'container' => 'ul',
 'menu_class'=> '',
 'link_before'     => '<span>',
 'link_after'      => '</span>',
 'theme_location'  => 'primary')
 );

-1

これを試して

<?php wp_nav_menu( array( 'menu' => 'Menu','link_before' => '<span>', 'link_after' => '</span>' ) ); ?>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.