⏱️ جاري الحساب…

شرح theme.json في ووردبريس: إعدادات التصميم والألوان والتخطيط

رسم مفاهيمي يوضح شرح theme.json ضمن سلسلة تطوير ووردبريس
📋 فهرس محتويات المقال (اضغط للتنقل السريع) ▾

أهلاً بك يا بطل في المحطة رقم 95 من سلسلتنا المعمارية الشاملة في ووردبريس! لو كنت مطور ووردبريس مخضرم، أكيد فاكر المعاناة القديمة: كنت عشان تعمل لوحة ألوان للثيم، تروح تعرفها في مصفوفة PHP عبر add_theme_support('editor-color-palette', ...)، وبعدين تروح تكتب نفس الألوان دي يدوي في ملف style.css كفئات مثل .has-primary-color، وبعدين تكرر نفس الكلام للـ font sizes ومقاسات الخطوط! لو غيرت كود لون واحد، كنت بتلف على خمس ملفات تعدل فيها وتدعي ربنا ما تكونش نسيت حاجة!

كل هذه الفوضى العارمة انتهت رسمياً للأبد مع ظهور ملف theme.json. هذا الملف البسيط في شكله، الجبار في بنيته المعمارية، هو العقل المدبر لنظام التصميم العالمي (Global Design System) في ووردبريس الحديث. في هذا المقال الشامل، هنشرح theme.json من الألف إلى الياء، هنفهم الفروق الدقيقة بين قسم settings وقسم styles، إزاي الكور بيولد الـ CSS Custom Properties في أجزاء من الثانية، إزاي تقيد صلاحيات المحررين وتمنعهم من تدمير الهوية البصرية، وهنستعرض كود حقيقي ودراسة حالة عملية من قلب السوق المصري!

المفهوم المعماري: ما هو ملف theme.json ولماذا غير قواعد اللعبة؟

ملف theme.json هو ملف تكوين تصريحي (Declarative Configuration File) يوضع في المجلد الجذري للقالب (سواء كان Block Theme بالكامل أو حتى Classic Theme يتبنى نظام الكتل). بدلاً من كتابة كود إجرائي (Imperative Code) في PHP لإخبار ووردبريس بما تريده، أنت تعلن في هذا الملف عن نظام التصميم الخاص بك كـ Data Structure نقية.

عندما يقلع ووردبريس، يقوم صنف مخصص في النواة اسمه WP_Theme_JSON_Processor و WP_Theme_JSON_Resolver بقراءة ملفات الـ JSON المختلفة (ملف الكور الافتراضي، ثم ملف القالب الأب، ثم ملف القالب الابن، ثم تخصيصات المستخدم من قاعدة البيانات)، ويدمجها وفق خوارزمية وراثة دقيقة (Inheritance & Merge Hierarchy). الناتج النهائي هو:

  • توليد مئات من متغيرات CSS في الـ :root وفي كتل محددة.
  • تفعيل أو تعطيل أدوات وميزات محددة في الشريط الجانبي لمحرر جوتنبرج (Inspector Controls).
  • تطبيق التنسيقات العامة على عناصر الـ HTML الأساسية (Body, Headings, Links, Buttons).

تطور الإصدارات: من Schema Version 2 إلى Version 3 في WordPress 6.6+

بدأ ملف theme.json بإصدار version: 1 في المراحل التجريبية الأولى، ثم استقر مع ووردبريس 5.8 في version: 2. ومع إطلاق ووردبريس 6.6، تم تقديم version: 3 كمعيار رسمي حديث يقدم تحسينات معمارية فائقة:

  • توحيد تباعد الشبكات (Grid Spacing): إمكانية ضبط خصائص الـ Grid Layout والتباعد بين الأعمدة بشكل أكثر دقة داخل قسم layout.
  • دعم لوحات الألوان والخطوط الفرعية (Section Styles): القدرة على تطبيق نظام ألوان وتنسيقات كاملة على أقسام معينة داخل الصفحة دون التأثير على الموقع بأكمله.
  • إلغاء بعض المسميات القديمة: تحسين أسماء الخصائص البرمجية لتكون أكثر اتساقاً مع معايير CSS الحديثة وأسهل في التحقق عبر الـ JSON Schema.

التشريح الثنائي الأساسي: الفرق الحاسم بين Settings و Styles

لو سألت أي مطور بيغلط في theme.json، هتلاقي السبب الأكبر إنه بيتلخبط بين settings و styles. القاعدة الذهبية هنا سهلة جداً وبسيطة:

  • قسم Settings (الإعدادات والأدوات والخيارات): هنا أنت تحدد ما هو المتاح للمحرر وما هي الأدوات المفعلة. أنت بتعرف لوحة الألوان (القيم المتاحة)، مقاسات الخطوط، التباعد، وهل تظهر أداة الـ Border في الشريط الجانبي أم تختفي. هذا القسم لا يطبق لوناً على عنصر محدد، بل يتيح الألوان للاختيار ويولد متغيرات CSS لها!
  • قسم Styles (التنسيقات الفعلية المطبقة): هنا أنت تحدد ما هو المطبق بالفعل على الصفحة أو الكتل بشكل افتراضي. هنا تقول: “أنا عايز خلفية الـ body تكون كحلي داكن، ولون الروابط أخضر، وحجم الخط الأساسي 18 بكسل، وكتلة الاقتباس (core/quote) يكون لها إطار رمادي على اليمين”.

جدول المقارنة المعمارية: قسم Settings في مواجهة قسم Styles

وجه المقارنةقسم الإعدادات (Settings)قسم التنسيقات (Styles)
الهدف الأساسيتعريف الإمكانيات واللوحات (Presets) والتحكم في واجهة المحررتطبيق خصائص الـ CSS الافتراضية على عناصر الموقع وكتله
أمثلة شائعة على الخواصcolor.palette, typography.fontSizes, appearanceToolscolor.background, typography.fontSize, spacing.padding
التأثير على لوحة التحكميحدد الخيارات والمنزلقات (Sliders) والألوان المعروضة في السايدبارلا يغير واجهة السايدبار، بل يحدد القيم الافتراضية التي تظهر مختارة
إنتاج متغيرات CSSيولد متغيرات الـ Presets مثل: --wp--preset--color--primaryيولد كلاسات وتنسيقات تطبق تلك المتغيرات مثل: body { background-color: ... }
التحكم على مستوى الكتلةتفعيل أو قفل أدوات لكتلة معينة (مثل قفل الهوامش في كتل العناوين)تنسيق كتلة معينة مسبقاً (مثل إعطاء كتل الأزرار حواف دائرية 8px)

محرك توليد متغيرات CSS: كيف يحول ووردبريس الـ JSON إلى أنماط حية؟

هل تساءلت يوماً عن الصيغة الغريبة لمتغيرات ووردبريس مثل --wp--preset--color--emerald-500؟ ووردبريس يتبع خوارزمية صارمة مبنية على مسار المفاتيح (Key Path Resolution):

  1. البداية دائماً بالبادئة المزدوجة: --wp--
  2. ثم نوع التصنيف الفرعي: preset-- للخيارات المسبقة، أو custom-- للقيم الخاصة القديمة.
  3. ثم الخاصية: color-- أو spacing-- أو font-size-- أو font-family--.
  4. ثم الـ Slug الذي قمت بتحديده في الـ JSON: مثلاً primary.

النتيجة هي متغير قياسي: --wp--preset--color--primary. وعندما تريد الإشارة إلى هذا المتغير داخل قسم styles في نفس ملف الـ JSON، لا تكتب var(...) مباشرة، بل تستخدم الصيغة المعيارية لووردبريس: "color": "var:preset|color|primary"، وسيقوم الكور بتحويلها تلقائياً إلى صيغة المتصفح الصحيحة var(--wp--preset--color--primary) أثناء تصيير الصفحة!

كود عملي متكامل: ملف theme.json احترافي يدعم الفونت العربي وFluid Typography

إليك ملف theme.json كامل وجاهز للاستخدام في الإنتاج، معد خصيصاً للمواقع العربية المتطورة:


{
    "$schema": "https://schemas.wp.org/trunk/theme.json",
    "version": 3,
    "settings": {
        "appearanceTools": true,
        "layout": {
            "contentSize": "860px",
            "wideSize": "1280px"
        },
        "color": {
            "custom": false,
            "customDuotone": false,
            "customGradient": false,
            "palette": [
                {
                    "slug": "primary",
                    "color": "#0284c7",
                    "name": "أزرق سماوي قيادي"
                },
                {
                    "slug": "secondary",
                    "color": "#0f766e",
                    "name": "أخضر تركوازي مساند"
                },
                {
                    "slug": "dark-base",
                    "color": "#0f172a",
                    "name": "كحلي داكن للنصوص"
                },
                {
                    "slug": "light-surface",
                    "color": "#f8fafc",
                    "name": "رمادي فاتح للخلفيات"
                },
                {
                    "slug": "pure-white",
                    "color": "#ffffff",
                    "name": "أبيض ناصع"
                }
            ]
        },
        "typography": {
            "fluid": true,
            "fontFamilies": [
                {
                    "fontFamily": "Cairo, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",
                    "name": "Cairo Arabic",
                    "slug": "cairo",
                    "fontFace": [
                        {
                            "fontFamily": "Cairo",
                            "fontWeight": "400 700",
                            "fontStyle": "normal",
                            "fontDisplay": "swap",
                            "src": [ "file:./assets/fonts/cairo-variable.woff2" ]
                        }
                    ]
                }
            ],
            "fontSizes": [
                {
                    "name": "صغير",
                    "size": "0.875rem",
                    "slug": "small"
                },
                {
                    "name": "عادي",
                    "size": "1.125rem",
                    "slug": "medium",
                    "fluid": {
                        "min": "1rem",
                        "max": "1.125rem"
                    }
                },
                {
                    "name": "كبير",
                    "size": "1.5rem",
                    "slug": "large",
                    "fluid": {
                        "min": "1.25rem",
                        "max": "1.75rem"
                    }
                },
                {
                    "name": "عملاق للعناوين الرئيسية",
                    "size": "2.5rem",
                    "slug": "x-large",
                    "fluid": {
                        "min": "1.75rem",
                        "max": "3rem"
                    }
                }
            ]
        },
        "spacing": {
            "spacingScale": {
                "operator": "*",
                "increment": 1.5,
                "steps": 7,
                "mediumStep": 1.5,
                "unit": "rem"
            }
        }
    },
    "styles": {
        "color": {
            "background": "var:preset|color|light-surface",
            "text": "var:preset|color|dark-base"
        },
        "typography": {
            "fontFamily": "var:preset|font-family|cairo",
            "fontSize": "var:preset|font-size|medium",
            "lineHeight": "1.8"
        },
        "elements": {
            "link": {
                "color": {
                    "text": "var:preset|color|primary"
                },
                ":hover": {
                    "color": {
                        "text": "var:preset|color|secondary"
                    }
                }
            },
            "heading": {
                "typography": {
                    "fontWeight": "700",
                    "lineHeight": "1.3"
                },
                "color": {
                    "text": "var:preset|color|dark-base"
                }
            },
            "button": {
                "color": {
                    "background": "var:preset|color|primary",
                    "text": "var:preset|color|pure-white"
                },
                "border": {
                    "radius": "0.5rem"
                },
                "spacing": {
                    "padding": {
                        "top": "0.75rem",
                        "bottom": "0.75rem",
                        "left": "1.5rem",
                        "right": "1.5rem"
                    }
                }
            }
        },
        "blocks": {
            "core/quote": {
                "border": {
                    "right": {
                        "color": "var:preset|color|primary",
                        "style": "solid",
                        "width": "4px"
                    }
                },
                "spacing": {
                    "padding": {
                        "right": "1.5rem"
                    }
                }
            }
        }
    }
}

تقييد تجربة المحرر (Editor Curation): قفل الألوان والخطوط لحماية الهوية

أكبر كابوس يواجه وكالات التصميم والبرمجة هو أنك تسلم الموقع للعميل بعد أسابيع من ضبط الهوية البصرية، وتفاجأ بعد أسبوع إن كاتب المحتوى حاطط خلفية صفراء فاقعة وخط أحمر فوسفوري وحجم خط 70px في نص المقال!

عبر ملف theme.json، تقدر تتحكم بدقة مطلقة وتصنع ما يسمى بـ Curated Experience:

  • منع اختيار ألوان مخصصة: بضبط "custom": false في قسم color، يختفي منتقي الألوان اللوني (Color Picker) تماماً، ولا يتبقى أمام المحرر إلا الألوان الرسمية المعرفة في اللوحة فقط.
  • منع التدرجات والظلال العشوائية: بضبط "customGradient": false و "shadow": { "defaultPresets": false }، تحمي الواجهة من تشوهات الظلال والتدرجات المزعجة.
  • تعطيل تغيير أحجام الخطوط العشوائية: بضبط "customFontSize": false، يلتزم المحرر بأحجام الخطوط الأربعة أو الخمسة القياسية المصممة بدقة.
  • قفل خواص على مستوى كتل محددة: تقدر مثلاً تسمح بالتباعد المخصص (Padding) في كتلة core/group ولكن تمنعه تماماً في كتل core/paragraph للحفاظ على إيقاع القراءة المنتظم.

دراسة حالة حقيقية: وكالة تسويق في التجمع الخامس وأزمة الألوان العشوائية

أزمة منصة “العقارات الفاخرة”: استعادة الهوية البصرية وضبط الأداء

طبيعة المشروع: منصة ووردبريس عقارية كبرى مقرها القاهرة الجديدة (التجمع الخامس)، تدير عروضاً لمئات الوحدات السكنية والإدارية والتجارية في العاصمة الإدارية والساحل الشمالي، ويعمل عليها فريق تحرير مكون من 14 مسوقاً ومحرر محتوى.

1. الأزمة التشخيصية (The Crisis)

بعد إطلاق الموقع بثلاثة أشهر، تحولت صفحات العقارات إلى “سيرك بصري”! كل محرر يستخدم درجات ألوان مختلفة، أحدهم يختار أخضر نيون للأزرار، وآخر يضع نصوصاً باللون الرمادي الفاتح على خلفية بيضاء غير مقروءة، بالإضافة إلى قيام المحررين برفع ملفات خطوط متنوعة أدت إلى تحميل 7 خطوط ويب مختلفة بوزن 2.4 ميجابايت، مما دمر هوية البراند وتسبب في شكاوى متكررة من كبار المطورين العقاريين وهروب العملاء.

2. التشخيص المعماري (Diagnostic)

الفحص التقني أثبت أن القالب كان يسمح بجميع أدوات التحرير المفتوحة (Unrestricted Inspector Controls)، وكانت تنسيقات الـ Inline CSS تُحقن مباشرة داخل وسم style="..." في كل فقرة وزر، مما خلق مئات التعارضات وتسبب في تضخم حجم كود الـ HTML بنسبة 400% وعجز محركات البحث عن فهرسة المحتوى بكفاءة.

3. خطة الإنقاذ والحل الجذري (The Solution)

تم تطبيق حوكمة معمارية شاملة عبر إعادة صياغة ملف theme.json:

  • تم إغلاق الألوان المخصصة ("custom": false) وحصر اللوحة في 4 ألوان تعكس الفخامة (Navy Blue, Champagne Gold, Charcoal, Off-White).
  • تم تفعيل خط عربي موحد (Cairo Variable Font) محمل ذاتياً وإلغاء جميع الخطوط الأخرى.
  • تم غلق خاصية Inline Font Sizing وفرض المقاسات المعيارية فقط.
  • تم تنسيق مكونات الكتل مسبقاً (Buttons, Cards, Headings) عبر قسم styles.blocks لتبدو أنيقة تلقائياً بمجرد إدراجها.

4. جدول مقارنة مؤشرات الأداء الحقيقية (Metrics Table)

مؤشر الأداء المعماريقبل ضبط theme.jsonبعد الحوكمة بـ theme.jsonنسبة التحسن والوفر
حجم خطوط الويب المحملة2,450 كيلوبايت (7 خطوط متفرقة)145 كيلوبايت (خط متغير واحد محلي)وفر بنسبة 94.1%
حجم كود الـ HTML لكل صفحة وحدة185 كيلوبايت (بسبب Inline CSS)46 كيلوبايت فقطوفر بنسبة 75.1%
نسبة الشكاوى من تباين الألوان (Accessibility)34 شكوى أسبوعيةصفر شكاوى تماماًامتثال كامل لمعايير WCAG AA
معدل البقاء في الصفحة (Average Time on Page)42 ثانية فقطدقيقتان و 18 ثانيةارتفاع بنسبة 228% لراحة القراءة

الوصايا العشر لمهندسي theme.json المحترفين

  1. ابدأ دائماً بربط الـ JSON Schema: ضع السطر "$schema": "https://schemas.wp.org/trunk/theme.json" في أول الملف لتستمتع بالإكمال التلقائي والتحقق الفوري من الأخطاء في VS Code.
  2. لا تكتب قيماً لونية صلبة (Hex Codes) في قسم styles: استخدم دائماً مراجع الـ Presets عبر صيغة var:preset|color|slug لضمان ترابط النظام إذا تغير اللون لاحقاً.
  3. أغلق منتقي الألوان العشوائي في مشاريع الشركات: اضبط "custom": false لحماية تصميمك من عبث المحررين ومحاولاتهم الفردية.
  4. اعتمد على Fluid Typography دائماً: استخدم الإعداد "fluid": true لتجعل الخطوط متجاوبة تلقائياً مع حجم الشاشة دون صداع الميديا كويري.
  5. نظم هوامش التباعد بمقياس قياسي (Spacing Scale): لا تترك مسافات البادينج عشوائية؛ حدد درجات تباعد منتظمة لتوحيد الفراغات في كافة الصفحات.
  6. استخدم قسم elements لتنسيق الروابط والأزرار: وفر كتابة مئات أسطر الـ CSS بتعريف ألوان وحالات الـ :hover للأزرار والروابط مباشرة في elements.
  7. اجعل الخطوط محملة ذاتياً (Self-hosted Fonts): لا تعتمد على روابط Google Fonts الخارجية لتفادي مشاكل الخصوصية وبطء الـ DNS؛ خزن خطوط WOFF2 داخل مجلد الثيم.
  8. استفد من Section Styling في WordPress 6.6+: عرف أنماطاً متباينة للأقسام (مثل الأقسام المظلمة والأقسام المضيئة) كـ Style Variations لسهولة تطبيقها.
  9. لا تخزن منطقاً برمجياً في ملفات JSON: ملف theme.json للبيانات التكوينية فقط؛ العمليات الشرطية مكانها كود PHP أو فلاتر ووردبريس.
  10. افحص الـ Output في المتصفح باستخدام Inspect Elements: تأكد من أن المتغيرات المحدثة تظهر تحت الوسم :root وأن ترتيب الأسبقية يسير كما خططت له.

الغوص المعماري: إدارة Style Variations و Custom Templates في theme.json

يا صديقي المطور، واحدة من أقوى الميزات التي تميز ووردبريس الحديث عن أي نظام إدارة محتوى آخر هي ميزة Style Variations (أو تنويعات الأنماط). زمان، لو العميل طلب منك وضع ليلي (Dark Mode) أو لوحة ألوان مختلفة لموسم الصيف أو رمضان، كنت بتضطر تعمل قالب فرعي جديد أو تكتب آلاف الأسطر من الـ CSS Override المعقد اللي بيبهدل الأداء.

في عالم theme.json، الموضوع أصبح في منتهى النقاء البرمجي: كل اللي عليك تعمله هو إنشاء مجلد باسم styles/ داخل القالب بتاعك، وتحط جواه ملفات JSON منفصلة، مثل styles/dark.json أو styles/cairo-sunset.json. هذه الملفات لا تحتاج لتكرار كل شيء؛ يكفي أن تعيد تعريف قسم styles أو لوحة الـ palette فقط!


// styles/dark.json
{
    "$schema": "https://schemas.wp.org/trunk/theme.json",
    "version": 3,
    "title": "النمط الليلي الفاخر (Dark Mode)",
    "styles": {
        "color": {
            "background": "var:preset|color|dark-base",
            "text": "var:preset|color|light-surface"
        },
        "elements": {
            "link": {
                "color": {
                    "text": "var:preset|color|secondary"
                }
            }
        }
    }
}

بمجرد وضع هذا الملف، ووردبريس تلقائياً بيتعرف عليه ويعرضه في محرر الموقع تحت تبويب “Styles”، وبضغطة زر واحدة من العميل أو مدير الموقع، الموقع بالكامل بيتحول للنمط الليلي دون كتابة سطر كود واحد! الكور بيقوم بتبديل قيم متغيرات الـ CSS بسلاسة فائقة، مع الحفاظ على كاش المتصفح والأداء الاستثنائي.

20 سؤالاً وجواباً معمارياً متقدماً حول theme.json

1. ما هو ملف theme.json وما هي وظيفته في نظام ووردبريس؟

هو ملف تكوين بصيغة JSON يقدم طريقة موحدة وتصريحية لإدارة نظام التصميم، لوحات الألوان، مقاسات الخطوط، والتنسيقات الافتراضية، بالإضافة للتحكم في أدوات المحرر المتاحة لمستخدمي الموقع دون الحاجة لكتابة كود PHP أو CSS معقد.

2. هل يمكن استخدام theme.json في الثيمات الكلاسيكية القديمة (Classic Themes)؟

نعم بالتأكيد! يمكن إضافة ملف theme.json إلى أي قالب كلاسيكي قديم ليتحول إلى “ثيم هجين” (Hybrid Theme)، مما يمنحك على الفور إمكانية توليد متغيرات CSS، تفعيل Fluid Typography، والتحكم في أدوات محرر جوتنبرج دون الحاجة لتحويل القالب كله إلى Block Theme.

3. ما هي خوارزمية الدمج والوراثة (Merge Hierarchy) التي يتبعها ووردبريس لقراءة theme.json؟

يتبع الكور أسبقية هرمية صارمة: 1. إعدادات نواة ووردبريس الافتراضية (Core theme.json)، 2. إعدادات القالب الأب (Parent Theme)، 3. إعدادات القالب الابن (Child Theme)، 4. تخصيصات المستخدم والمدير المحفوظة في قاعدة البيانات عبر محرر الموقع (User Customizations)، حيث تطغى كل مرحلة لاحقة على السابقة.

4. ما هو الفرق بين version 2 و version 3 في ملف theme.json؟

الإصدار 3 تم تقديمه مع ووردبريس 6.6، وجلب تحسينات جوهرية لدعم Section Styles (تنسيقات الأقسام الفرعية)، إعادة هيكلة خصائص الـ Grid Layout والتباعد، وتبسيط مسارات الخصائص مع الحفاظ على التوافق الكامل مع الإصدار السابق.

5. ما هي وظيفة الخاصية “appearanceTools”: true؟

هي اختصار معماري رائع يقوم بتفعيل مجموعة كاملة من أدوات التحكم في التصميم المتقدمة دفعة واحدة، وتشمل: Border (الحدود ونصف القطر)، Dimensions (الهوامش والتباعد الداخلي)، Typography (ارتفاع السطر والمباعدة بين الحروف)، وتأثيرات الظلال دون الحاجة لكتابة سطر منفصل لكل أداة.

6. كيف يشير المطور لمتغير لون معرف مسبقاً داخل قسم styles في theme.json؟

باستخدام صيغة المسار المعيارية لووردبريس: “var:preset|color|slug_name”، حيث يقوم محرك النواة تلقائياً بترجمتها في الواجهة إلى كود CSS قياسي: var(–wp–preset–color–slug_name).

7. كيف نمنع المستخدمين من إدخال قيم ألوان مخصصة غير متوافقة مع الهوية البصرية؟

بضبط خاصية “custom”: false تحت كائن “color” داخل قسم “settings”، مما يؤدي فورياً لإخفاء منتقي الألوان اللوني وحقل الـ Hex Code من الشريط الجانبي للمحرر.

8. ما هو الـ Fluid Typography وكيف يتم تفعيله؟

هو نظام حسابي يولد تلقائياً دالة CSS clamp() لتعديل مقاسات النصوص ديناميكياً بحسب عرض شاشة العرض. يتم تفعيله بضبط “fluid”: true تحت قسم “typography” في “settings”، مع إمكانية تحديد الحدين الأدنى والأقصى لكل خط.

9. كيف نقوم بتضمين خط ويب محلي (Self-hosted Webfont) عبر theme.json؟

عبر تعريف مصفوفة fontFace داخل الخط في fontFamilies، وتحديد رابط ملف الخط عبر مسار نسبي مثل “file:./assets/fonts/font.woff2″، ليقوم ووردبريس بحقن قاعدة @font-face المحسنة مع خاصية font-display: swap تلقائياً.

10. ما هو قسم elements في theme.json وما هي العناصر التي يدعمها؟

هو قسم مخصص داخل styles لتنسيق عناصر الـ HTML القياسية عالمياً، ويدعم عناصر مثل: link (الروابط وحالات :hover و :active)، heading (العناوين ومستوياتها من h1 إلى h6)، button (الأزرار وتأثيراتها)، و caption (التسميات التوضيحية للصور).

11. كيف يمكن تخصيص تصميم كتلة محددة دون غيرها مثل core/quote أو core/button؟

داخل قسم “styles”، نفتح كائن “blocks” ونحدد مسار الكتلة المستهدفة بالاسم التقني الكامل مثل “core/quote”، ونضع داخلها التنسيقات المخصصة كالهوامش أو الحدود أو الألوان لتطبق على كل مثيل لتلك الكتلة في الموقع.

12. هل يمكن قفل أدوات معينة لكتلة مفردة مع إتاحتها لباقي الكتل؟

نعم، داخل قسم “settings.blocks”، يمكنك استهداف كتلة محددة (مثل “core/paragraph”) وضبط خواص مخصصة لها مثل إغلاق التباعد “spacing.margin”: false مع إبقائها مفعلة عالمياً لباقي الكتل.

13. ما هي ميزة Style Variations وكيف ننشئ اختلافات تصميمية متعددة للثيم؟

تتيح Style Variations للمستخدم التبديل بين لوحات ألوان وخطوط مختلفة بنفس هيكل الثيم بنقرة زر واحدة. يتم إنشاؤها عبر وضع ملفات JSON فرعية داخل مجلد styles/ في الثيم (مثل styles/dark.json و styles/sunset.json).

14. أين يتم حقن متغيرات وتنسيقات theme.json في صفحة الـ HTML المعروضة؟

يقوم ووردبريس بتجميع كافة الأنماط وحقنها داخل وسم <style id=”wp-block-theme-inline-css”> أو وسوم مخصصة للـ Global Styles في رأس الصفحة (Header)، مما يضمن عدم وجود تأخير في عرض المحتوى (No FOUC).

15. كيف يتعامل theme.json مع مقاسات التخطيط layout (Content Size و Wide Size)؟

يحدد “contentSize” العرض الأقصى القياسي للنصوص والفقرات (مثلاً 840px)، بينما يحدد “wideSize” العرض للمحتوى العريض المتمدد (مثلاً 1200px)، وتستخدم هذه القيم تلقائياً مع كتل المجموعة والأعمدة.

16. كيف نقوم بعمل Spacing Scale مخصص للتباعد في ووردبريس؟

عبر قسم “spacing.spacingScale” في settings، حيث نحدد قيمة الـ increment ونوع الوحدة (rem أو px) وعدد الخطوات لتوليد متغيرات تباعد مثل –wp–preset–spacing–20 و –wp–preset–spacing–40 بشكل رياضي منتظم.

17. ماذا يحدث إذا كان هناك خطأ في صيغة الـ JSON (Syntax Error) داخل theme.json؟

إذا كان هناك فاصلة زائدة أو قوس غير مغلق، سيفشل المعالج في قراءة الملف وسيتجاهل ووردبريس القالب ويسقط على الإعدادات الافتراضية للكور. لذلك يجب دائماً فحص الملف بأداة linting أو التأكد من إشارة الـ JSON Schema الخضراء في المحرر.

18. هل يؤثر حجم ملف theme.json على سرعة استجابة السيرفر (TTFB)؟

ووردبريس يقوم بعمل تخزين مؤقت (Object Caching) لنتائج معالجة theme.json المدمجة، وبالتالي لا تتم قراءة وتحليل الملف في كل استدعاء إذا كان الكاش مفعلاً، مما يجعل تأثيره على الـ TTFB شبه معدوم.

19. كيف يمكن لمطوري الإضافات تعديل إعدادات theme.json برمجياً عبر PHP؟

يمكن استخدام الفلتر wp_theme_json_data_theme أو wp_theme_json_data_user لتعديل أو حقن إعدادات وألوان جديدة برمجياً أثناء وقت التشغيل وقبل توليد مخرجات الـ CSS النهائية.

20. ما هي القاعدة الذهبية لتنظيم ملف theme.json في المشروعات الضخمة؟

الحفاظ على البساطة، التوثيق الدقيق عبر ملفات README خارجية، الاعتماد على معايير CSS الحديثة، وتجنب الإفراط في تعريف استثناءات لكل كتلة على حدة، بل التركيز على القواعد العامة المتسقة التي تضمن استدامة الصيانة.

الصورة الرمزية لـ Mohamed Abozaid

م. محمد أبو زيد

WordPress Architect & Enterprise Consultant

مهندس برمجيات متخصص في تطوير حلول ووردبريس المتقدمة، معمارية Block Themes، ومحرر Gutenberg، وتحسين الأداء لمواقع الشركات الكبرى في مصر والخليج العربي.


اترك تعليقاً