القالب الفرعي في ووردبريس قالب صغير يرث كل شيء من قالب أساسي ويتيح لك تغيير ما تريد فقط، فلا يمسح تحديث القالب الأساسي عملك أبدا. لإنشائه تحتاج مجلدا، وملف style.css فيه ترويسة Template: باسم القالب الأساسي، وملف functions.php يحمل التنسيقات.
هذا الجزء موجود في كل شرح. ما أريد إضافته هو الجزء الذي تخطئ فيه أغلب القوالب الفرعية: تتحول إلى كومة من النصوص والألوان والأكواد الثابتة لا يغيرها إلا مطور.
كيف تنشئ قالبا فرعيا في ووردبريس؟
أنشئ مجلدا داخل wp-content/themes/ مثل astra-child، وأضف ملف style.css فيه على الأقل ترويستا Theme Name وTemplate (اسم مجلد القالب الأساسي)، ثم أضف functions.php يحمل التنسيقات، وفعل القالب الفرعي من المظهر ← القوالب.
style.css
/*
Theme Name: Astra Child
Template: astra
Version: 1.0.0
Text Domain: astra-child
*/
functions.php
<?php
add_action( 'wp_enqueue_scripts', function () {
wp_enqueue_style(
'astra-child',
get_stylesheet_uri(),
array(),
wp_get_theme()->get( 'Version' )
);
} );
هل تحتاج تحميل تنسيق القالب الأساسي أيضا؟ يعتمد ذلك على طريقة تحميله لملفاته، وكثير من القوالب الحديثة تفعل ذلك بنفسها. راجع كود الصفحة لتتجنب تحميله مرتين. وتجنب @import في CSS لأنه يؤخر تحميل التنسيقات.
ربط إصدار ملف التنسيق بإصدار القالب يجعل المتصفحات تجلب الملف الجديد بعد كل إصدار، وهذا مهم عند استخدام كاش طويل (راجع الكاش وLCP).
تعديل ملفات القالب
انسخ ملف القالب من الأساسي إلى الفرعي بنفس المسار النسبي ثم عدله، وسيحمل ووردبريس نسخة الفرعي أولا. قلل الملفات المنسوخة، فكل ملف منسوخ كود عليك صيانته عند تغير القالب الأساسي. وفضل الـ hooks والـ filters إن وفرها القالب.
المشكلة الحقيقية: الكود الثابت
هذا نمط أجده في كثير من القوالب الفرعية الموروثة:
<h1>We build fast websites</h1>
<a href="https://wa.me/20100..." style="background:#0f766e">Chat now</a>
كل تغيير في هذا العنوان أو اللون يحتاج مطورا ونشرا جديدا. وكرر ذلك في كل قسم فيتجمد الموقع.
كيف تجعل القالب الفرعي قابلا للتعديل
1. إعدادات Customizer للخيارات العامة
النصوص والألوان وخيارات التفعيل والروابط التي تظهر في صفحات كثيرة مكانها Customizer:
add_action( 'customize_register', function ( $wp_customize ) {
$wp_customize->add_section( 'mx_hero', array(
'title' => __( 'Hero', 'astra-child' ),
) );
$wp_customize->add_setting( 'mx_hero_title', array(
'default' => __( 'Websites that work', 'astra-child' ),
'sanitize_callback' => 'sanitize_text_field',
'transport' => 'postMessage',
) );
$wp_customize->add_control( 'mx_hero_title', array(
'label' => __( 'Hero title', 'astra-child' ),
'section' => 'mx_hero',
'type' => 'text',
) );
} );
وفي ملف القالب:
<h1><?php echo esc_html( get_theme_mod( 'mx_hero_title', __( 'Websites that work', 'astra-child' ) ) ); ?></h1>
لاحظ ثلاث عادات: دالة تنقية لكل إعداد، وتهريب عند الإخراج، وقيم افتراضية قابلة للترجمة.
2. دالة خيارات واحدة
بدلا من استدعاء get_theme_mod() بقيم افتراضية مختلفة في عشرة أماكن، عرف القيم الافتراضية مرة واحدة في مصفوفة واقرأها عبر دالة واحدة، فلا تختلف القيم أبدا.
3. بيانات المقالات للمحتوى الخاص بكل صفحة
المحتوى الذي يختلف من صفحة لأخرى (صندوق الملخص، الأسئلة الشائعة، عنوان SEO) مكانه post meta، مسجلا بـ register_post_meta() مع show_in_rest ليعمل في محرر البلوكات أيضا.
4. أنواع محتوى مخصصة للعناصر المتكررة
آراء العملاء، العملاء، المشاريع: أي قائمة من عناصر متشابهة يجب أن تكون نوع محتوى مخصصا لا مصفوفة ثابتة. سجل أنواع المحتوى في إضافة لتبقى عند تغيير القالب.
5. متغيرات CSS لعناصر التصميم
أخرج الألوان من الإعدادات كمتغيرات CSS مرة واحدة:
:root { --accent: #0f766e; }
.button { background: var(--accent); }
هكذا يصبح تغيير لوحة الألوان إعدادا واحدا لا عملية بحث واستبدال.
قائمة مراجعة القالب الفرعي
- ترويسة
style.cssصحيحة والقالب يتفعل دون أخطاء. - التنسيقات محملة بإصدارات ودون
@import. - لا نصوص أو روابط أو أرقام هواتف أو ألوان ثابتة في ملفات القالب.
- كل إعداد منقى وكل إخراج مهرب.
- النصوص قابلة للترجمة بـ text domain القالب (ضروري لـ موقع عربي أو متعدد اللغات).
- الوظائف التي يجب أن تبقى عند تغيير القالب موجودة في إضافة.
- الكود مفحوص بـ PHP_CodeSniffer ومعايير كود ووردبريس.
أخطاء شائعة
- تعديل القالب الأساسي مباشرة، فيمسحه التحديث التالي.
- نسخ مجلد قوالب الأساسي بالكامل “احتياطيا”.
- حفظ مفاتيح API في ملفات القالب.
- تنسيقات مضمنة في كل مكان يستحيل تخصيصها لاحقا.
القالب الفرعي يجب أن يسهل امتلاك الموقع لا أن يصعبه. إذا كان قالبك الحالي مليئا بالمحتوى الثابت وتريد جعله قابلا للتعديل، تواصل معي. ولسؤال المنصة الأكبر اقرأ لارافيل أم ووردبريس.
الأسئلة الشائعة
ما هو القالب الفرعي في ووردبريس؟
قالب يرث ملفات وتنسيقات قالب أساسي ولا يغير إلا ما تعدله أنت، فلا تمسح تحديثات القالب الأساسي عملك.
هل ما زلت أحتاج قالبا فرعيا مع قوالب البلوكات؟
في قوالب البلوكات يمكن حفظ كثير من التغييرات في محرر الموقع، لكن تغييرات الكود مثل دوال PHP والقوالب المخصصة والملفات ما زال مكانها القالب الفرعي أو إضافة.
هل توضع الوظائف المخصصة في القالب الفرعي أم في إضافة؟
التصميم والعرض مكانهما القالب، أما الوظائف التي يجب أن تبقى عند تغيير القالب مثل أنواع المحتوى المخصصة فمكانها إضافة.


