চলক-মেনু-আইটেমের পরিবর্তনশীল হিসাবে শিরোনাম কীভাবে পাবেন?


10

পিএইচপি ভেরিয়েবল হিসাবে বর্তমান-মেনু-আইটেম পাওয়া সম্ভব?

আমি মেনু আইটেমটি 'আমরা সমর্থন করি জাদুঘরগুলি' এর মাধ্যমে বিভাগের জাদুঘরগুলি তালিকাবদ্ধ করছি তাই আমি 'আমরা সমর্থন করি এমন যাদুঘরগুলি' বিট পেতে এবং এটি কোথাও প্রদর্শন করতে চাই?

কোন সাহায্য প্রশংসা!

উত্তর:


15

ফিল্টারিংয়ের মাধ্যমে এটি সম্ভব wp_nav_menu_objects, কোন মেনু আইটেমটি বর্তমান মেনু আইটেম তা যাচাই করার সবচেয়ে সহজ জায়গা, কারণ ওয়ার্ডপ্রেস ইতিমধ্যে আপনার জন্য ক্লাস যুক্ত করেছে

add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
    foreach ( $sorted_menu_items as $menu_item ) {
        if ( $menu_item->current ) {
            $GLOBALS['wpse16243_title'] = $menu_item->title;
            break;
        }
    }
    return $sorted_menu_items;
}

আপনি এখন নতুন শিরোনামের পরিবর্তে এই নতুন বৈশ্বিক চলকটি ব্যবহার করতে পারেন। সাধারণ উদাহরণ:

add_filter( 'single_cat_title', 'wpse16243_single_cat_title' );
function wpse16243_single_cat_title( $cat_title )
{
    if ( isset( $GLOBALS['wpse16243_title'] ) ) {
        return $GLOBALS['wpse16243_title'];
    }
    return $cat_title;
}

অবশ্যই, এটি কেবলমাত্র যদি আপনি শিরোনাম প্রদর্শন করার আগে মেনু প্রদর্শন করেন তবেই এটি কাজ করে। আপনার যদি এটির আগে প্রয়োজন হয় (সম্ভবত <title>উপাদানটিতে?), আপনার প্রথমে মেনুটি রেন্ডার করা উচিত এবং তারপরে এটি পরে প্রদর্শন করা উচিত


হ্যালো জান - কেবল ভাবছেন? মেন্যু_আইটিএম-> বর্তমান আইটেমগুলির বাচ্চাদের একটি অ্যারে তৈরি করার কোনও উপায় আছে কি? বেশ কয়েকটি জিনিস চেষ্টা করেও খুব বেশি দূরে পাচ্ছি না ..!
v3nt

আপনার ফিল্টার এর সাহায্যে এটি পরিচালনা - নীচের উত্তর। চিয়ার্স!
v3nt

জান ফ্যাব্রি / আমি wpse16243_wp_nav_menu_objectsবর্তমান মেনু আইডিটি পুনরুদ্ধার করতে চেষ্টা করেছি । তবে এটি সংবেদনশীল নয়। হোম পৃষ্ঠা এবং একটি মেনু আইটেমের মধ্যে স্যুইচিং আমাকে সর্বদা সঠিক মেনু আইটেম দেয় না - এটি "লেগস" ধরণের। আমি কীভাবে বর্তমান মেনু আইডিটি পুনরুদ্ধার করতে পারি সে সম্পর্কে কোনও পরামর্শ?
স্টিভেন

আপনি ফাংশনটির নামটির সাথে অগ্রাধিকার দেওয়ার কোনও কারণ আছে কি wpse16243? আমি এই অদ্ভুত নামটির নামটি দেখতে দেখতে মোটামুটি সাধারণ এবং কী ঘটছে তা অবাক করে দেখছি। দাবি অস্বীকার: ওয়ার্ডপ্রেস নুব।
স্টিফেন ওয়াটকিন্স

2
@Steve: শুধু একটি অনন্য উপসর্গ: WordPress Stack Exchange question number 16243। লোকেরা যদি সরাসরি এই কোডটি অনুলিপি করে তবে এটি অন্য প্লাগইনগুলির সাথে বিরোধ করবে না যা একই ফাংশনটির নাম ভাগ করে নিতে পারে।
জান ফ্যাব্রি

4

আপনি ব্যবহার করতে পারেন wp_get_nav_menu_items()। একটি নমুনা এখানে function:

<?php
function my_get_menu_item_name( $loc ) {
    global $post;

    $locs = get_nav_menu_locations();

    $menu = wp_get_nav_menu_object( $locs[$loc] );

    if($menu) {

        $items = wp_get_nav_menu_items($menu->term_id);

        foreach ($items as $k => $v) {
            // Check if this menu item links to the current page
            if ($items[$k]->object_id == $post->ID) {
                $name = $items[$k]->title;
                break;
            }
        }

    }
    return $name;
}

তারপরে আপনি যে ন্যাভ মেনুটি ব্যবহার করতে চান functionতার অবস্থানের নামটি দিয়ে কল করুন :

<?php
$menu_name = my_get_menu_item_name( 'NAV_MENU_LOCATION_NAME' ); // eg. 'primary'

echo $menu_name;

2
add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
    foreach ( $sorted_menu_items as $menu_item ) {

        if ($menu_item->current ) {
            $GLOBALS['currentMenuTitle'] = $menu_item->title;
            $GLOBALS['currentMenuID'] = $menu_item->ID;



            break;
        }
    }


    return $sorted_menu_items;
}


function get_menu_items_children( $menu_item_id='' )
{   
    global $wpdb;

      //     AND meta_key='_menu_item_menu_item_parent'

    $myrows = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta JOIN $wpdb->posts ON $wpdb->postmeta.post_id=$wpdb->posts.id WHERE meta_value = '".$menu_item_id."' AND meta_key='_menu_item_menu_item_parent' ORDER BY $wpdb->posts.menu_order ASC" );


    foreach ( $myrows as $menu_item ) {

        $sc = get_object_vars($menu_item);  

        $myrowsb = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE post_id = '".$sc['post_id']."' AND meta_key='_menu_item_object_id' " );

        foreach ( $myrowsb as $menu_itemb ) {

            $scb = get_object_vars($menu_itemb);    
            $pmIDs[] = $scb['meta_value'];

        }

    }


    return $pmIDs;
}

0

আমি নিশ্চিত না যে আমি ঠিক অনুসরণ করি।

"জাদুঘরগুলি আমরা সমর্থন করি" একটি পোস্ট শিরোনাম, পৃষ্ঠা শিরোনাম, বিভাগ শিরোনাম, ইত্যাদি দ্বারা উত্পাদিত হয় (বা, আপনি যদি কাস্টম নেভিগেশন মেনু ব্যবহার করেন তবে এটি একটি কাস্টম শিরোনাম হতে পারে)।

আপনি এই পাঠ্যটি দিয়ে কী করার চেষ্টা করছেন? আপনি কোথায় এটি প্রদর্শনের চেষ্টা করছেন? আমি ধরে নিচ্ছি আপনি এটি বিভাগ সূচী পৃষ্ঠায় প্রদর্শন করার চেষ্টা করছেন (যেহেতু আপনি এটি ইঙ্গিত করেছেন current-menu-item)? যদি তা হয়, কেবল <?php single_cat_title(); ?>বিভাগ শিরোনাম আউটপুট কল ।

আপনার যদি অতিরিক্ত বিভাগের তথ্য প্রয়োজন হয় তবে আপনি এর মতো কিছু ব্যবহার করতে পারেন:

$cat = get_the_category();
$currentcat = $cat[0];

যা নিম্নলিখিত ভেরিয়েবলগুলি উপলব্ধ করে:

$currentcat=>cat_ID // Category ID
$currentcat=>cat_name // Category Name (Same as Title)
$currentcat=>category_nicename // Category Slug
$currentcat=>category_description // Category Description
$currentcat=>category_count // Category Count (# of Posts w/ this Category)

আপনি যদি বিভাগ সূচি পৃষ্ঠা ব্যতীত অন্য কোথাও হন তবে আপনাকে এই ক্রিয়াকলাপগুলিতে উত্তীর্ণ হতে হবে।

সম্পাদনা করুন:

যেহেতু আপনি ইঙ্গিত করেছেন যে "যাদুঘরগুলি আমরা সমর্থন করি" এটি একটি কাস্টম মেনু শিরোনাম, তাই সবচেয়ে সহজ পদ্ধতির তালিকাটি "যাদুঘর" থেকে "জাদুঘরগুলি আমরা সমর্থন করি" নামকরণ করা (নোট: আপনি স্লাগ ছেড়ে যেতে পারেন museums, অপরিবর্তিত রাখতে পারেন)। তবে এটি করার অর্থ হ'ল "যাদুঘরগুলি আমরা সমর্থন করি" বিভাগের শিরোনাম হিসাবে প্রদর্শিত হবে যেখানে এটি আপনার টেমপ্লেটে আউটপুট হতে পারে। যদি তা গ্রহণযোগ্য হয়, তবে কোনও উদ্বেগ নেই।

অন্যথায়, নির্দিষ্ট মেনু আইটেমটির শিরোনাম দখল করতে আপনাকে wp_get_nav_menu_items()( কোডেক্স রেফ ) এর মতো কিছু ব্যবহার করতে হবে ।


আরে চিপ - এটি এই পৃষ্ঠা; bfami.modernactivity.co.uk/category/museum তাই মূলত বিড়ালটি 'যাদুঘর' তবে আমি ম্যানুসের পৃষ্ঠাতে নেভিগেশন লেবেল (কাস্টম শিরোনাম) সেট করা 'মিউজিয়াম ওয়ে সাপোর্ট' দেখাতে চাই। কোনওভাবেই এটি দখল করা সম্ভব বলে মনে করেন?
v3nt

যে সাহায্য করে। আমার উত্তর সম্পাদনা দেখুন। আপনার কয়েকটি বিকল্প রয়েছে: বিভাগটির নাম পরিবর্তন করুন, বা ব্যবহার করুন wp_get_nav_menu_items()
চিপ বেনেট

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