मैं wp_nav_menu पर UL कैसे निकालूं?


19

मैंने इस साइट पर खोज की और इस प्रश्न के कई उत्तर पाए । उनमें से ज्यादातर मेरे विषय पर काम नहीं कर रहे हैं।

यहाँ एक समाधान है जो मैंने पाया और यह मेरी आवश्यकता के अनुसार काम कर रहा है।

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

यह कोड ulशुरुआत और अंत में हटा देगा wp_nav_menu()। इसलिए अपने विषय में मैं अभी लिखता हूं

<ul class="primary-nav">
<?php  wp_nav_menu_no_ul(); ?>
</ul>

लेकिन समस्या फिर से आ रही है जब मैं व्यवस्थापक के माध्यम से किसी भी मेनू को जोड़ या सक्रिय नहीं करता हूं। http://domain.com/wp-admin/nav-menus.php

सवाल :

मैं कैसे <div><ul>**</ul></div>हटाऊं कि मेनू सक्रिय है या नहीं। मुझे बताएं


अंत में मैं काम कर गया :) functions.php

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary',
        'fallback_cb'=> 'default_page_menu'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

function default_page_menu() {
   wp_list_pages('title_li=');
} 

header.php

<ul class="primary-nav">
<?php  wp_nav_menu_no_ul(); ?>
</ul>

जब आप इसे फिर से जोड़ते हैं, तो आप उल को क्यों निकालना चाहते हैं? आप UL पर एक वर्ग और / या आईडी विशेषता सेट करने के लिए menu_classऔर menu_idमापदंडों का उपयोग कर सकते हैं ।

मैं सुपरफिश का उपयोग करना चाहता हूं। menu_classऔर menu_idकेवल तभी काम करेगा जब मेनू सक्रिय हो। यदि मेनू मौजूद नहीं है menu_classऔर menu_idजैसा है <ul>लेकिन जैसा नहीं है <div>। यही कारण है कि wp_nav_menu()आपके बारे में बहुत अधिक सवाल इसका परीक्षण कर सकते हैं :)
haha

जवाबों:


11

फंक्शन wp_nav_menu फॉलबैक_cb का एक तर्क लेता है जो कि मेनू के मौजूद होने पर चलने के लिए फ़ंक्शन का नाम है। इसलिए आप कुछ इस तरह से कोड बदलें:

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary',
        'fallback_cb'=> 'fall_back_menu'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

function fall_back_menu(){
    return;
}

तुम भी मेनू से कंटेनर को हटा सकते हैं और wp_nav_menu फ़ंक्शन के लिए भेजे गए कुछ और तर्कों के साथ अन्य सामान कर सकते हैं

उम्मीद है की यह मदद करेगा।


@ बोस्नियाई शब्दकोश - आपकी व्याख्या के लिए धन्यवाद। लेकिन मैं यहाँ धुंधला हो रहा हूँ। यदि मुझे झूठे सेट nav-menu-template.php fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'. Set to false for no fallbackकरने के लिए wp_nav_menu_no_ul()काम करने की जगह लेनी चाहिए , तो नोट के अनुसार मुझे क्या करना चाहिए fallback_cb? क्योंकि यह अभी के लिए खाली है।
हाहा

अब समझ आया :) बहुत बहुत धन्यवाद BTW, मैं आपका उपनाम कैसे बताऊं? मेराha ha
haha

योग्य, खुशी है कि आप इसे जाना।
बेनेटर्ट

मैं एक ही बात सोच रहा हूँ, यह हिब्रू मैं मान रहा हूँ, क्या एक सटीक अनुवाद होगा, जिज्ञासा से बाहर .. :)
t31os

:) हाँ, यह हिब्रू और इसकी एक निक मैं थोड़ी देर के लिए उठाया है कि अगर ठीक से अनुवादित "वेब डिजाइन" की तरह कुछ का मतलब है।
बेनेटर्ट

58

दरअसल, वर्डप्रेस डिफ़ॉल्ट रूप से इसका समर्थन करता है:

wp_nav_menu(array(
    'items_wrap' => '%3$s'
));

के लिए डिफ़ॉल्ट items_wrapहै <ul id=\"%1$s\" class=\"%2$s\">%3$s</ul>


3
यह सही जवाब है। प्रोग्रामेटिक खोजने और हटाने के <ul>बाद उसे जोड़ने के बाद के अन्य उत्तरों को पहले ही जोड़ दिया गया है
mikemike

'container' => falseयदि आप रैपिंग <div>से भी छुटकारा पाना चाहते हैं ।
जॉर्ज दिमित्रिदिस

यह डिफ़ॉल्ट रूप से WordPress में सही विन्यास योग्य है। धन्यवाद!
अब्दुल्ला अरबाज

सबसे अच्छा जवाब, हैक की कोई जरूरत नहीं
Eman

यह मेरे लिए wp 5.2 में काम नहीं कर रहा है
rafaelphp


4

यदि आप केवल <a>टैग प्रिंट करना चाहते हैं , तो आप इस तरह से जा सकते हैं:

$primaryMenu = array(
    'theme_location'  => 'primary',
    'menu'            => '',
    'container'       => '',
    'container_class' => false,
    'container_id'    => '',
    'menu_class'      => 'menu',
    'menu_id'         => 'primary-menu',
    'echo'            => false,
    'fallback_cb'     => 'wp_page_menu',
    'before'          => '',
    'after'           => '',
    'link_before'     => '',
    'link_after'      => '',
    'depth'           => 0,
    'walker'          => ''
);
echo strip_tags( wp_nav_menu( $primaryMenu ), '<a>' );

मेरे लिए यह कार्य एकदम सही है, केवल '' items_wrap '=>'% 3 $ s 'का सेटिंग wp 5.2 में प्रभाव नहीं है
rafaelphp


0

मुझे पता है कि यह उत्तर पूरी तरह से इस प्रश्न के लिए नहीं है, लेकिन बहुत सारे लोग हैं जो जानते हैं कि वर्डप्रेस में उल और झूठ टैग को कैसे हटाया जाए और वर्डप्रेस में एक और टैग जोड़ा जाए।

जैसे मेरे कोड को लागू करने से पहले वर्डप्रेस मेनू में इस प्रकार के आउटपुट देता है

<ul class="*****"><li>abc</li></ul>

लेकिन कोई उल में div और li को टैग में बदलना चाहता है तो आपको नीचे दिए गए कोड का उपयोग करना चाहिए

            <?php

                $menuParameters = array(
                    'menu' => 'primary_menu',
                    'link_before'     => '<span>',
                    'link_after'      => '</span>',
                    'before'        => '<div class="tp-primary-header mui-top-home">',
                    'after'     => '</div>',
                    'container'       => false,
                    'echo'            => false,
                    'depth'           => 0,
                );

                echo strip_tags(wp_nav_menu( $menuParameters ), '<a><span><div>' );
                ?>

यह निम्न प्रारूप में आउटपुट देता है

<div class="tp-primary-header mui-top-home"><a href="#"><span>ABC</span></a></div>
<div class="tp-primary-header mui-top-home"><a href="#"><span>def</span></a></div>
<div class="tp-primary-header mui-top-home"><a href="#"><span>XYZ</span></a></div>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.