কীভাবে কোনও ওয়ার্ডপ্রেস মেনু আইটেমটিতে ডেটা অ্যাট্রিবিউট যুক্ত করা যায়


17

আমি টুইটার বুটস্ট্র্যাপ এবং মেনু লিঙ্কের ট্যাগটিতে ডেটা-টগল = "মডেল" বৈশিষ্ট্য যুক্ত করতে হবে। টুইটার বুটস্ট্র্যাপ ড্রপডাউন মেনুগুলির জন্য হাঁটতে বেশিরভাগ ফলাফলের অনুসন্ধানের পরে তবে এই মেনুটির কোনও ড্রপডাউন নেই এবং আমার কেবলমাত্র বিশেষ বৈশিষ্ট্য যুক্ত করতে হবে।

পরবর্তী আমি এটি খুঁজে পেলাম: প্লাগইন ছাড়াই মেনু আইটেমগুলিতে কাস্টম বৈশিষ্ট্য যুক্ত করুন যা এটি ওয়ার্ডপ্রেস ৩.6+-এ প্রদর্শিত হিসাবে খুব সহায়ক we+ আমাদের আর দীর্ঘ জটিল ওয়াকারগুলি করতে হবে না এবং এর পরিবর্তে এটি ব্যবহার করতে পারবেন: http://codex.wordpress.org/plugin_API / Filter_Reference / nav_menu_link_attributes

তবে এই চলমান হিসাবে যে এপিআই রেফারেন্সটি বেশ খালি এবং কোনও উদাহরণ দেয় না এবং এটি নতুন যেহেতু গুগলে এর খুব কম উল্লেখ রয়েছে re

আমি প্রথমে চেষ্টা করেছিলাম:

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 নম্বরটি দেখতে পাচ্ছি তাই ভাবছি এটিই আমার লক্ষ্য করা উচিত number

তবে যখন আমি উদাহরণ হিসাবে চেষ্টা করি:

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 ভেরিয়েবলের মধ্যে toোকাতে চাই that এমন কিছু // ect আইটেমটি পরিদর্শন করুন যদি ($ আইটেম-> আইডি == $ মেনু_মার্জ) {$ অ্যাটস ['ডেটা-টগল'] = 'মডেল - <? php the_id ();?>'; } প্রত্যাবর্তন $ atts; আপনি কি আমাকে সাহায্য করতে পারেন আমি কীভাবে _ atts ভেরিয়েবলের মধ্যে_আইডি .োকাতে পারি। ধন্যবাদ
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 ঘন্টা অপেক্ষা করতে হবে।
চচ্চিরা

সাহায্য করতে পারলে খুশি! : ডি
জেন

আমি ফ্যান্টাস্টিকাল-এ একটি অনুস্মারক রেখেছি যাতে আগামীকাল আমি অনুগ্রহটি পুরষ্কার ভুলে যাব না।
চচ্চিরা

লক্ষ্য হিসাবে যদি আপনার বেশ কয়েকটি মেনু আইটেম থাকে?
এরিক মিটজানস

ডেটা-টগল মান আলাদা হলে স্টেটমেন্টটি একাধিক ব্যবহার করুন। অথবা আপনি অ্যারে কীতে আইডি সংরক্ষণ করতে পারেন (সেগুলি অনন্য বলে বিবেচনা করে) এবং মডেলের নাম অ্যারের মান হিসাবে। তারপরে যদি বিবৃতিটি দেখুনarray_key_exists()
সিসির

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 " এর মতোই the আমার লিঙ্কটিতে আমি ডেটা-অ্যাট্রিবিউট যুক্ত করতে চাইছি অন্য কোনও ওয়ার্ডপ্রেস url এ যায় না বরং href = "# কন্টাক্টফর্ম"। উপরে আপনার উদাহরণের ভিত্তিতে আমি আরও গুগল করেছি এবং ইকো ভার_এক্সপোর্ট চালানোর চেষ্টা করেছি ($ গ্লোবালস ['পোস্ট'], সত্য); তবে আমি যখন অদৃশ্য মেনু আইটেমটির কাছাকাছি দেখি তখন আমি কোনও অনন্য আইডি দেখতে পাই না। আপনি কি স্পষ্ট করতে পারেন? বা "যদি (2220 == $ আইটেম ['আইডি']) তে" অগ্রিম ধন্যবাদ!
চচ্চিরা

2
আপনি যে ত্রুটিটি দেখছেন তা $itemহ'ল একটি বস্তু, অ্যারে নয়; পরিবর্তন $item['ID']করার জন্য $item->ID
জেন

1

আপনি কেন অন্য সমস্যার দিক থেকে এই সমস্যার দিকে যান না? আইডি == দিয়ে মেনু আইটেমটি টার্গেট করার চেষ্টা করার চেয়ে? যা কোনও পর্যায়ে পরিবর্তিত হতে পারে (মেনু আইটেমটি নয়, আইডি নয়), আপনি টার্গেট করতে চান মেনু আইটেমটিতে একটি কাস্টম ক্লাস যুক্ত করতে 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;
}

আশা করি এটি আপনাকে সহায়তা করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.