Chỉ tùy chỉnh một Menu cụ thể bằng cách sử dụng các wp_nav_menu_items của Hook?


36

Nhờ một số trợ giúp ở đây, tôi đã quản lý để thêm một hộp tìm kiếm tùy chỉnh vào menu chính của mình ... bằng cách thêm nó vào chức năng của chủ đề của tôi.

add_filter('wp_nav_menu_items','search_box_function');
  function search_box_function ($nav){
  return $nav."<li class='menu-header-search'><form action='http://example.com/' id='searchform' method='get'><input type='text' name='s' id='s' placeholder='Search'></form></li>";
}

Tuy nhiên, bây giờ tôi đã thêm một menu khác để đặt ở chân trang, nhưng hộp tìm kiếm cũng được thêm vào menu này. Làm cách nào để thêm hộp tìm kiếm vào menu chính?

Mã của tôi để đăng ký các menu là:

register_nav_menus( array(
  'primary' => __( 'Primary Navigation', 'twentyten' ),
  'secondary'=>__('Secondary Menu', 'twentyten' ),

 ) );

..và mã để hiển thị menu phụ là:

wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'secondary' ) ); 

Câu trả lời:


41

Để chỉ thêm hộp tìm kiếm tùy chỉnh vào menu chính, bạn có thể chuyển tham số thứ hai được cung cấp bởi bộ lọc wp_nav_menu_items và kiểm tra xem theme_location có phải là vị trí chính không

add_filter('wp_nav_menu_items','search_box_function', 10, 2);
function search_box_function( $nav, $args ) {
    if( $args->theme_location == 'primary' )
        return $nav."<li class='menu-header-search'><form action='http://example.com/' id='searchform' method='get'><input type='text' name='s' id='s' placeholder='Search'></form></li>";

    return $nav;
}

3
cảm ơn, thật tuyệt ... chỉ là một câu hỏi của người mới - 10, 2làm gì trong mã?
cannyboy

4
10là mức ưu tiên (mười là mặc định), 2là số lượng đối số mà hàm chúng ta đang nối để lọc chấp nhận.
Hết

@ ampt, vâng, tôi đã thử nó Nó đã làm việc. hầu hết. Khi tôi đăng nhập, menu thứ hai của tôi liên kết biến mất, làm thế nào tôi có thể giải quyết điều đó?

1
Lưu ý rằng kể từ WP 3.8, biến là menu $ args-> thay vì $ args-> theme_location
Alain Jacomet Forte

@AlainJacometForte Trên thực tế, menu $ args-> trả về ID số của menu, trong khi $ args-> theme_location trả về chuỗi, vì vậy câu trả lời này vẫn đúng. Không có gì thay đổi nếu bạn đang so sánh các chuỗi.
Marcus

8

Một phương pháp khác để làm điều này là thêm slug menu vào bộ lọc wp_nav_menu_items.

Ví dụ: giả sử bạn có một menu có tên Header và bạn luôn muốn menu này (dù có gắn với vị trí chủ đề hay không) để hiển thị hộp tìm kiếm. Bạn có thể làm như vậy bằng cách thêm slug menu, trong trường hợp này header, vào bộ lọc.

Bộ lọc mới sẽ như sau:

add_filter ( 'wp_nav_menu_header_items' , 'search_box_feft' );   

Lưu ý headerphần của bộ lọc mới. Điều này cho WordPress biết menu nào để thêm chức năng.

Đây chỉ là một cách khác nhau để tiếp cận vấn đề hiện tại của bạn.


Xem mục từ @oshi trên trang này, được gửi đến bạn.
halfer
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.