توسعه با چایلد تم، یکی از آن الگوهای معماری است که تا وقتی درست اجرا نشود، همیشه به‌عنوان «فقط لایهٔ کوچک CSS» دیده می‌شود. تجربهٔ من از پروژه‌های تیمی این است که چایلد تم، اگر درست پیکربندی شود، می‌تواند به‌عنوان لایهٔ اصلیِ سفارشی‌سازیِ پروژه عمل کند — از CSS و template تا override توابع و حتی ساختار پروژه. تفاوت بین «چایلد تم آماتور» و «چایلد تم حرفه‌ای» در سه چیز است: درک مکانیزم override، مدیریت هوک‌ها، و ساختار پوشه‌ها. این مقاله، هر سه را باز می‌کند. اگر تازه با چایلد تم آشنا می‌شوید، قالب وردپرس چایلد چیست و قالب وردپرس چیست را پیش از ادامه ببینید.

مکانیزم override چایلد تم

وردپرس در لحظهٔ رندر، برای هر فایل template با این منطق عمل می‌کند: اول در چایلد تم نگاه کن؛ نبود، از والد بردار. این ساده‌ترین توصیف مکانیزم override است، ولی در عمل، سه لایه دارد: یک — فایل template: هر فایلی با همان نام در چایلد، نسخهٔ والد را در فهرست template hierarchy جایگزین می‌کند. دو — style.css: چایلد تم، فایل استایل خودش را دارد که والد نیست؛ ترتیب لود (والد اول، چایلد بعد) با wp_enqueue_style مدیریت می‌شود. سه — functions.php: فایل توابع چایلد، جدا از والد لود می‌شود؛ برای جایگزینی توابع والد، از function_exists استفاده می‌شود. تجربه‌ام: بیشتر اشتباهات چایلد تم از نشناختن همین سه لایه می‌آید — کسانی که فکر می‌کنند چایلد تم «فقط CSS» است، از دو لایهٔ دیگر محروم می‌مانند.

چایلد تم درست، یک لایهٔ مستقل و پرقدرت است؛ چایلد تم ناقص، یک لایهٔ CSS که با هر آپدیت والد می‌شکند.

ساختار حرفه‌ای چایلد تم

حداقل چایلد تم، دو فایل است: style.css (با هدر Template:) و functions.php. ولی چایلد تم حرفه‌ای، ساختار دارد:

my-child/
├── style.css                # هدر چایلد + استایل
├── functions.php            # توابع و enqueue
├── screenshot.png
├── inc/
│   ├── enqueue.php          # لود asset
│   ├── customizer.php       # تنظیمات سفارشی
│   └── template-tags.php    # توابع نمایش
├── assets/
│   ├── css/custom.css
│   ├── js/custom.js
│   └── images/
└── template-parts/          # override بخش‌های والد
    ├── content.php
    └── content-single.php

نکته: پوشهٔ template-parts/ در چایلد، فقط فایل‌هایی را شامل می‌شود که می‌خواهید override کنید. الگوهای بیشتر در ساختار فایل‌های قالب استاندارد.

مدیریت CSS و JS در چایلد

الگوی استاندارد enqueue در چایلد تم:

function my_child_enqueue() {
    $parent_handle = 'parent-theme-style';
    $parent_version = wp_get_theme()->parent()->get( 'Version' );

    wp_enqueue_style(
        'my-child-style',
        get_stylesheet_uri(),
        array( $parent_handle ),
        wp_get_theme()->get( 'Version' )
    );

    wp_enqueue_script(
        'my-child-script',
        get_stylesheet_directory_uri() . '/assets/js/custom.js',
        array( 'jquery' ),
        '1.0.0',
        true
    );
}
add_action( 'wp_enqueue_scripts', 'my_child_enqueue', 20 );

سه نکتهٔ مهم: یک — اولویت ۲۰: enqueue بعد از والد (که معمولاً اولویت ۱۰ دارد). دو — نسخه‌بندی: با wp_get_theme()->get('Version')، از مشکل cache در آپدیت‌ها جلوگیری می‌کنید. سه — وابستگی به handle والد: با array( $parent_handle )، ترتیب لود تضمین می‌شود. الگوی دقیق در افزودن کد سفارشی به وردپرس.

Override فایل‌های template

برای override یک فایل، آن را با همان نام و مسیر در چایلد کپی کنید. مثال: برای تغییر ظاهر تک‌نوشته، فایل single.php والد را در چایلد کپی کنید و تغییر دهید. سه قاعده: یک — کمترین فایل را override کنید. اگر تنها footer.php را تغییر می‌دهید، فقط همان را کپی کنید. دو — پس از آپدیت والد، تفاوت‌های آن فایل را بررسی کنید (با diff). اگر والد تغییر کرده و شما override کرده‌اید، تغییرات والد را از دست می‌دهید. سه — در پروژه‌های تیمی، در مستندات پروژه بنویسید کدام فایل‌ها override شده‌اند. تجربه‌ام: در پروژه‌ای که ۱۵ فایل override شده بود ولی مستندی نداشت، پس از شش ماه، نصف فایل‌های override فراموش شدند و والد در آن‌ها دو نسخه عقب ماند.

Override توابع والد

برای جایگزینی یک تابع والد، در چایلد تم بنویسید:

if ( ! function_exists( 'parent_theme_function' ) ) {
    function parent_theme_function() {
        // پیاده‌سازی شما
    }
}

توجه: والد باید تابعش را در function_exists محافظت کرده باشد تا override کار کند. اگر والد این محافظت را ندارد، نمی‌توانید تابع را مستقیماً override کنید — باید افزونه‌ای بنویسید که با هوک‌ها رفتار والد را تغییر دهد. راهنمای کامل در استفادهٔ درست از هوک‌ها و کنترل ترتیب اجرای هوک.

الگوی Registry برای هوک‌ها

در چایلد تم حرفه‌ای، همهٔ هوک‌ها را در یک نقطه ثبت کنید:

class My_Child_Hooks {
    public static function init() {
        add_action( 'wp_enqueue_scripts', array( __CLASS__, 'enqueue' ), 20 );
        add_action( 'after_setup_theme', array( __CLASS__, 'setup' ) );
        add_filter( 'the_content', array( __CLASS__, 'modify_content' ) );
    }

    public static function enqueue() { /* ... */ }
    public static function setup() { /* ... */ }
    public static function modify_content( $content ) { /* ... */ return $content; }
}
My_Child_Hooks::init();

مزیت: یک نقطهٔ واحد برای مدیریت هوک‌ها. تجربه‌ام: در پروژه‌ای با ۴۰ هوک پراکنده، انتقال به این الگو، زمان دیباگ را نصف کرد. راهنمای تکمیلی در راهنمای حرفه‌ای کار با هوک‌ها.

کار تیمی با چایلد تم

پنج قاعدهٔ کار تیمی: یک — Git برای چایلد، نه برای والد. والد از مخزن رسمی یا سازنده می‌آید؛ چایلد در مخزن پروژه. دو — مستند overrideها: فهرست فایل‌های override و دلیل هر کدام، در README پروژه. سه — تست پس از هر آپدیت والد: پیش از استقرار، والد جدید را در staging با چایلد تست کنید. چهار — حداقل override: هر override باید دلیل مشخص داشته باشد. پنج — استفاده از افزونهٔ Snippets برای تغییرات موقت: تغییرات دائمی در چایلد، موقت‌ها در افزونه. الگوی کامل تیمی در ساختاربندی پروژهٔ وردپرس.

دید مهندسی: مرز چایلد تم و افزونه

برای توسعه‌دهنده‌های سطح بالا، تشخیص مرز چایلد تم و افزونه، یک تصمیم معماری مهم است. قاعدهٔ من در پروژه‌های واقعی: چایلد تم برای ظاهر، افزونه برای منطق. اگر قابلیت، ظاهر یا ساختار HTML را تغییر می‌دهد، چایلد تم کافی است. اگر قابلیت، داده ذخیره می‌کند، با سرور بیرونی حرف می‌زند، یا در پنل مدیریت ظاهر می‌شود، افزونهٔ اختصاصی انتخاب درست‌تری است. دلیل: چایلد تم به قالب والد وابسته است؛ اگر روزی قالب را عوض کنید، چایلد هم از دست می‌رود. افزونه، مستقل است. تجربه‌ام: در پروژه‌ای که پنج قابلیت منطقی در چایلد تم نوشته شده بود، روز تغییر قالب، همه از دست رفتند و بازنویسی‌شان دو هفته وقت گرفت. این قاعده در پروژه‌های بزرگ، جزو تصمیمات معماری ثابت من است. الگوی دقیق تفکیک در افزودن قابلیت به وردپرس و انتخاب قالب کسب‌وکار. یک نکتهٔ تکمیلی برای تیم‌های بزرگ: چایلد تم را مانند یک «لایهٔ باریک» ببینید که فقط نقاط تماس با والد را مدیریت می‌کند؛ نه به‌عنوان محل منطق. اگر منطق در چایلد رشد کند، در آپدیت والد، یا در تغییر قالب، پروژه به گروگان می‌افتد.

اشتباهات رایج

  • کپی کل والد به چایلد: آپدیت والد بی‌اثر می‌شود. فقط فایل‌های لازم را override کنید.
  • فراموش کردن Template: در style.css: چایلد به‌عنوان قالب مستقل شناخته می‌شود، بدون ارتباط با والد.
  • استفاده از @import برای لود والد: الگوی قدیمی و کند. از wp_enqueue_style استفاده کنید.
  • نادیده‌گرفتن اولویت enqueue: استایل چایلد قبل از والد لود می‌شود، خنثی می‌شود.
  • حذف والد: چایلد بدون والد، سایت را سفید می‌کند.
  • نبود مستند overrideها: در تیم، فراموشی حتمی است.
  • نوشتن منطق در چایلد: با تغییر قالب از دست می‌رود. جای منطق، افزونه است.

جمع‌بندی

توسعه با چایلد تم، سه لایه دارد: فایل template، style.css، و functions.php. الگوی حرفه‌ای شامل ساختار پوشه، enqueue درست، Registry برای هوک‌ها، و مرز روشن با افزونه است. اگر امروز فقط یک کار می‌کنید: در چایلد تم فعلی خودتان، فهرستی از فایل‌های override بسازید و در README پروژه ذخیره کنید. همین کار کوچک، شش ماه بعد نجات‌دهنده است. تجربهٔ خودتان از چایلد تم در پروژهٔ تیمی، در دیدگاه‌ها ارزشمند است. 🌿