Menghapus wadah dari wp_nav_menu tidak berfungsi

10

Saya mengonversi menu html ini ke wordpress:

<ul>
    <li><a href="/" class="current"><span>Home</span></a></li>
    <li><a href="/"><span>About</span></a></li>
</ul>

saya menggunakan:

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

tapi html yang saya dapatkan adalah:

<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>

Jika saya menggunakan menu khusus maka saya mendapatkan:

<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>

tetapi jika saya tidak menggunakan menu kustom 'wadah' => false tidak berfungsi Ada solusi?

Oterox
sumber
Apa maksud Anda jika saya tidak menggunakan menu khusus ? Bisakah Anda jelaskan dengan lebih jelas dalam kondisi apa Anda mendapatkan hasil yang diinginkan dan kapan tidak?
Rarst
Tema saya mendukung menu khusus. Jika saya menggunakan menu khusus 'wadah' => false berfungsi dengan baik, tetapi jika tidak, itu tidak berfungsi. Jika saya menggunakan 'wadah' => '' terjadi hal yang sama.
Oterox

Jawaban:

17

[ASK] TIDAK BEKERJA ketika Anda merujuk ke lokasi yang tidak ada. misal ketika Anda menyalin kode dari tempat lain, atau Anda belum membuat menu atau lokasi Anda di dasboard.

mis. hapus ", 'theme_location' => 'primer'" dari kode berikut:

    wp_nav_menu( array( 'container'=> false, 'menu_class'=> false, 'menu_id'=> 'ia_toplevel', 'theme_location' => 'primary' ) );

sehingga terlihat seperti

    wp_nav_menu( array( 'container'=> false, 'menu_class'=> false, 'menu_id'=> 'ia_toplevel' ) );

Ini berfungsi dengan baik TANPA wadah di situs web saya SocialBlogsiteWebDesign.com

sergio
sumber
Tampaknya tidak berfungsi di wordpress 3.9
tepkenvannkorn
Buat menu Anda di admin appearance->menuterlebih dahulu kemudian panggilwp_nav_menu(array('menu'=>'<menu_name>','container'=>false))
Warface
Nah, itu perilaku yang cukup aneh: / Saya pikir ini adalah masalah yang harus dilacak.
enguerranws
5
Try: <?php wp_nav_menu( array( 'container' => '' ) ); ?>

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

Devin
sumber
1
Itu diperiksa seperti if ( $args->container )dalam kode sehingga falseatau empty stringtidak membuat perbedaan.
Rarst
Pertama, saya baru saja mengujinya dengan situs yang saya kerjakan belakangan ini, dan pengaturan 'container' => '' benar-benar berfungsi. Saya pikir ini bukan pengujian untuk nilai, tetapi lebih ke pengaturan nol dan dengan demikian tidak menghasilkan data.
tw2113
'wadah' => '' tidak berfungsi untuk saya. Saya menggunakan wp 3.0.1
Oterox
tidak bekerja untuk saya juga ... dengan wp 3.2.1
papachan
5

Anda mengacu pada fungsi mundur dari nav_menus. Ini adalah "wp_page_menu" dan sayangnya itu tidak menghasilkan jenis markup yang sama dengan menu kustom.

Untuk memperbaikinya, buat menu fallback Anda sendiri. Saya menggunakan ini:

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;
}

Anda mungkin perlu mengubah ini karena tema saya menangani menu dengan caranya sendiri, tetapi saya pikir Anda mendapatkan ide dasarnya.

Dan ketika Anda menelepon, wp_nav_menulakukan sajawp_nav_menu(array('fallback_cb' => 'my_page_menu'));

Anda juga bisa mencocokkan kelas-kelas dengan yang ada di menu kustom menggunakan ini:

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;
}

Dengan cara ini Anda mengurangi beberapa aturan CSS ...

onetrickpony
sumber
1

Saya mengembangkan solusi penggunaan str_replaceyang sederhana dan efisien , yang dapat diterapkan secara terpisah untuk digunakan dalam tabel menu daripada 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;
Eduardo Carrega
sumber
0

Menemukan solusinya.

Cukup gunakan "ul" untuk 'wadah'

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

Coba ini

<?php wp_nav_menu( array( 'menu' => 'Menu','link_before' => '<span>', 'link_after' => '</span>' ) ); ?>
apel
sumber