การปรับแต่งเฉพาะเมนูเฉพาะโดยใช้“ wp_nav_menu_items” Hook?


36

ด้วยความช่วยเหลือที่นี่ฉันได้เพิ่มช่องค้นหาที่กำหนดเองในเมนูหลักของฉัน ... โดยการเพิ่มสิ่งนี้ลงในฟังก์ชั่นของธีมของฉัน php

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

อย่างไรก็ตามตอนนี้ฉันได้เพิ่มเมนูอื่นที่จะใส่ในส่วนท้าย แต่ช่องค้นหาจะถูกเพิ่มเข้าไปในส่วนนี้ด้วย ฉันจะเพิ่มช่องค้นหาในเมนูหลักเท่านั้นได้อย่างไร

รหัสของฉันสำหรับการลงทะเบียนเมนูคือ:

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

 ) );

.. และรหัสที่จะแสดงเมนูรองคือ:

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

คำตอบ:


41

หากต้องการเพิ่มเฉพาะช่องค้นหาที่กำหนดเองในเมนูหลักคุณสามารถส่งผ่านพารามิเตอร์ตัวที่สองที่จัดเตรียมโดยตัวกรอง wp_nav_menu_items และตรวจสอบว่า theme_location เป็นตำแหน่งหลัก

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
ขอบคุณที่ดีมาก ... แค่คำถามที่สมัครใหม่สิ่งที่10, 2ต้องทำในรหัส?
cannyboy

4
10มีความสำคัญ (สิบคือค่าเริ่มต้น) 2คือจำนวนอาร์กิวเมนต์ที่ฟังก์ชั่นที่เรากำลังขอให้ตัวกรองยอมรับ
Rarst

@ ampt ใช่ฉันลองแล้ว มันได้ผล เกือบจะ เมื่อฉันเข้าสู่ระบบลิงก์เมนูที่สองหายไปฉันจะแก้ไขได้อย่างไร

1
โปรดทราบว่าใน WP 3.8 ตัวแปรคือเมนู $ args-> แทนที่จะเป็น $ args-> theme_location
Alain Jacomet Forte

@AlainJacometForte ที่จริงแล้วเมนู $ args-> จะคืนค่า ID ตัวเลขของเมนูในขณะที่ $ args-> theme_location จะส่งคืนสตริงดังนั้นคำตอบนี้ก็ยังคงถูกต้องเหมือนเดิม ไม่มีอะไรเปลี่ยนแปลงหากคุณกำลังเปรียบเทียบสตริง
มาร์คัส

8

วิธีการอื่นในการทำเช่นนี้คือการเพิ่มเมนูกระสุนเข้ากับตัวกรอง wp_nav_menu_items

ตัวอย่างเช่นสมมติว่าคุณมีเมนูชื่อส่วนหัวและคุณต้องการให้เมนูนี้เสมอ (ไม่ว่าจะแนบกับตำแหน่งธีมหรือไม่ก็ตาม) เพื่อแสดงช่องค้นหา คุณสามารถทำได้โดยการเพิ่มเมนูกระสุนในกรณีนี้headerเพื่อกรอง

ตัวกรองใหม่จะเป็นดังนี้:

add_filter ('wp_nav_menu_header_items', 'search_box_function');
( 'wp_nav_menu_header_items', 'search_box_function' );

สังเกตเห็นheaderส่วนของตัวกรองใหม่ นี่เป็นการบอก WordPress ว่าเมนูใดที่จะเพิ่มฟังก์ชั่น

นี่เป็นวิธีที่แตกต่างในการแก้ไขปัญหาปัจจุบันของคุณ


ดูรายการจาก @oshi ในหน้านี้ซึ่งส่งถึงคุณ
halfer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.