wp_nav_menu: यदि कोई मौजूद है तो केवल मेनू दिखाएं, अन्यथा कुछ नहीं दिखाएं


11

मैं केवल एक मेनू प्रदर्शित करने के लिए wp_nav_menu का उपयोग करने की कोशिश कर रहा हूं यदि कोई मौजूद है, अन्यथा, कुछ भी प्रदर्शित न करें।

यदि मैं मेनू को हटाता हूं, तो यह पृष्ठों की एक सूची का उत्पादन करेगा।

मेरे कार्यों.php फ़ाइल में शामिल हैं:

if (function_exists('register_nav_menus')) {
register_nav_menus (
array('main_nav' => 'Main Navigation Menu'));}

मैं केवल एक मेनू प्रदर्शित करने के लिए wp_nav_menu का उपयोग कैसे कर सकता हूं यदि कोई मौजूद है, अन्यथा कुछ भी नहीं दिखाएं?

जवाबों:


19

इसके बजाय has_nav_menu(), का उपयोग करें और परीक्षण करें :theme_locationmenu_id

<?php
if ( has_nav_menu( $theme_location ) ) {
    // User has assigned menu to this location;
    // output it
    wp_nav_menu( array( 
        'theme_location' => $theme_location, 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>

आप एक elseखंड जोड़कर वैकल्पिक सामग्री का उत्पादन कर सकते हैं ।

संपादित करें

आपको $theme_locationअपने वास्तविक के साथ बदलने की आवश्यकता है theme_location:

<?php
if ( has_nav_menu( 'main_nav' ) ) {
    // User has assigned menu to this location;
    // output it
    wp_nav_menu( array( 
        'theme_location' => 'main_nav', 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>

इस कुछ भी नहीं आउटपुट हालांकि कोई मेनू है या नहीं, यह दुर्भाग्य ही करता है जब वहाँ है एक मेनू। कोई अन्य विचार?
— रयान

क्या आपने निर्दिष्ट थीम स्थान पर एक मेनू लागू किया है?
— चिप बेनेट

नहीं, मैं ऐसा कैसे करूं?
— रयान

1
Dashboard -> Appearance -> Menus। एक कस्टम मेनू बनाएं और सहेजें, फिर ड्रॉपडाउन मेनू का उपयोग करके इसे निर्दिष्ट थीम स्थान पर लागू करें।
— चिप बेनेट

आह हाँ, मैंने ऐसा किया था (स्क्रीनशॉट: bit.ly/vrjNf9 )। दुर्भाग्य से, समस्या अभी भी बनी हुई है - मेनू दिखाई नहीं देगा। PS मेरी फ़ंक्शन फ़ाइल में यह है: यदि (function_exists ('register_nav_menus')) {register_nav_menus (सरणी ('main_nav' => 'मुख्य नेविगेशन मेनू));};
— रयान

6

आप केवल के fallback_cbतर्क के रूप में गलत निर्दिष्ट कर सकते हैं wp_nav_menu। कुछ भी नहीं दिखाई देगा - बल्कि, wp_nav_menu गलत वापस आएगा (कुछ भी नहीं गूंज रहा है)।

<?php
wp_nav_menu(array( 
    'theme_location' => $main_nav, 
    'menu_class'     => 'nav', 
    'container'      => '',
    'fallback_cb'    => false
));

ऐसा नहीं लगता है: developer.wordpress.org/reference/functions/wp_nav_menu/…
— Alireza

0

आप केवल स्थान निर्दिष्ट किए बिना सबसे पहले मेनू को पंजीकृत कर सकते हैं।
इन functions.php:

add_action( 'init', 'register_my_menus' );
function register_my_menus() {  
    register_nav_menus(
        array(
            'header' => __( 'Header Menu' )
        )
    );
}

और जब आप मेनू को कॉल करते हैं header.php, तो इसके साथ जांचें has_nav_menu():

if ( has_nav_menu( 'header' ) ) {
    wp_nav_menu( array( 'theme_location' => 'header' ) ); 
}

यदि आप थीम स्थान के बिना एक मेनू पंजीकृत करते हैं , तो आप बाद में थीम स्थान प्रतिबंध के साथ इसके लिए नहीं पूछ सकते हैं।
— FUXIA

0

इसे पढ़ें:

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

'fallback_cb' सेट करें = गलत और कोई भी प्रदर्शित नहीं किया जाएगा, यह wp दोस्तों द्वारा सुझाई गई मानक विधि है।


यह chrisguitarguy उत्तर के समान है ...
— brasofilo

मुझे पता है, मैं आपको वर्डप्रेस कोडेक्स पर मुख्य लेख को इंगित करना चाहता था।
— होमन अस्करी

ऐसा लगता है कि यह सच नहीं है। डॉक्स कहता है: यदि एक थीम_लोकेशन पैरामीटर नहीं दिया गया है, तो फ़ंक्शन developer.wordpress.org/reference/functions/wp_nav_menu/ ... मेनू पैरामीटर द्वारा दिए गए आईडी, स्लग या नाम से मेल खाने वाले मेनू को प्रदर्शित करता है ; अन्यथा, पहला गैर-खाली मेनू; अन्यथा (या यदि मेनू द्वारा दिया गया मेनू खाली है), फालबैक_केबी पैरामीटर (wp_page_menu (), डिफ़ॉल्ट रूप से दिए गए फ़ंक्शन का आउटपुट; अन्यथा कुछ भी नहीं।
— एलेरिज़ा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.