वर्डप्रेस मेनू आइटम में डेटा विशेषता कैसे जोड़ें


17

मैं ट्विटर बूटस्ट्रैप हूं और मेनू लिंक के टैग में डेटा-टॉगल = "मोडल" विशेषता जोड़ने की आवश्यकता है। ट्विटर बूटस्ट्रैप ड्रॉपडाउन मेनू के लिए पैदल चलने वाले अधिकांश परिणामों के संदर्भ को खोजने पर हालांकि इस मेनू में कोई ड्रॉपडाउन नहीं है और मुझे केवल विशेष विशेषता जोड़ने की आवश्यकता है।

इसके बाद मैंने यह पाया: प्लगइन के बिना मेनू आइटम में कस्टम विशेषताएँ जोड़ें जो कि वर्डप्रेस 3.6+ में दिखाई देने वाली बहुत उपयोगी है। हमें अब लंबे जटिल वॉकर नहीं करना है और इसके बजाय इसका उपयोग कर सकते हैं: http://codex.wordpress.org/Plugin_API / Filter_Reference / nav_menu_link_attributes

हालाँकि यह चल रहा है कि एपीआई संदर्भ काफी नंगे है और कोई उदाहरण नहीं देता है और चूंकि यह नया है इसलिए Google पर इसके बहुत कम संदर्भ हैं।

मैंने पहली बार यह कोशिश की:

add_filter( 'nav_menu_link_attributes', 'mywp_contact_menu_atts', 10, 3 );

function pb_contact_menu_atts( $atts, $item, $args )
{
    // inspect $item, then …
    $atts['data-toggle'] = 'modal';
    return $atts;
}

और जो अपेक्षा के अनुरूप काम करता है वह मेनू में सभी टैग के लिए विशेषता जोड़ता है। इसलिए मैं यह पता लगाने की कोशिश कर रहा हूं कि एक मेनू आइटम को # मेनू-आइटम -7857 या इस तरह से कैसे लक्षित किया जाए।

क्या किसी को पता है कि एक मेनू आइटम को लक्षित करने का एक उदाहरण कहां मिल सकता है या यह निर्धारित करने में सक्षम है कि उपरोक्त लिंक किए गए एपीआई संदर्भ में जानकारी पर कैसे आधारित हो?

ध्यान देने के लिए, मुझे निम्नलिखित एक उदाहरण मिला लेकिन यह केवल उन वस्तुओं को लक्षित करता है जिनमें बच्चे होते हैं जो मदद नहीं करते लेकिन सही दिशा में हो सकते हैं:

add_filter('nav_menu_link_attributes', function($atts, $item, $args) {
    if ( $args->has_children )
    {
        $atts['data-toggle'] = 'dropdown';
        $atts['class'] = 'dropdown-toggle';
    }

    return $atts;
}, 10, 3);

अद्यतन - नीचे दिए गए उत्तर की तरह लगता है कि यह किसी चीज़ पर है, लेकिन यह निर्धारित करने में सक्षम नहीं था कि वास्तव में मेरी विशिष्ट लिंक को लक्षित करने के लिए संख्या कैसे ढूंढें और एक कार्यशील उदाहरण में उस सशर्त को कैसे जोड़ें / कैसे जोड़ें। एक टिप्पणी जोड़ी, लेकिन वापस नहीं सुना। चूंकि 18 दिनों के बारे में सोचा गया था कि मैं देखूंगा कि क्या कोई इनाम मदद करेगा।

जब मैं उस लिंक के लिए कोड देखता हूं जिसे मैं लक्षित करना चाहता हूं:

<li id="menu-item-7858" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-7858"><a href="#" data-toggle="modal">Chat</a></li>

मुझे संख्या 7858 दिखाई दे रही है, इसलिए शायद यह सोचकर कि वह संख्या है जिसे मुझे लक्षित करना चाहिए।

लेकिन जब मैं उदाहरण के लिए प्रयास करता हूं:

add_filter( 'nav_menu_link_attributes', 'my_chat_menu_atts', 10, 3 );


function my_chat_menu_atts( $atts, $item, $args ) {
    if ( 7857 == $item['ID'] ) {
        // inspect $item, then …
        $atts['onclick'] = 'SnapEngage.startLink();';
        return $atts;
    }
}

हालाँकि यह जोड़ना कि यदि एक टिप्पणीकार ने सुझाव दिया है तो मुझे निम्नलिखित त्रुटि मिलेगी:

Fatal error: Cannot use object of type WP_Post as array

मैं मान रहा हूं कि अधिक कोड की आवश्यकता है लेकिन एक खो जाने पर। यदि यह कथन काम करता है तो एक अनुस्मारक के रूप में यह एक लिंक के बजाय सभी लिंक को लक्षित करता है जिसे मैं लक्षित करना चाहता हूं।


मैं सम्मिलित करना चाहता हूं <? Php the_id ();> $ atts चर में। इस तरह से // // $ आइटम का निरीक्षण करें यदि ($ आइटम-> ID == $ menu_target) {$ atts ['डेटा-टॉगल'] = 'मोडल - <; php the_id () ;;>'; } $ एटीएस वापस; क्या आप मेरी मदद कर सकते हैं मैं $ atts चर में the_id कैसे डाल सकता हूं। धन्यवाद
nadzhq

जवाबों:


36

मूल प्रश्न में आपके द्वारा दिए गए कोड को विशेष रूप से संपादित करना:

add_filter( 'nav_menu_link_attributes', 'wpse121123_contact_menu_atts', 10, 3 );
function wpse121123_contact_menu_atts( $atts, $item, $args )
{
  // The ID of the target menu item
  $menu_target = 123;

  // inspect $item
  if ($item->ID == $menu_target) {
    $atts['data-toggle'] = 'modal';
  }
  return $atts;
}

के बाद मैंने अपने कुछ मूल्यों में स्वैप किया जो उसने किया! धन्यवाद! इसे सही के रूप में चिह्नित किया गया है, लेकिन कहते हैं कि मुझे इनाम देने से पहले 23 घंटे इंतजार करने की आवश्यकता है।
cchiera

मदद करने के लिए खुश! : D
जेन

मैंने फैंटास्टिकल में एक रिमाइंडर सेट किया है ताकि मैं कल बाउंटी को पुरस्कार देना न भूलें।
cchiera

क्या होगा यदि आपके पास लक्ष्य के रूप में कई मेनू आइटम हैं?
एरिक मित्ज़ंस

यदि डेटा टॉगल मान भिन्न है, तो बस एकाधिक का उपयोग करें। या आप सरणी कुंजी के रूप में आईडी को सहेज सकते हैं (वे अद्वितीय हैं) और सरणी मान के रूप में मोडल नाम। इसके बाद अगर स्टेटमेंट देखेंarray_key_exists()
Sisir

8

दूसरा $itemतर्क, जो आपके फ़िल्टर फ़ंक्शन के लिए उपलब्ध कराया जा रहा है, में एक मेनू आइटम ऑब्जेक्ट है। यदि डंप किया जाता है तो यह कुछ ऐसा दिखता है:

[1] => WP_Post Object
    (
        [ID] => 2220
        [post_author] => 1
        [post_date] => 2012-12-26 19:29:44
        [post_date_gmt] => 2012-12-26 17:29:44
        [post_content] => 
        [post_title] => Home
        [post_excerpt] => 
        [post_status] => publish
        [comment_status] => open
        [ping_status] => open
        [post_password] => 
        [post_name] => home-3
        [to_ping] => 
        [pinged] => 
        [post_modified] => 2013-06-05 01:55:20
        [post_modified_gmt] => 2013-06-04 22:55:20
        [post_content_filtered] => 
        [post_parent] => 0
        [guid] => http://dev.rarst.net/?p=2220
        [menu_order] => 1
        [post_type] => nav_menu_item
        [post_mime_type] => 
        [comment_count] => 0
        [filter] => raw
        [db_id] => 2220
        [menu_item_parent] => 0
        [object_id] => 2220
        [object] => custom
        [type] => custom
        [type_label] => Custom
        [title] => Home
        [url] => http://dev.rarst.net/
        [target] => 
        [attr_title] => 
        [description] => 
        [classes] => Array
            (
                [0] => 
                [1] => menu-item
                [2] => menu-item-type-custom
                [3] => menu-item-object-custom
                [4] => current-menu-item
                [5] => current_page_item
                [6] => menu-item-home
            )

        [xfn] => 
        [current] => 1
        [current_item_ancestor] => 
        [current_item_parent] => 
    )

विशिष्ट मेनू आइटम को लक्षित करने के लिए आपको अपनी स्थिति तैयार करने और ऑब्जेक्ट में उपलब्ध डेटा के खिलाफ जांच करने की आवश्यकता है, उदाहरण के लिए if ( 2220 == $item['ID'] )


इसके लिए धन्यवाद! मुझे यकीन नहीं है कि मैं समझता हूं कि मेरे विशेष मेनू आइटम के लिए $ आइटम आईडी कैसे प्राप्त करें। आपके उदाहरण में 2220 आपके url " dev.rarst.net/?p=2220 " के समान ही है । मेरा लिंक मैं किसी अन्य वर्डप्रेस यूआरएल पर नहीं जाने के लिए डेटा-विशेषता जोड़ना चाहता हूं, बल्कि href = "# ContactForm" है। ऊपर दिए गए आपके उदाहरण के आधार पर मैंने और अधिक googled और echo var_export ($ GLOBALS ['पोस्ट'], TRY) चलाने की कोशिश की; लेकिन जब मैं अदृश्य मेनू आइटम के पास देखता हूं तो मुझे कोई विशिष्ट आईडी दिखाई नहीं देती है। क्या आप स्पष्ट कर सकते हो? या "अगर (2220 == $ आइटम ['आईडी'])" अग्रिम धन्यवाद!
14

2
आप जो त्रुटि देख रहे हैं, क्योंकि $itemवह एक वस्तु है, न कि एक सरणी; बदलने $item['ID']के लिए $item->ID
जेन

1

आप इस समस्या को एक अलग दिशा से क्यों नहीं करते हैं? Id == के साथ मेनू आइटम को लक्षित करने का प्रयास करने के बजाय ?? जो कुछ बिंदु पर बदल सकता है (मेनू आइटम, आईडी नहीं), जिस मेनू आइटम को आप लक्षित करना चाहते हैं, उसमें कस्टम वर्ग जोड़ने के लिए WP व्यवस्थापक क्षेत्र का उपयोग करें । फिर अपनी जानकारी को ट्रिगर करने के लिए अपनी जावास्क्रिप्ट में उस कक्षा का उपयोग करें:

$('.my-class').click(function(e){
  // do other stuff
  e.preventDefault;
});

मेरी जावास्क्रिप्ट की गारंटी नहीं है। आप jQuery उपयोग नहीं कर रहे हैं, तो आप की कोशिश कर सकते यह


1

मैं वर्डप्रेस में बनाए गए कस्टम मेनू में डेटा-अक्षर जोड़ना चाहता था।

मेरे द्वारा चुने गए चरण थे:

  1. मेरा मेनू आईडी नंबर मिला।
  2. @guiniveretoo से कोड की उन पंक्तियों को जोड़ा
  3. यदि प्रत्येक मेनू आइटम के लिए स्टेटमेंट लिखे गए (जैसा कि मैं चाहता था कि अलग-अलग विशेषता मान इंजेक्ट किए जाएं।)
  4. काम किया!

यहाँ मेरा कोड है।

add_filter( 'nav_menu_link_attributes', 'wpse121123_contact_menu_atts', 10, 3 );
function wpse121123_contact_menu_atts( $atts, $item, $args )
{  
  $menu_target = 6;

  if ($item->ID == $menu_target) {
    $atts['data-letters'] = 'PROJECTS';
  }

  elseif ($item->ID == 7) {
    $atts['data-letters'] = 'RESUME';
  }
  elseif ($item->ID == 8) {
    $atts['data-letters'] = 'ARTWORKS';
  }
  elseif ($item->ID == 9) {
    $atts['data-letters'] = 'HELLO!';
  }
  return $atts;
}

आशा है कि यह आपकी मदद करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.