প্লাগইন ব্যবহার করে 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;
}

উপরের সমাধানটি কাজ করে তবে আমি মনে করি এটি পছন্দসই ফলাফল অর্জনের সঠিক উপায় নয়। আমি আপনার কাছ থেকে একটি ভাল সমাধান করতে চাই।


বাহ, তাহলে এই প্রশ্নের আর কোনও উত্তর নেই? আমি এখানে একটি সাধারণ কাজের সন্ধান করছি। এমন কিছু যা পার্সিংয়ের স্ট্রিংগুলিতে জড়িত না। একটি সহজ উপায় আছে আছে, তাই না?
rgin

এই এইচটিএমএল স্ট্রাকচারটি ডিফল্ট করার জন্য ডাব্লুপি সমর্থন। কার্যবিধির জন্য কেবল সাবমেনু CSS শ্রেণীর নাম পরিবর্তন করা দরকার names ওয়ার্ডপ্রেস মেনু কাঠামোর জন্য আপনার সিএসএস ক্লাসগুলি পুনরায় লেখাই ভাল।
ফক্সস্ক 8

উত্তর:


2

আপনি ওয়াকার ব্যবহার করে আপনার মেনুটি পরিবর্তন করতে পারেন।

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

কোডের নীচে সংযুক্ত থিম ফোল্ডারে একটি ফাইল সাবমেনু.এফপি তৈরি করুন।

<?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যদি আপনি ডাব্লু এনএভি মেনু কাঠামো আইটেম যোগ করা হবে অধিকার। একটি স্থিতিশীল "হোম" লিঙ্ক যুক্ত করার জন্য নীচের এক্সাম্পলটি দেখুন। লিঙ্কটি স্থিতিশীল, ফাংশন থেকে home_url()এবং আমি এটিকে কেবল ডাব্লুপি নেভ মেনু থেকে যুক্তিগুলির আগে এবং পরে মানগুলি এপ্রেস করেছিলাম। আপনি যদি এই উপাদানটির জন্য ওয়াকার ব্যবহার করেন তবে লি-আইটেমটি স্থিতিশীল, কেবল ওয়ার্ডপ্রেসে ছানাড। হুক 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;
}

দেখে মনে হচ্ছে আপনি আমার সমস্যার বিবৃতিটি পড়েন নি তাই আপনার সমাধানটি আমি যা চাই তা তা নয়, মেনুতে শুরু বা শেষে আমার কোনও আইটেম সংযুক্ত করার দরকার নেই তবে একটি নির্দিষ্ট প্যারেন্ট আইটেমের অধীনে আমার একটি সাব মেনু প্রয়োজন need দয়া করে প্রশ্নটি পড়ুন, সমস্ত বিষয় খুব স্পষ্টভাবে ব্যাখ্যা করা হয়েছে।
তাহির ইয়াসিন

দুঃখিত, হ্যাঁ আপনার অধিকার আছে; তবে প্রায়শই ভাষা সমস্যার ব্যাকগ্রাউন্ড হয়। তবে আমি এর সমাধান দেখতে পাব।
বুল্টেজ করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.