Xóa container khỏi wp_nav_menu không hoạt động


10

Tôi đang chuyển đổi menu html này sang wordpress:

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

tôi sử dụng:

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

nhưng html tôi nhận được là:

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

Nếu tôi sử dụng một menu tùy chỉnh thì tôi nhận được:

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

nhưng nếu tôi không sử dụng menu tùy chỉnh 'container' => false thì không có giải pháp nào?


Ý bạn là gì nếu tôi không sử dụng menu tùy chỉnh ? Bạn có thể vui lòng mô tả rõ hơn trong những điều kiện bạn nhận được kết quả mong muốn và khi nào không?
Rarst

Chủ đề của tôi hỗ trợ các menu tùy chỉnh. Nếu tôi sử dụng menu tùy chỉnh thì 'container' => false hoạt động tốt, nhưng nếu không thì nó không hoạt động. Nếu tôi sử dụng 'container' => '' xảy ra tương tự.
Oterox

Câu trả lời:


17

[GIẢI QUYẾT] NÓ KHÔNG LÀM VIỆC khi bạn đang đề cập đến một vị trí không có sẵn. ví dụ: khi bạn sao chép mã từ một nơi khác hoặc bạn chưa tạo menu hoặc vị trí của mình trong bảng điều khiển.

ví dụ: xóa ", 'theme_location' => 'chính'" khỏi đoạn mã sau:

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

vì vậy nó trông giống như

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

Nó hoạt động tốt mà KHÔNG chứa container trong trang web của tôi SocialBlogsiteWebDesign.com


Có vẻ như nó không hoạt động trong wordpress 3.9
tepkenvannkorn

Trước tiên, hãy tạo menu của bạn trong quản trị viên appearance->menusau đó gọiwp_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
Nó được kiểm tra như if ( $args->container )trong mã để falsehoặc empty stringkhông tạo ra sự khác biệt.
Rarst

Trước đây, tôi vừa thử nghiệm nó với một trang web tôi đang làm việc gần đây và việc đặt 'container' => '' thực sự hoạt động. Tôi nghĩ rằng nó không kiểm tra giá trị, nhưng thiết lập nhiều hơn thành null và do đó không xuất dữ liệu.
tw2113

'container' => '' không hoạt động đối với tôi. Tôi đang sử dụng wp 3.0.1
Oterox

tôi cũng không làm việc ... với wp 3.2.1
papachan

5

bạn đang đề cập đến chức năng dự phòng của nav_menus. Đây là "wp_page_menu" và không may là nó không tạo ra loại đánh dấu giống như một menu tùy chỉnh.

Để khắc phục điều này, hãy tạo menu dự phòng của riêng bạn. Tôi đang sử dụng cái này:

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

Bạn có thể cần thay đổi điều này vì chủ đề của tôi xử lý các menu theo cách riêng của nó, nhưng tôi nghĩ bạn có ý tưởng cơ bản.

Và khi bạn gọi wp_nav_menuhãy làm như thếwp_nav_menu(array('fallback_cb' => 'my_page_menu'));

Bạn cũng có thể kết hợp các lớp với các lớp của menu tùy chỉnh bằng cách sử dụng:

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

Bằng cách này, bạn cắt giảm một vài quy tắc CSS ...


1

Tôi đã phát triển một giải pháp đơn giản và hiệu quả bằng cách sử dụng str_replace, có thể được áp dụng riêng để sử dụng trong các bảng menu thay vì 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

Tìm thấy giải pháp.

Chỉ cần sử dụng "ul" cho 'container'

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

-1

Thử cái này

<?php wp_nav_menu( array( 'menu' => 'Menu','link_before' => '<span>', 'link_after' => '</span>' ) ); ?>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.