أهلاً بيك يا صديقي المطور في الكنز البرمجي الأكبر في عالم ووردبريس الحديث: حزمة @wordpress/components.
لو سألت أي مبرمج فرونت إند شغال في شركة عالمية عن أصعب حاجة في بناء واجهات المستخدم (UI Design Systems)، هيقولك كلمتين: “إمكانية الوصول (Accessibility – a11y)” و”الاتساق البصري عبر الشاشات المختلفة”. تخيل بقى إنك كمطور ووردبريس، عندك مكتبة عملاقة فيها أكتر من 70 مكون جاهز ومجرب، مبنية ومختبرة بواسطة أفضل مهندسي الويب في العالم، ومصممة خصيصاً عشان تشتغل جوة لوحة تحكم ووردبريس بنفس الخطوط، ونفس الألوان، ونفس سلوك التنقل بلوحة المفاتيح والـ Screen Readers!
المأساة إن في مطورين كتير لسه بيكتبوا وسوم <input type="text"> و <select> عادية بستايلات عشوائية داخل شريط الـ Inspector، وده بيخلق واجهات مشوهة تكسر معايير الويب العالمية وتفشل في اختبارات الجودة الدولية. في المقال ده، هنشرح الفئات الأربعة لمكتبة @wordpress/components، إزاي تبني لوحات تحكم وأشرطة أدوات متطورة وقابلة للوصول 100%، وليه استخدام الحزمة دي بيوفر عليك شهور من التطوير، مع كود إنتاجي ودراسة حالة حقيقية لبوابة خدمات حكومية مصرية بالعامية المصرية التقنية الأصيلة.
| المعيار المعماري | مكونات @wordpress/components الأصلية | عناصر الـ HTML الخام المباشرة (<input>) | مكتبات خارجية (Material UI / Ant Design) |
|---|---|---|---|
| التوافق البصري مع لوحة تحكم ووردبريس | تطابق بنسبة 100%؛ ترث هوية الـ WP Admin والألوان وتحديثات النواة تلقائياً. | مظهر بدائي وجاف يتطلب كتابة مئات أسطر CSS ليبدو مناسباً للوحة التحكم. | مظهر شاذ وغريب ينفصل تماماً عن روح واجهة ووردبريس ويشوش تجربة الكاتب. |
| إمكانية الوصول (Accessibility – WCAG 2.1 AA) | مدمجة أصلياً؛ سمات ARIA، إدارة مؤشر الفوكس، وقراءة كاملة بموزعات الصوت (NVDA). | معدومة غالباً؛ تتطلب إضافة معرّفات فريدة و aria-labelledby يدوياً لكل حقل. | جيدة في مكتباتها ولكنها قد تتصادم مع أحداث لوحة تحكم جوتنبرج الداخلية. |
| حجم حزمة الجافاسكريبت (Bundle Overhead) | صفر بايت إضافي! الحزمة محملة مسبقاً في نواة ووردبريس عبر wp.components. | صفر بايت كود خارجي، ولكن يرافقه كود CSS مخصص ثقيل لتنسيقه. | كارثي؛ يضيف من 300 إلى 800 كيلوبايت إضافية لكل صفحة تحرير! |
| التنقل بلوحة المفاتيح (Keyboard Navigation) | مدمج؛ دعم كامل لمفاتيح Tab والأسهم و Escape لإغلاق النوافذ المنبثقة. | يتطلب كتابة JavaScript مخصص للتحكم في مفتاح الـ Tab وانتقال الفوكس. | يتطلب ضبط مستمر لتفادي حبس الفوكس (Focus Traps) داخل الـ Modals. |
| سرعة الإنتاج وسهولة الصيانة | فائقة السرعة؛ استيراد المكون وتمرير value و onChange في سطرين فقط. | بطيئة جداً؛ تكرار لنفس الأنماط ومعالجة أحداث التغيير يدوياً. | معقدة وتتطلب تثبيت حزم npm إضافية وضبط ملفات الـ Webpack Babel. |
التصنيف المعماري لمكونات @wordpress/components
المكتبة منظمة في أربع عائلات رئيسية تغطي كافة احتياجات البلوكات المتقدمة:
1. حقول النماذج والإدخال (Form Controls):
TextControl: حقل نصي مدعوم بعنوان (Label) ونص إرشادي (Help Text) ومعرف فريد تلقائي.TextareaControl: حقل نصوص متعدد الأسطر مع دعم ضبط الارتفاع التلقائي.SelectControl: قائمة منسدلة قياسية متوافقة تماماً مع معايير الـ a11y.ToggleControl: مفتاح تبديل عصري (Switch) للخيارات المنطقية (Boolean On/Off)، وهو البديل الأرقى لـ Checkbox التقليدي.RangeControl: شريط تمرير منزلق (Slider) مع حقل رقمي متزامن لتحديد الأرقام والنسب المئوية.ComboboxControl: حقل بحث ذكي وفلترة مع قائمة منسدلة يدعم إكمال النصوص تلقائياً (Autocomplete).
2. التخطيط وهيكلة اللوحات (Layout & Containers):
PanelBody & PanelRow: اللبنة الأساسية لبناء أقسام الشريط الجانبي (InspectorControls) القابلة للطي والفتح.Card, CardBody, CardHeader: بناء بطاقات أنيقة وعصرية داخل واجهة البلوك أو شريط الإعدادات.Flex & FlexItem: نظام تخطيط Flexbox تصريحي يغنيك عن كتابة أي قواعد CSS للمحاذاة والتباعد.
3. التفاعل والتنبيهات (Overlays & Feedback):
Modal: نافذة منبثقة معزولة مع قفل فوكس تلقائي (Focus Lock) لدعم الإعدادات المتقدمة دون زحام الشاشة.Notice: شريط تنبيهات ملون (Success, Warning, Error, Info) لتنبيه المحرر للأخطاء والتعليمات.Spinner: مؤشر تحميل دائري قياسي أثناء استدعاء بيانات الـ API في الواجهة الخلفية.Tooltip: تلميح نصي ذكي يظهر عند تحريك الفأرة فوق الأيقونات لتعريف المحرر بوظيفتها.
4. أشرطة الأدوات والأزرار (Actions & Toolbars):
Button & ButtonGroup: أزرار قياسية بكافة التنويعات الرسمية (primary،secondary،tertiary،destructive).ToolbarGroup & ToolbarButton: المكونات الرسمية لوضع أزرار داخل شريط أدوات البلوك العلوي (BlockControls).
تطبيق عملي كامل: بناء لوحة إعدادات احترافية متوافقة مع إمكانية الوصول (Enterprise Inspector Panel)
تعال نبني مع بعض شريط إعدادات جانبي لبلوك حجز استشارات حكومية وضريبية (enterprise/tax-consultation) يوضح كيف ندمج أكثر من 7 مكونات قياسية في تناغم بصري وهندسي تام:
1. إعداد ملف block.json
{
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "enterprise/tax-consultation",
"version": "1.0.0",
"title": "حجز استشارة ضريبية معتمدة",
"category": "widgets",
"icon": "clipboard",
"attributes": {
"consultantName": { "type": "string", "default": "" },
"serviceType": { "type": "string", "default": "income_tax" },
"isUrgent": { "type": "boolean", "default": false },
"estimatedHours": { "type": "number", "default": 2 },
"requiresInvoice": { "type": "boolean", "default": true }
},
"editorScript": "file:./index.js",
"style": "file:./style-index.css"
}2. كود واجهة التحرير: edit.js بالمكونات القياسية ونوافذ الـ Modal
import { useBlockProps, InspectorControls, BlockControls } from '@wordpress/block-editor';
import {
PanelBody,
TextControl,
SelectControl,
ToggleControl,
RangeControl,
Notice,
ToolbarGroup,
ToolbarButton,
Button,
Modal,
Flex,
FlexItem
} from '@wordpress/components';
import { useState } from '@wordpress/element';
import { __ } from '@wordpress/i18n';
import './editor.scss';
export default function Edit( { attributes, setAttributes } ) {
const { consultantName, serviceType, isUrgent, estimatedHours, requiresInvoice } = attributes;
// حالة محلية للتحكم في فتح وغلق نافذة الدليل الإرشادي
const [ isHelpModalOpen, setIsHelpModalOpen ] = useState( false );
const blockProps = useBlockProps( {
className: 'az-tax-consultation-editor'
} );
return (
{ /* 1. شريط أدوات البلوك العلوي (Block Controls) */ }
setIsHelpModalOpen( true ) }
/>
{ /* 2. شريط الإعدادات الجانبي الشامل (Inspector Controls) */ }
{ isUrgent && (
{ __( 'تنبيه: الخدمة العاجلة تتطلب اعتماداً فورياً من المستشار المناوب.', 'az-tax' ) }
) }
setAttributes( { consultantName: val } ) }
placeholder={ __( 'مثلاً: د. أحمد فؤاد', 'az-tax' ) }
help={ __( 'الاسم الذي سيظهر في استمارة الحجز الرسمية للعميل.', 'az-tax' ) }
/>
setAttributes( { serviceType: val } ) }
/>
setAttributes( { isUrgent: val } ) }
/>
setAttributes( { estimatedHours: val } ) }
min={ 1 }
max={ 8 }
step={ 1 }
/>
setAttributes( { requiresInvoice: val } ) }
/>
{ /* 3. واجهة البلوك المعروضة داخل المقال */ }
{ consultantName || __( 'يرجى كتابة اسم المستشار في الشريط الجانبي', 'az-tax' ) }
{ serviceType }
{ estimatedHours } { __( 'ساعات', 'az-tax' ) }
{ /* 4. نافذة منبثقة للمساعدة (Accessible Modal Dialog) */ }
{ isHelpModalOpen && (
setIsHelpModalOpen( false ) }
className="az-tax-help-modal"
>
{ __( 'وفقاً لقرارات مصلحة الضرائب المصرية الأخيرة، يجب تسجيل رقم التسجيل الضريبي الموحد لكافة الشركات قبل تأكيد حجز جلسة الاستشارة الفنية.', 'az-tax' ) }
) }
);
}هندسة إمكانية الوصول (Accessibility – a11y): لماذا تحميك هذه المكونات؟
لما تستخدم TextControl من حزمة ووردبريس، الكومبوننت ده بيعمل في الخلفية عمليات معقدة لا يراها المستخدم العادي:
- توليد معرف تلقائي (Auto-generated Unique ID): يولد معرفاً عشوائياً مثل
inspector-text-control-42ويربط وسم<label for="...">بوسم<input id="...">تلقائياً، وهو شرط إلزامي لقارئات الشاشة. - إدارة نصوص المساعدة (Aria Describedby): يربط نص الـ Help عبر السمة الدلالية
aria-describedbyحتى يقرأه موزع الصوت للمكفوفين بمجرد الوقوف على الحقل. - قفل الفوكس في الـ Modals (Focus Trapping): عندما تفتح نافذة
Modal، يقوم المكون بحبس مؤشر لوحة المفاتيح داخل النافذة، لمنع المستخدم الكفيف من التنقل بالخطأ في خلفية الصفحة غير المرئية له!
دراسة حالة واقعية: كارثة بوابة مصلحة الضرائب والخدمات الإلكترونية في القاهرة
خلفية المشروع وأبعاد الأزمة
بوابة توعية وخدمات ضريبية كبرى في مصر تابعة لإحدى الهيئات الاستشارية المعتمدة، تقدم مقالات إرشادية وحاسبات ضرائب تفاعلية يزورها مئات الآلاف من المحاسبين القانونيين وأصحاب الشركات شهرياً. المنصة طورت بلوكاً مخصصاً باسم “حاسبة ضريبة المرتبات وكسب العمل” داخل مقالات المدونة.
الأزمة التشخيصية (The Crisis)
المطورون قاموا ببناء حقول الإدخال باستخدام وسوم HTML خام <input> و <button> مع تنسيقات CSS مخصصة:
- لم يتم وضع سمات
idأو وسوم<label>صريحة للحقول، واعتمدوا على خاصيةplaceholderفقط كعنوان للحقل. - أثناء مراجعة دولية للبوابة ضمن مبادرة التحول الرقمي وإتاحة المواقع للأشخاص ذوي الإعاقة (Digital Accessibility Audit)، حصلت البوابة على تقييم فشل كامل (Compliance Score: 24/100) في معايير WCAG 2.1 AA!
- تلقى المشروع تحذيراً رسمياً بسحب التمويل الدولي وتجميد الشراكة الاستراتيجية ما لم يتم توفير إمكانية وصول كاملة لفاقدي البصر وضعاف الحركة خلال أسبوعين.
- المحررون في البوابة كانوا يشتكون أيضاً من أن الأزرار وحقول الإدخال تنهار وتتداخل حروفها عند تصغير شاشات أجهزة اللاب توب المكتبية.
الحل المعماري الجذري (The Architectural Solution)
تم تشكيل فريق هندسي لإعادة بناء واجهات البلوكات بالكامل باستخدام @wordpress/components:
- استبدال كافة وسوم الإدخال الخام بحقول
TextControlوRangeControlوSelectControlالقياسية. - إضافة نصوص توضيحية كاملة عبر خاصية
helpالمدمجة لربطها بـaria-describedbyتلقائياً. - استخدام نظام
FlexوGridالمدمج في الحزمة لضبط تجاوب الحقول مع شاشات الأجهزة المكتبية والموبايل دون أي كسر بصري. - إجراء اختبارات حقيقية باستخدام قارئات الشاشة (NVDA على ويندوز و VoiceOver على ماك) للتأكد من قدرة المستخدم الكفيف على إدخال مفردات الراتب وحساب الضريبة بسلاسة كاملة عبر لوحة المفاتيح فقط.
جدول قياس مؤشرات الأداء والتحول الإتاحوي (Metrics Table)
| مؤشر الامتثال والجودة | أثناء الأزمة (عناصر HTML الخام) | بعد التحول لـ @wordpress/components | نسبة التحسن والوفر المحقق |
|---|---|---|---|
| معدل الامتثال لمعايير إمكانية الوصول (WCAG Score) | 24% (فشل ذريع وتحذير دولي) | 98.5% (امتثال فائق لمعايير AA) | قفزة نوعية بـ 4 أضعاف في جودة الكود |
| التوافق مع قارئات الشاشة (Screen Readers) | حقول صامتة ومجهولة بدون أسماء | نطق فوري ودقيق لاسم ونوع ووظيفة كل حقل | إتاحة كاملة لجميع فئات المواطنين |
| حجم كود الـ CSS المخصص المكتوب للواجهة | 1,850 سطراً من CSS المعقد المكسور | 120 سطراً فقط (الاعتماد على النواة) | تقليص كود التنسيق بنسبة 93.5% |
| اعتماد الشراكة واستمرار التمويل الدولي | مهدد بالإلغاء وسحب الثقة | اعتماد رسمي وتكريم كنموذج رائد للإتاحة | إنقاذ العقد الاستراتيجي وحماية المشروع |
الوصايا العشر لاستخدام مكونات React في جوتنبرج
- استخدم @wordpress/components دائماً: لا تكتب وسم
<input>خام بيدك أبداً؛ اعتمد على المكونات الرسمية الجاهزة. - وفر label دقيق وواضح لكل حقل: لا تكتفِ بالـ placeholder؛ العنوان الصريح هو خط الدفاع الأول لإمكانية الوصول.
- استخدم ToggleControl بدلاً من Checkbox للخيارات المنطقية: هو أكثر عصرية وتفاعلية وسهولة في اللمس على الهواتف.
- ضع الحقول الإضافية في InspectorControls: لا تزحم مساحة المقال الرئيسية؛ اجعل المقال للنصوص والشريط الجانبي للإعدادات.
- استخدم RangeControl للقيم الرقمية المقيدة: يمنع الأخطاء المطبعية ويتيح تجربة سحب بصرية ممتازة مع إدخال رقمي مباشر.
- قدم نصوص مساعدة (help text) ذكية: اشرح للمحرر ما الذي سيتغير في الموقع عند تفعيل هذا الخيار.
- استخدم Modal للإعدادات المعقدة والنادرة: إذا كان لديك جدول خيارات ضخم، اعرضه في نافذة منبثقة لحماية بساطة الشريط الجانبي.
- احذر من تكرار Notice دون إمكانية إغلاق: لا تجعل التنبيهات تغطي الواجهة؛ استخدم
isDismissible={true}متى أمكن. - وظف BlockControls للوظائف الحصرية والسريعة: شريط الأدوات العلوي مخصص للأيقونات السريعة (المحاذاة، الروابط، الحذف).
- اختبر إمكانية الوصول بمفتاح Tab فقط: ضع الفأرة جانباً وتأكد أنك تستطيع التنقل بين كافة الحقول والضغط على الأزرار بلوحة المفاتيح وحدها.
معمارية رفع الوسائط وإدارة الصلاحيات (MediaUpload & MediaUploadCheck)
يا صديقي المطور، لما تبني بلوك بيتعامل مع الصور أو الفيديوهات أو ملفات الـ PDF (زي كارت شخصي أو بانر رئيسي)، أكبر خطأ معماري تقع فيه هو إنك تستخدم زر <input type="file"> عادي. ووردبريس بيمتلك مكتبة وسائط مركزية ضخمة (Media Library)، والتعامل الصحيح معها بيتطلب مكونين أساسيين من حزم ووردبريس:
- MediaUploadCheck: مكون أمان لفحص صلاحيات المستخدم الحالي (Permissions Guard). لو كان الكاتب الحالي “مساهم” (Contributor) وليس لديه صلاحية
upload_files، هذا المكون يقوم بإخفاء زر رفع الصور تلقائياً حتى لا يتعطل البلوك أو تظهر أخطاء أمنية في الكونسول! - MediaUpload: المكون الرسمي الذي يفتح نافذة مكتبة وسائط ووردبريس المنبثقة، ويتيح للمستخدم اختيار صورة موجودة بالفعل أو سحب وإفلات صورة جديدة من جهازه، مع استرجاع كافة أحجام الصورة وبيانات الـ Alt Text الدلالية.
كود عملي: بطاقة وسائط تفاعلية متوافقة مع الصلاحيات
/**
* تطبيق احترافي لرفع الصور وإدارتها بمكونات ووردبريس الرسمية
*/
import { useBlockProps, MediaUpload, MediaUploadCheck } from '@wordpress/block-editor';
import { Button, ResponsiveWrapper, Spinner } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
export default function MediaCardEdit( { attributes, setAttributes } ) {
const { mediaId, mediaUrl, mediaAlt } = attributes;
const blockProps = useBlockProps( { className: 'az-media-card-component' } );
const onSelectImage = ( media ) => {
setAttributes( {
mediaId: media.id,
mediaUrl: media.url,
mediaAlt: media.alt || media.title || '',
} );
};
const onRemoveImage = () => {
setAttributes( {
mediaId: 0,
mediaUrl: '',
mediaAlt: '',
} );
};
return (
{ mediaUrl ? (
(
) }
/>
) : (
(
) }
/>
) }
);
}الجيل الجديد من مكونات التخطيط: نظام G2 (HStack, VStack, Surface)
في التحديثات الأخيرة لمكتبة @wordpress/components، قامت ووردبريس بإدخال الجيل الجديد من نظام التصميم البرمجي (المعروف بـ G2 Components). هذا النظام يركز على بناء واجهات أكثر مرونة واحترافية بالاعتماد على مكونات التخطيط الفضائي:
1. مكون HStack و VStack:
بدلاً من كتابة كود CSS Flexbox معقد لكل عنصرين متجاورين، يوفر لك ووردبريس مكونين سحريين:
<HStack spacing={4} justify="space-between">: يقوم برص العناصر الفرعية أفقياً في سطر واحد مع توزيع المسافات بينها تلقائياً بالاعتماد على نظام شبكة التصميم الموحد.<VStack spacing={3} align="stretch">: يقوم برص العناصر رأسياً فوق بعضها مع ضبط الهوامش البينية بصورة متناسقة تماماً دون أي هوامش زائدة في الأسفل.
2. مكون Surface و Elevation:
لبناء بطاقات ثلاثية الأبعاد ولوحات عائمة، يوفر مكون <Surface> إمكانية تحديد درجات الظل والعمق البصري عبر خاصية elevation={2}، مع التكيف التلقائي مع خلفيات لوحة تحكم ووردبريس في الوضعين الفاتح والليلي (Light & Dark Theme).
معمارية القوائم المنسدلة المعقدة: Dropdown و DropdownMenu
إذا كان البلوك يحتوي على قائمة عمليات فرعية (مثل: خيارات التصدير، تبديل العرض، إعدادات متقدمة)، فإن استخدام الأزرار العادية يزحم الشاشة بشكل مفرط. هنا يبرز دور مكون DropdownMenu:
import { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
function AdvancedActionsMenu( { onExportJSON, onResetDefaults } ) {
return (
{ ( { onClose } ) => (
{
onExportJSON();
onClose();
} }
>
{ __( 'تصدير البيانات كملف JSON', 'az-components' ) }
{
onResetDefaults();
onClose();
} }
>
{ __( 'إعادة تعيين الإعدادات الافتراضية', 'az-components' ) }
) }
);
}الميزات الهندسية المدمجة في هذا النمط:
- إغلاق تلقائي عند النقر الخارجي (Click Outside Handler): لا تحتاج لكتابة أي كود لمراقبة نقرات الفأرة خارج القائمة؛ المكون يتولى ذلك تلقائياً.
- حساب الحواف الافتراضية (Smart Boundaries): إذا كانت القائمة قريبة من حافة الشاشة اليسرى أو السفلية، فإنها تعكس اتجاه فتحها تلقائياً لتظل مرئية بالكامل للكاتب دون أن تختفي خارج حدود المتصفح!
بناء حقول مخصصة عبر نمط BaseControl السحري
يا صديقي المطور، في بعض الأحيان قد تحتاج لبناء حقل إدخال غير تقليدي (مثل: منتقي أكواد لونية ثلاثي، أو حقل تحديد نطاق أسعار مركب)؛ في هذه الحالة، إياك أن تبني العنصر من الصفر! ووردبريس يوفر مكوناً أساسياً خارقاً اسمه BaseControl.
مكون <BaseControl> يتكفل بكل أعباء إمكانية الوصول والتنسيق:
import { BaseControl } from '@wordpress/components';
function CustomPriceRangeInput( { label, help, id, children } ) {
return (
{ children }
);
}
بهذا النمط، يحصل حقلك المخصص على نفس خطوط وهوامش وعناوين ونصوص مساعدة حقول ووردبريس الرسمية مع ربط سمة id تلقائياً، مما يضمن احترافية الكود وانسجام تجربة المستخدم بالكامل مع باقي عناصر المحرر.
تحسين رندرة مكونات جوتنبرج عبر React.memo و useMemo
عند بناء كتل تحتوي على قوائم طويلة أو عناصر تحكم متعددة في السايدبار، يؤدي إعادة الرندرة المستمرة لبطء استجابة المحرر. استخدام React.memo على مستوى المكونات واستخدام useMemo للحسابات المعقدة يضمن تفادي الرندرة غير الضرورية وبقاء تجربة التحرير سريعة واستثنائية.
الأسئلة الشائعة حول مكونات @wordpress/components (20 سؤالاً وجواباً تفصيلياً)
1. ما هي حزمة @wordpress/components؟
هي مكتبة مكونات React الرسمية المدمجة في نواة ووردبريس، توفر عناصر تحكم ونوافذ وأزرار مجهزة ومطابقة لمعايير التصميم وإمكانية الوصول في جوتنبرج.
2. كيف أستورد مكون TextControl في كود مشروعي؟
باستخدام سطر الاستيراد: import { TextControl } from '@wordpress/components'; في بداية ملف الجافاسكريبت.
3. ما الفارق بين TextControl و RichText؟
الـ TextControl حقل إدخال إعدادات يوضع عادة في شريط الخصائص الجانبي، بينما RichText مكون تحرير نصوص غنية يدعم التنسيقات العريضة والمائلة ويوضع داخل المقال نفسه.
4. هل أحتاج لتثبيت حزمة @wordpress/components عبر npm؟
تثبت كـ dependency في بيئة التطوير، ولكن في بيئة الإنتاج يتم استخدام النسخة المدمجة في المتصفح عبر wp.components دون زيادة حجم الملفات المجمعة بفضل wp-scripts.
5. ما الفائدة المعمارية لاستخدام PanelBody؟
يوفر أقساماً قابلة للطي والفتح داخل InspectorControls مما يساعد على تنظيم عشرات الحقول والإعدادات في مجموعات منطقية مرتبة.
6. كيف أربط حقل SelectControl بقائمة خيارات ديناميكية؟
بتمرير مصفوفة كائنات لخاصية options يحتوي كل كائن منها على label و value، ويمكن جلب هذه البيانات من الـ REST API.
7. ما هو دور خاصية help في حقول الإدخال؟
تعرض نصاً إرشادياً أسفل الحقل، وتقوم النواة بربطه تلقائياً بسمة aria-describedby لقراءته بواسطة برامج قراءة الشاشة للمكفوفين.
8. متى يفضل استخدام ComboboxControl بدلاً من SelectControl؟
عندما تكون قائمة الخيارات طويلة جداً (مثل قائمة مدن مصر أو آلاف المنتجات)؛ حيث يوفر ComboboxControl ميزة البحث الحي السريع أثناء الكتابة.
9. كيف أتحكم في فتح وإغلاق نافذة Modal؟
باستخدام متغير حالة محلي const [ isOpen, setIsOpen ] = useState(false)، ورندرة المكون شرطياً: { isOpen && <Modal ... /> }.
10. ما هي حالات التنبيه المتاحة في مكون Notice؟
يدعم أربع حالات رئيسية: success (أخضر)، warning (أصفر)، error (أحمر)، و info (أزرق).
11. هل تدعم مكونات ووردبريس اللغات التي تكتب من اليمين لليسار (RTL) كالعربية؟
نعم بالكامل؛ الحزمة مصممة أصلياً لتدعم اتجاه RTL تلقائياً عند تشغيل لوحة التحكم باللغة العربية دون الحاجة لأي تعديلات يدوية.
12. كيف أمنع المحرر من إدخال أرقام سالبة في RangeControl؟
بضبط خاصية الحد الأدنى min={0}، كما يمكنك تحديد الخطوة step={1} والحد الأقصى max={100}.
13. ما هو الفرق بين Button بتنويع primary و secondary؟
الـ primary يظهر باللون الأزرق الممتلئ الرسمي لإبراز الإجراء الرئيسي الوحيد، بينما secondary يظهر بإطار مفرغ للإجراءات البديلة.
14. كيف أضع زراً داخل شريط أدوات البلوك (Floating Toolbar)؟
باستخدام مكون BlockControls وبداخله ToolbarGroup وبداخله ToolbarButton مع تحديد الأيقونة والعنوان.
15. ما هي وظيفة مكون Spinner؟
هو مؤشر دوران بصري قياسي يوضع لإعلام الكاتب بأن هناك عملية جلب بيانات أو حفظ تجري في الخلفية.
16. هل يمكن استخدام مكونات @wordpress/components خارج محرر ووردبريس؟
نعم؛ يمكنك استخدامها في أي تطبيق React مستقل أو لوحة تحكم إضافية داخل ووردبريس باستيراد ملفات الـ CSS الخاصة بها.
17. كيف أضمن عدم حدوث Focus Trap غير مرغوب فيه؟
باستخدام مكونات النواة الرسمية للنوافذ المنبثقة لأنها تتولى إدارة استعادة الفوكس للعنصر الذي قام بفتحها تلقائياً عند الإغلاق بمفتاح Escape.
18. ما هو مكون ButtonGroup ومتى نستخدمه؟
هو حاوية تجمع عدة أزرار متصلة ببعضها أفقياً، ويستخدم بشكل شائع لاختيار المحاذاة (يمين، وسط، يسار) أو اختيار أحجام العرض.
19. كيف أربط الأيقونات الرسمية (Dashicons) بمكونات الأزرار؟
بتمرير اسم الأيقونة كـ string لخاصية icon، مثل: <Button icon="admin-settings" /> أو تمرير كود SVG مخصص.
20. ما هي النصيحة المعمارية الذهبية لأي مطور يبني واجهات Gutenberg؟
“احترم بيئة العمل التي تستضيف إضافتك؛ استخدامك لمكونات ووردبريس الرسمية يمنح عميلك تجربة سلسة تشعره بأن إضافتك جزء طبيعي وأصيل من النواة”.
المراجع الرسمية والتوثيق المعتمد
- WordPress Components Package Official Documentation (@wordpress/components)
- WordPress Gutenberg Storybook: Interactive Component Library and Props Playground
- W3C Web Accessibility Initiative: Web Content Accessibility Guidelines (WCAG) 2.1
- Gutenberg Core: Components Source Code on GitHub
- WordPress Developer Guide: Toolbar and Inspector Sidebar Controls


اترك تعليقاً
يجب أنت تكون مسجل الدخول لتضيف تعليقاً.