प्लगइन का उपयोग करके wp_nav_menu द्वारा उत्पन्न मेनू में उप-मेनू कैसे जोड़ें


11

मेरे पास एक मेनू है wp_nav_menuजिसके द्वारा यह दिखता है

<ul class="nav-menu" id="menu-top-nav">
    <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-43" id="menu-item-43"><a href="http://www.example.com/item1.com">Item 1</a></li>
    <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-44" id="menu-item-44"><a href="http://www.example.com/item2.com">Item 2</a></li>
    <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-45" id="menu-item-45"><a href="http://www.example.com/item3.com">Item 3</a></li>
    <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-46" id="menu-item-46"><a href="http://www.example.com/item4.com">Item 4</a></li>
</ul>

मैं अपने प्लगइन का उपयोग करके "आइटम 3" के लिए एक उप-मेनू जोड़कर उपरोक्त मेनू को संशोधित करना चाहता हूं, इसलिए नीचे मेरा वांछित आउटपुट है।

<ul class="nav-menu" id="menu-top-nav"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-43" id="menu-item-43"><a href="http://www.example.com/item1.com">Item 1</a></li>
  <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-44" id="menu-item-44"><a href="http://www.example.com/item2.com">Item 2</a></li>
  <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-45" id="menu-item-45"><a href="http://www.example.com/item3.com">Item 3</a>
    <ul class="sub-menu">
      <li class="menu-item" id="menu-item-48"><a href="http://www.example.com/child1.com">child 1</a></li>
      <li class="menu-item" id="menu-item-49"><a href="http://www.example.com/child2.com">child 2</a></li>
      <li class="menu-item" id="menu-item-50"><a href="http://www.example.com/child3.com">child 3</a></li>
   </ul>
  </li>
  <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-46" id="menu-item-46"><a href="http://www.example.com/item4.com">Item 4</a></li>
</ul>

मैंने फ़िल्टरों का अनुसरण करने की कोशिश की है लेकिन इनसे मुझे उपरोक्त आउटपुट प्राप्त करने में मदद नहीं मिली।

wp_setup_nav_menu_item
wp_get_nav_menu_items
wp_nav_menu_items

समाधान 1:

add_filter('wp_nav_menu_items', 'my_custom_menu_item', 10, 2);

function my_custom_menu_item($items, $args)
{
    $parent_item_number = 3;
    $pos = nth_strpos($items, '</a>', $parent_item_number) + 4;
    $cat_id = 9;
    $args = array('numberposts' => 5, 'category' => $cat_id);
    $myposts = get_posts($args);
    if (!empty($myposts))
    {
        $str_to_insert = '<ul class="sub-menu">';
        global $post;
        foreach ($myposts as $post) : 
            setup_postdata($post);
            $str_to_insert .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
        endforeach;
        $str_to_insert .= '</ul>';

        $items = substr($items, 0, $pos) . $str_to_insert . substr($items, $pos);
    }
    return $items;
}

function nth_strpos($str, $substr, $n, $stri = false)
{
    if ($stri)
    {
        $str = strtolower($str);
        $substr = strtolower($substr);
    }
    $ct = 0;
    $pos = 0;
    while (($pos = strpos($str, $substr, $pos)) !== false)
    {
        if (++$ct == $n)
        {
            return $pos;
        }
        $pos++;
    }
    return false;
}

उपरोक्त समाधान काम करता है लेकिन मुझे लगता है कि यह वांछित परिणाम प्राप्त करने का उचित तरीका नहीं है। मैं तुमसे एक अच्छा समाधान है प्यार करता हूँ।


वाह, तो इस सवाल का कोई और जवाब नहीं? मैं यहां एक साधारण वर्कअराउंड की तलाश में हूं। ऐसा कुछ जिसमें पार्सिंग स्ट्रिंग्स शामिल नहीं हैं। वहाँ एक आसान तरीका है, है ना?
17

WP सपोर्ट इस WP strucure पर WP का समर्थन करता है। समाधान के लिए केवल सबमेनू सीएसएस वर्ग नाम बदलने की जरूरत है। बेहतर वर्डप्रेस मेनू संरचना के लिए अपने सीएसएस वर्गों को फिर से लिखना है।
फॉक्सस्क 8

जवाबों:


2

आप वॉकर का उपयोग करके अपने मेनू को संशोधित कर सकते हैं।

include('subMenu.php');
$menu =  wp_nav_menu( array('menu' => 'YOUR-MENU-NAME','menu_class' => 'megamenu','walker' => new subMenu));

एक फ़ाइल subMenu.php बनाएँ विषय फ़ोल्डर में नीचे कोड जोड़ें।

<?php
class subMenu extends Walker_Nav_Menu {
    function end_el(&$output, $item, $depth=0, $args=array()) {

    if( 'Item 3' == $item->title ){
        $output .= '<ul class="sub-menu">
        <li class="menu-item" id="menu-item-48"><a href="http://www.example.com/child1.com">child 1</a></li>
        <li class="menu-item" id="menu-item-49"><a href="http://www.example.com/child2.com">child 2</a></li>
        <li class="menu-item" id="menu-item-50"><a href="http://www.example.com/child3.com">child 3</a></li>
        </ul>';
    }
    $output .= "</li>\n";  
    }
}

0

हुक wp_nav_menu_itemsसही है अगर आप WP नव मेनू की संरचना में आइटम जोड़ देंगे। स्टैटिक "होम" लिंक जोड़ने के लिए नीचे दिए गए एग्जॉस्ट को देखें। लिंक फ़ंक्शन से स्थिर है, home_url()और मैंने इसे केवल डब्ल्यूपी नव मेनू से तर्कों में सूचीबद्ध किया है और पहले और बाद के मूल्यों को आगे बढ़ाया है। ली-आइटम स्थिर है, केवल वर्डप्रेस में chnaged है, यदि आप इस तत्व के लिए वॉकर का उपयोग करते हैं। wp_nav_menu_itemsसूची के अंदर हुक है ul। इस नई आइटम सामग्री के लिए संस्करण को परिभाषित करने के बाद, मैं इसे सूची में डिफ़ॉल्ट सूची में जोड़ता हूं $items, सूची आउटपुट से पहले सेट किया गया है। अब केवल सभी सामग्री की वापसी।

add_filter( 'wp_nav_menu_items', 'fb_add_home_link', 10, 2 );
function fb_add_home_link( $items, $args ) {

    $home_item =
            '<li>' .
            $args->before .
            '<a href="' . home_url( '/' ) . '" title="Home">' .
            $args->link_before . __( 'Home' ) . $args->link_after .
            '</a>' .
            $args->after .
            '</li>';

    $items = $home_item . $items;

    return $items;
}

ऐसा लगता है कि आपने मेरे समस्या कथन को नहीं पढ़ा है इसलिए आपका समाधान वह नहीं है जो मैं चाहता हूं, मुझे मेनू के प्रारंभ या अंत में एक आइटम संलग्न करने की आवश्यकता नहीं है, लेकिन मुझे एक विशिष्ट मूल आइटम के तहत एक उप-मेनू की आवश्यकता है। कृपया प्रश्न पढ़ें, सभी चीजों को बहुत स्पष्ट रूप से समझाया गया है।
ताहिर यासीन

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