ওয়াকার_নাভ_মেনু সংশোধন করার সময় পিতা-মাতার লিতে 'হ্যাশ-চিলড্রেন' শ্রেণি যুক্ত করুন


22

আমি wp_nav_menu এর জন্য একটি কাস্টমাইজড ওয়াকার ক্লাস লিখছি এবং কোনও লি-তে সাবমেনু রয়েছে কিনা তা নির্দিষ্ট করতে সক্ষম হতে চাই। তাই আমি চাই যে আমার মার্কআপটি হ'ল:

<li class="has_children [other-wordpress-classes]">
    <a class="parent-link">Some item</a>
    <ul class="sub-menu">

আমি ক্লাসগুলি কীভাবে যুক্ত করতে এবং মুছে ফেলা যায় তা জানি, বর্তমান আইটেমটিতে শিশুদের আইটেম রয়েছে কিনা তা জানাতে আমি কিছুই খুঁজে পাচ্ছি না।

কোন ধারনা?

আগাম ধন্যবাদ.

উত্তর:


23

start_el()এর $argsপ্যারামিটারে এই তথ্যটি পাওয়া উচিত , তবে এটি প্রদর্শিত হয় ওয়ার্ডপ্রেস কেবল$args এটি অ্যারে হিসাবে পূরণ করে , কাস্টম নেভিগেশন মেনুগুলির জন্য এটি একটি অবজেক্ট। এটি ট্র্যাকের টিকিটে প্রকাশিত হয়েছে । তবে কোনও সমস্যা নেই, আপনি যদি নিজের display_element()কাস্টম ওয়াকারে পদ্ধতিটি ওভাররাইড করেন তবে আপনি এটি নিজের মধ্যে পূরণ করতে পারেন (কারণ এটি শিশু উপাদান অ্যারের অ্যাক্সেসের সবচেয়ে সহজ জায়গা):

class WPSE16818_Walker extends Walker_Nav_Menu
{
    function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output )
    {
        $id_field = $this->db_fields['id'];
        if ( is_object( $args[0] ) ) {
            $args[0]->has_children = ! empty( $children_elements[$element->$id_field] );
        }
        return parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
    }

    function start_el( &$output, $item, $depth, $args ) {
        if ( $args->has_children ) {
            // ...
        }
    }

হ্যালো জান, আপনি কি এই প্রশ্নে আমাকে সাহায্য করতে পারেন ? আমি আপনার কোড চেষ্টা করেছিলাম কিন্তু আমি এটি কার্যকর করতে পারিনি। আপনি আমাকে আরও কিছু নমুনা কোড দিতে পারেন?
গিরি

পড়ুন সম্পূর্ণ বাস্তবায়ন উদাহরণ আরও এই পৃষ্ঠাতে নিচে।
rjb

অনেক ধন্যবাদ @ জন কল্পিত .. আমি আমার কাস্টম ওয়াকারের সাথে রইলাম .. আটলাস্ট আপনার স্নিপেট আমাকে সাহায্য করেছে।
হরিশ চিনজু 5'14

7

আপডেট করুন: হিসাবে ওয়ার্ডপ্রেস 3.7 - একটি কাস্টম ভ্রমণকারী ব্যবহার করতে যেমন ওয়ার্ডপ্রেস কেন্দ্রের যত্ন নেয়া হচ্ছে কোন প্রয়োজন (অক্টোবর 2013), সিএসএস ক্লাস থিম মেনু শিশু মেনু আইটেম এবং পৃষ্ঠাগুলি ইঙ্গিত যোগ করা হয়েছে।

সিএসএস ক্লাসগুলির নাম দেওয়া হয়েছে menu-item-has-childrenএবং page_item_has_children


তাড়াহুড়োয় কারও জন্য সম্পূর্ণ সমাধানের জন্য (জান ফ্যাব্রির আগের উত্তরের কৃতিত্ব), নীচে সম্পূর্ণ বাস্তবায়ন দেখুন।

আপনার থিমের টেমপ্লেটে নেভিগেশন আউটপুট:

wp_nav_menu( array(
    'theme_location' => 'navigation-primary',
    'container' => false,
    'container_class' => '',
    'container_id' => '',
    'menu_class' => '',
    'menu_id' => '',
    'walker' => new Selective_Walker(),
    'depth' => 2
    )
);

তারপরে, আপনার থিমের মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত করুন functions.php:

class Selective_Walker extends Walker_Nav_Menu {
    function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) {
        $id_field = $this->db_fields['id'];

        if ( is_object( $args[0] ) ) {
            $args[0]->has_children = !empty( $children_elements[$element->$id_field] );
        }

        return parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
    }

    function start_el( &$output, $item, $depth, $args ) {
        if ( $args->has_children ) {
            $item->classes[] = 'has_children';
        }

        parent::start_el(&$output, $item, $depth, $args);
    }
}

ফলাফল এইচটিএমএল আউটপুট নিম্নলিখিত অনুরূপ হবে:

<ul>
    <li><a href="#">Home</a></li>
    <li class="has_children"><a href="#">About</a>
        <ul class="sub-menu">
            <li><a href="#">Our Mission</a></li>
        </ul>
    </li>
    <li><a href="#">Services</a></li>
    <li class="has_children"><a href="#">Products</a>
        <ul class="sub-menu">
            <li><a href="#">Lorem Ipsum</a></li>
            <li><a href="#">Lorem Ipsum</a></li>                
        </ul>
    </li>
    <li><a href="#">Contact Us</a></li>
</ul>

ওয়ার্ডপ্রেস 'ওয়াকার ক্লাস' ব্যবহার সম্পর্কে আরও তথ্যের জন্য, ওয়াকার ক্লাস বোঝা দেখুন ।

উপভোগ করুন!


মারাত্মক ত্রুটি: কল-টাইম পাস-বাই-রেফারেন্সটি ডি: \ www \ ওয়ার্ডপ্রেস \ ডাব্লুপি-কনটেন্ট \ থিমস \ wpt_theme \ ফাংশন.এফপি 44
তাহির ইয়াসিন

লাইন # 44 হল প্যারেন্ট :: স্টার্ট_ল (& $ আউটপুট, $ আইটেম, $ গভীরতা, gs আরোগুলি);
তাহির ইয়াসিন

2

এই ফাংশনটি হ'ল আপনি যা করতে চান তা ঠিক। এটি আপনাকে এনএভি মেনু আইটেমগুলি সংশোধন করার জন্য বেশ কার্যকর উপায় দেখায়। এছাড়াও আপনি এটি আইটেম-ফিল্টারের মাধ্যমে আরও উন্নত (যেমন শিশু থিম) ফাংশনের জন্য খুলতে পারেন:

/**
 * Classes for a navigation named "Topnav" in the nav location "top".
 * Shows examples on how to modify the current nav menu item
 * 
 * @param (object) $items
 * @param (object) $menu
 * @param (object) $args
 */
function wpse16818_nav_menu_items( $items, $menu, $args )
{
    # >>>> start editing

    // examples for possible targets
    $target['name'] = 'Topnav';
    // The targeted menu item/s
    $target['items'] = array( (int) 6 );

    # <<<< stop editing

    // filter for child themes: "config_nav_menu_topnav"
    $target = apply_filters( 'config_nav_menu_'.strtolower( $target['name'] ), $target );

    // Abort if we're not with the named menu
    if ( $menu->name !== $target['name'] ) 
        return;

    foreach ( $items as $item )
    {
        // Check what $item contains
        echo '<pre>'; print_r($item); echo '</pre>';

        // First real world example:
        $item->classes = 'span-4';

        // Second real world example:
        // Append this class if we are in one of the targeted items
        if ( in_array( (int) $item->menu_order, $target['items'] ) )
            $item->classes .= ' last';
    }

    return $items;
}
add_filter( 'wp_get_nav_menu_items', 'wpse16818_nav_menu_items', 10, 3 );

এবং হ্যাঁ, প্রায় প্রতিটি ক্ষেত্রেই - কাস্টম ওয়াকারের প্রয়োজন নেই।


ধন্যবাদ, আপাতত আমার ওয়াকারের দরকার তবে পরের বারের জন্য এটি একবার দেখুন!
patnz

1

আপনি যদি ড্রপ ডাউন করতে চান তবে আপনি কেবল সিএসএস দিয়ে এটি করতে পারেন। বাচ্চাদের সাথে ডব্লিউপিতে কাস্টম এনএভি করুন, ওয়ার্ডপ্রেস স্বয়ংক্রিয়ভাবে শিশু উলকে ক্লাস .সুব-মেনু বরাদ্দ করে। এই সিএসএস চেষ্টা করে দেখুন

    nav li {position:relative;}
   .sub-menu {display:none; position:absolute; width:300px;}
    nav ul li:hover ul {display:block;}

আপনি এটিকে কিছুটা মশলা করতে কিছু jQuery যুক্ত করতে চাইতে পারেন, তবে এটি আপনাকে একটি কার্যকর ড্রপ ডাউন মেনু দেয়।


ধন্যবাদ, এটি মাল্টিলেভাল কলাপসিবল ট্রি মেনুর জন্য যা আমি কন্ট্রোল উপাদানগুলিও intoোকাচ্ছি, তবে সিএসএস দিয়ে যতটা সম্ভব সম্ভব করার পক্ষে ভাল!
patnz

-1
if ( $this->has_children ) {
    $item_output .= 'has_children';
}

3
দয়া করে ব্যাখ্যা করুন যে এই কোডটি কী করে এবং এটি কীভাবে প্রশ্নের উত্তর দেয়।
সাইবমেটা

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