it-swarm.asia

كيفية إضافة سمة بيانات إلى عنصر قائمة WordPress

أنا Twitter Bootstrap وأحتاج إلى إضافة بيانات toggle = "modal" إلى علامة ارتباط القائمة. عند البحث في معظم النتائج ، يمكنك الرجوع إلى قوائم Twitter Bootstrap المنسدلة ، لكن هذه القائمة لا تحتوي على قوائم منسدلة وأريد فقط إضافة سمة معينة.

بعد ذلك ، وجدت هذا: أضف سمات مخصصة لعناصر القائمة بدون مكون إضافي وهو أمر مفيد للغاية كما يظهر في WordPress 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;
}

وهذا يعمل مع ذلك كما هو متوقع يضيف السمة إلى كافة العلامات الموجودة في القائمة. لذلك أحاول معرفة كيفية استهداف عنصر قائمة واحد باستخدام # menu-item-7857 a أو هكذا.

هل يعرف أي شخص أين يمكنك العثور على مثال لاستهداف عنصر قائمة أو قادر على تحديد كيفية الاستناد إلى المعلومات الموجودة في مرجع API المرتبط أعلاه؟

ملاحظة ، لقد وجدت المثال التالي ، لكنه يستهدف فقط العناصر التي لديها أطفال لا تساعدهم ولكنها قد تكون في الاتجاه الصحيح:

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);

UPDATE - يبدو أن الإجابة الوحيدة أدناه تبدو وكأنها تعمل على شيء ما ، لكن من خلاله لم تتمكن من تحديد كيفية العثور فعليًا على الرقم لاستهداف ارتباطي المحدد وأين/كيفية إضافة هذا الشرطي في مثال عملي. أضاف تعليقًا لكنه لم يسمع. منذ حوالي 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

أفترض أن هناك حاجة إلى مزيد من الشفرة ولكن في حالة ضياع. كتذكير دون استخدام العبارة if ، إلا أنه يستهدف جميع الروابط بدلاً من الارتباط الواحد الذي أريد استهدافه.

12
cchiera

على وجه التحديد تحرير الشفرة التي قدمتها في السؤال الأصلي:

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;
}
31
guiniveretoo

تحتوي الوسيطة $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'] )

7
Rarst

أردت إضافة رسائل بيانات إلى القائمة المخصصة التي قمت بإنشائها في WordPress.

الخطوات التي اخترتها كانت:

  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;
}

آمل أن يساعدك هذا.

1
Anoop Anson

لماذا لا تتعامل مع هذه المشكلة من اتجاه مختلف؟ بدلا من محاولة لاستهداف عنصر القائمة مع معرف ==؟ التي قد تتغير في مرحلة ما (عنصر القائمة ، وليس المعرف) ، استخدم WP منطقة المسؤول لإضافة فئة مخصصة إلى عنصر القائمة الذي تريد استهدافه. ثم استخدم هذه الفئة في Javascript لتشغيل المعلومات التي تحتاجها:

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

بلدي جافا سكريبت ليست مضمونة. إذا كنت لا تستخدم jQuery ، فيمكنك تجربة هذا .

0
guiniveretoo