نصيحة سريعة: تسمية BEM و مرشحات "WordPress" للتنقل
() 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 عبارة عن منهجية تساعدك على إنشاء مكونات قابلة لإعادة الاستخدام ومشاركة الشفرة في تطوير الواجهة الأمامية."
سأستخدم ترميز التنقل كمثال:
- "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 لتطبيق الفئات لعنصر القائمة
<li>
. - nav_menu_link_attributes لتطبيق السمات لقائمة عنصر
<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>
من واجهة المستخدم لأداة إنشاء القوائم.



للحفاظ على 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" .



الصفحات الفرعية للتنقل
إذا كنت تستخدم wp_list_pages ()
لجلب الصفحات الفرعية ، فهناك عوامل تصفية مماثلة متاحة:
في العرض التوضيحي هناك دالة bemit_sub_pages_navigation () تسرد الصفحات الفرعية في الشريط الجانبي. تحقق من النتيجة النهائية من موقع العرض.
الاستنتاج!
كما رأيت، فقد لا تحتاج إلى أداة Walker مخصصة للتنقل إذا كنت تجري تغييرات أصغر. هناك الكثير من الفلاتر حولها.
مع ذلك ، ليس من السهل تعديل كل العلامات. على سبيل المثال ، لا توفر وظائف ترقيم الصفحات مثل the_posts_pagination ()
فلاتر جيدة في الوقت الحالي. لكن هذا موضوع تعليمي آخر بالكامل.
آمل أن تجد هذه النصيحة السريعة حول فلاتر التنقل مفيدة!