चर के रूप में वर्तमान-मेनू-आइटम शीर्षक कैसे प्राप्त करें?


10

क्या php वैरिएबल के रूप में करंट-मेन्यू-आइटम प्राप्त करना संभव है?

मैं मेनू आइटम 'संग्रहालयों का समर्थन करता हूं' के माध्यम से श्रेणी संग्रहालयों को सूचीबद्ध कर रहा हूं, इसलिए मैं 'संग्रहालयों का समर्थन करता हूं' जैसे बिट का समर्थन करता हूं और इसे कहीं प्रदर्शित करता हूं?

किसी भी मदद की सराहना की!

जवाबों:


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

Jan Fabry / मैंने wpse16243_wp_nav_menu_objectsवर्तमान मेनू ID पुनः प्राप्त करने के लिए उपयोग करने का प्रयास किया । लेकिन यह सुसंगत नहीं है। होम पेज और एक मेनू आइटम के बीच स्विच करना हमेशा मुझे सही मेनू आइटम देता है - यह "लैग्स" की तरह है। मैं वर्तमान मेनू आईडी कैसे प्राप्त कर सकता हूं, इस पर कोई सुझाव?
स्टीवन

क्या कोई कारण है कि आप फ़ंक्शन नाम के साथ प्रस्तावना देते हैं wpse16243? मैं इस अजीब प्रकार के नाम को काफी आम देखता हूं और सोचता हूं कि यह सब क्या है। डिस्क्लेमर: वर्डप्रेस नॉब।
स्टीफन वॉटकिंस

2
@ समय: बस एक अनूठा उपसर्ग WordPress Stack Exchange question number 16243:। यदि लोग सीधे इस कोड को कॉपी करते हैं, तो यह अन्य प्लगइन्स के साथ संघर्ष नहीं करेगा जो समान फ़ंक्शन नाम साझा कर सकते हैं।
Jan Fabry

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 तो मूल रूप से बिल्ली 'संग्रहालय' है, लेकिन मैं 'MUSEUMS WE SUPPORT' दिखाना चाहता हूं, जो मेनू पृष्ठ में स्थापित नेविगेशन लेबल (कस्टम शीर्षक) है। लगता है कि यह किसी भी तरह हड़पने के लिए संभव है?
v3nt

यह सहायता करता है। मेरा उत्तर संपादित देखें। आपके पास कुछ विकल्प हैं: श्रेणी का नाम बदलें, या उपयोग करें wp_get_nav_menu_items()
चिप बेनेट

चीयर्स चिप - बस अंत में श्रेणी का शीर्षक बदल दिया! बस सोचा था कि मेनू लेबल को हथियाने का एक आसान तरीका होगा ...
v3nt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.