"Wp_nav_menu_items" हुक का उपयोग करके केवल एक विशिष्ट मेनू को अनुकूलित करना?


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कोड में क्या करता है ?
कैनबॉय

4
10प्राथमिकता है (दस डिफ़ॉल्ट है), 2उन तर्कों की संख्या है , जो फ़ंक्शन को स्वीकार करने के लिए हुक कर रहे हैं।
रारस्ट

@ ampt, हाँ, मैंने कोशिश की। इसने काम कर दिया। लगभग। जब मैं लॉगिन करता हूं, तो मेरा दूसरा मेनू लिंक गायब हो जाता है, मैं इसे कैसे हल कर सकता हूं?

1
ध्यान दें कि WP 3.8 के रूप में, चर $ args-> मेनू के बजाय $ args-> theme_location
Alain Jacomet Forte

@AlainJacometForte वास्तव में, $ args-> मेनू, मेनू की संख्यात्मक आईडी लौटाता है, जबकि $ 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नए फिल्टर के हिस्से पर ध्यान दें । यह वर्डप्रेस बताता है कि फ़ंक्शन को किस मेनू में जोड़ा जाए।

यह आपकी वर्तमान समस्या से निपटने का एक अलग तरीका है।


इस पृष्ठ पर @oshi से आइटम देखें, जिसे आपको संबोधित किया गया है।
1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.