Advertisement
  1. Web Design
  2. UX/UI
  3. Navigation

نصيحة سريعة: تسمية BEM و مرشحات "WordPress" للتنقل

Scroll to top
Read Time: 5 min

() translation by (you can also view the original English article)

يعد الحفاظ على CSS أمرًا صعبًا ، خاصة في المشروعات الكبيرة التي تعمل مع فريق. يمكن أن تساعد اصطلاحات التسمية في جعل CSS أكثر قابلية للقراءة وسهولة في الصيانة. في هذه النصيحة السريعة ، سنلقي نظرة على كيفية استخدام منهجية تسمية BEM (Block Element Modifier) ​​في WordPress.

أنظمة إدارة المحتوى مثل الفئات الافتراضية لمخرجات "WordPress" في ترميز الواجهة الأمامية. في WordPress هناك الكثير من الفلاتر لتعديل هذه الفئات outputted.

إذا كنت ترغب في الغوص مباشرة في التعليمات البرمجية ، وهنا مثال على موضوع لي. يمكن العثور على الفلاتر في ملف "inc/functions-filters.php file".

ما هو BEM؟

"BEM" يعني Block Element Modifier (كتلة العنصر المعدل).

"BEM عبارة عن منهجية تساعدك على إنشاء مكونات قابلة لإعادة الاستخدام ومشاركة الشفرة في تطوير الواجهة الأمامية."
  • مقدمة لمنهجية BEM

سأستخدم ترميز التنقل كمثال:

  • "block" هو كيان مستقل ذو مغزى من تلقاء نفسه.
    • .menu { ... }
  • عنصر هو جزء من كتلة ويرتبط ارتباطًا ماديًا بمجموعته.
    • .menu__items { ... }
    • .menu__item { ... }
    • .menu__anchor { ... }
  • يقوم المبدل بتغيير مظهر أو عنصر الكتلة أو العنصر.
    • .menu--primary { ... }
    • .menu__anchor--button { ... }

قد يبدو ترميز التنقل الكامل كما يلي:

1
<nav class="menu menu--primary">
2
  <ul class="menu__items menu__items--primary">
3
     <li class="menu__item"><a class="menu__anchor">Link text</a></li>
4
     <li class="menu__item"><a class="menu__anchor">Link text</a></li>
5
     <li class="menu__item"><a class="menu__anchor">Link text</a></li>
6
     <li class="menu__item"><a class="menu__anchor menu__anchor--button">Link text</a></li>
7
  </ul>
8
</nav>

اصطلاحات التسمية مثل "BEM" تبقي SASS و CSS مسطحًا مع خصوصية منخفضة (وهو أمر لطيف دائمًا!).

في SASS ، يمكنك تصميم مثالنا على هذا النحو:

1
.menu {
2
  ...
3
  
4
  &__items {
5
     ...
6
  }
7
  
8
  &__item {
9
     ...
10
  }
11
  
12
  &__anchor {
13
     ...
14
  }
15
  
16
  &__anchor--button {
17
     ...
18
  }
19
}

ستبدو CSS المجمعة كما يلي:

1
.menu {
2
  ...
3
}
4
5
menu__items {
6
  
7
}
8
9
menu__item {
10
  
11
}
12
13
menu__anchor {
14
  
15
}
16
17
menu__anchor--button {
18
  
19
}

ولكن كيف يمكننا تغيير فئات التنقل المستخدمة في WordPress؟

استخدام فلاتر WordPress لتغيير فئات التنقل

باستخدام وظيفة wp_nav_menu () المضمنة في WordPress ، يمكنك تحديد فئات لعناصر <nav> و <ul>. فمثلا:

1
<nav class="menu menu--primary">
2
3
<?php
4
  wp_nav_menu( array(
5
      'theme_location' => 'primary',
6
      'container'          => '',
7
      'menu_class'      => 'menu__items menu__items--primary',
8
  ) );
9
?>
10
11
</nav>

لاحظ البراميتيرmenu_class لإضافة فئات مخصصة إلى عنصر <ul>. يحتوي WordPress أيضًا على فلاتر يدوية لعناصر <li> و <a>:

استخدام  nav_menu_css_class Filter

في هذا المثال ، تتم إعادة تعيين جميع الفئات الافتراضية من عنصر القائمة <li> وإضافة فئات مخصصة خاصة بنا. دعنا نضيف فصولنا النموذجية المسماة menu__item عن طريق إدراج هذا الفلتر في وظائفنا بphp:

1
function bemit_nav_menu_css_class( $classes, $item, $args, $depth ) {
2
3
  // Reset all default classes and start adding custom classes to array.

4
  $_classes = [ 'menu__item' ];
5
6
  // Return custom classes.

7
  return $_classes;
8
9
}
10
11
add_filter( 'nav_menu_css_class', 'bemit_nav_menu_css_class', 10, 4 );

هل لاحظت وجود 4 براميترز؟ دعنا نضيف menu__item -- primary class modifier  ، حيث primary هو موقع السمة. لهذا يمكننا استخدام براميتر $ args لإضافة موقع سمة. الآن يبدو فلترنا هكذا:

1
function bemit_nav_menu_css_class( $classes, $item, $args, $depth ) {
2
3
  // Reset all default classes and start adding custom classes to array.

4
  $_classes = [ 'menu__item' ];
5
6
  // Get theme location, fallback for `default`.

7
  $theme_location = $args->theme_location ? $args->theme_location : 'default';
8
9
   // Add theme location class.

10
  $_classes[] = 'menu__item--' . $theme_location;
11
12
  // Return custom classes.

13
  return $_classes;
14
15
}
16
17
add_filter( 'nav_menu_css_class', 'bemit_nav_menu_css_class', 10, 4 );

يمكن العثور على أمثلة التعليمات البرمجية الكاملة في سمة المثال الخاصة بي في ملف inc / functions-filters.php.

استخدام nav_menu_link_attributes filter

دعنا نضيف مثالنا menu__anchor إلى كل عنصر <a> في القائمة.

1
function bemit_nav_menu_link_attributes( $atts, $item, $args, $depth ) {
2
3
  // Start adding custom classes.

4
  $atts['class'] = 'menu__anchor';
5
6
  return $atts;
7
}
8
9
add_filter( 'nav_menu_link_attributes', 'bemit_nav_menu_link_attributes', 10, 4 );

إضافة فئات عن طريق منشئ القائمة

نضيف أحيانًا فئات مخصصة إلى عنصر القائمة <li> من واجهة المستخدم لأداة إنشاء القوائم.

Adding button class for menu itemAdding button class for menu itemAdding button class for menu item

للحفاظ على CSS ثابتًا ، دعنا نضيف تصنيف menu__anchor--button إلى عنصر <a>  حيث توجد كلاس ال button:

1
function bemit_nav_menu_link_attributes( $atts, $item, $args, $depth ) {
2
3
  // Start adding custom classes.

4
  $atts['class'] = 'menu__anchor';
5
6
  // Add `menu__anchor--button` when there is `button` class in `<li>` element.

7
  if ( in_array( 'button', $item->classes, true ) ) {
8
9
       $atts['class'] .= ' menu__anchor--button';
10
11
   }
12
13
return $atts;
14
15
}
16
17
add_filter( 'nav_menu_link_attributes', 'bemit_nav_menu_link_attributes', 10, 4 );

يمكننا الآن استهداف مستوى واحد من CSS مباشرةً باستخدام .menu__anchor - button {...}. في العرض التوضيحي الخاص بك سترى عنصر القائمة واحد على غرار زر ، استهدفت دون الحاجة إلى الغوص في "rabbit’s warren" .

Navigation with call to action menu itemNavigation with call to action menu itemNavigation with call to action menu item

الصفحات الفرعية للتنقل

إذا كنت تستخدم wp_list_pages () لجلب الصفحات الفرعية ، فهناك عوامل تصفية مماثلة متاحة:

في العرض التوضيحي هناك دالة bemit_sub_pages_navigation () تسرد الصفحات الفرعية في الشريط الجانبي. تحقق من النتيجة النهائية من موقع العرض.

الاستنتاج!

كما رأيت، فقد لا تحتاج إلى أداة Walker مخصصة للتنقل إذا كنت تجري تغييرات أصغر. هناك الكثير من الفلاتر حولها.

مع ذلك ، ليس من السهل تعديل كل العلامات. على سبيل المثال ، لا توفر وظائف ترقيم الصفحات مثل the_posts_pagination () فلاتر جيدة في الوقت الحالي. لكن هذا موضوع تعليمي آخر بالكامل.

آمل أن تجد هذه النصيحة السريعة حول فلاتر التنقل مفيدة!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.