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.