چند سال پیش، پروژه‌ای را برای یک مشتری تحویل گرفتم که حدود دو سال روی آن کار شده بود. تمام سفارشی‌سازی‌های قالب در فایل‌های والد اعمال شده بود و هیچ لایه جداکننده‌ای وجود نداشت. وقتی قالب آپدیت شد، تقریباً همه چیز از بین رفت: رنگ‌ها، چیدمان هدر، بخش‌های اختصاصی سایت و ده‌ها تغییر ریز. آن روز یکی از گران‌ترین پروژه‌های بازسازی را تجربه کردم و از آن به بعد، ساخت چایلد تم امن و قابل نگهداری برای من تبدیل شد به یک قاعده تغییرناپذیر، نه یک توصیه عمومی. این مقاله، همه چیزهایی است که در این سال‌ها در ساخت چایلد تم‌های امن یاد گرفته‌ام.

چرا چایلد تم، مهم‌ترین لایه سفارشی‌سازی امن است؟

قبل از هر چیز، یک تفکیک ساده که در مقالات تازه‌کارها معمولاً جا می‌افتد: چایلد تم (Child Theme) قالبی است که روی یک قالب والد (Parent Theme) سوار می‌شود و رفتار و ظاهر آن را در نقاط مشخصی بازنویسی می‌کند. اگر با این مفهوم به‌طور کلی آشنا نیستید، پیشنهاد می‌کنم اول مقاله قالب وردپرس چایلد چیست و چه زمانی به آن نیاز داریم را بخوانید؛ چون در این مقاله فرض می‌کنم با تعریف پایه آشنا هستید و می‌خواهیم سراغ نسخه حرفه‌ای و امن برویم.

نکته‌ای که در پروژه‌های واقعی جدی‌تر از حد انتظار ظاهر می‌شود، این است که چایلد تم تنها لایه سفارشی‌سازی است که از روز اول، مرز بین دارایی شما و دارایی سازنده قالب را مشخص می‌کند. بدون چایلد تم، هر خط کدی که به قالب اضافه می‌کنید، به‌عنوان یک کد خارجی به دارایی سازنده متصل می‌شود. یعنی روزی که سازنده قالب، فایل‌هایش را به‌روز کند، کد شما هم بی‌رحم بازنویسی می‌شود. با چایلد تم، این مرز مشخص است: کد شما در قالب فرزند زندگی می‌کند، کد سازنده در قالب والد، و به‌روزرسانی والد، به فرزند کاری ندارد.

چایلد تم، تفاوت بین سفارشی‌سازی امن و خراب کردن سایت در روز به‌روزرسانی قالب است.

این مسئله در پروژه‌های بلندمدت اهمیت بیشتری پیدا می‌کند. اگر پروژه‌ای برای یک سال یا بیشتر زنده بماند، حتماً قالب والدش چند بار به‌روزرسانی می‌شود. هر به‌روزرسانی، اگر سفارشی‌سازی شما در جای درست نباشد، یک خطر جدی برای کسب‌وکار است. اگر می‌خواهید بدانید این خطر در عمل چقدر جدی است، چگونه قالب وردپرس را بدون آسیب به سایت تغییر دهیم را بخوانید؛ همان توالی خطرناک در به‌روزرسانی قالب هم صدق می‌کند.

چه زمانی چایلد تم انتخاب درستی نیست؟

چایلد تم یک ابزار عالی است، اما یک قانون در دنیای مهندسی نرم‌افزار می‌گوید هیچ ابزاری برای همه سناریوها مناسب نیست. در سه حالت، حتی ساخت چایلد تم هم انتخاب بهینه نیست:

وقتی تنها با Customizer کار می‌کنید

اگر تنها سفارشی‌سازی شما تنظیمات Customizer (سفارشی‌ساز) است — رنگ، فونت، چیدمان هدر — نیازی به چایلد تم ندارید. تنظیمات Customizer در دیتابیس ذخیره می‌شوند و در به‌روزرسانی والد از بین نمی‌روند. چایلد تم تنها زمانی لازم است که می‌خواهید به کد دست بزنید.

وقتی در حال ساخت یک قالب کاملاً اختصاصی هستید

اگر تصمیم گرفته‌اید قالب سایت را از پایه بسازید، چایلد تم معنایی ندارد چون والد مشخصی وجود ندارد. مسیر ساخت قالب اختصاصی در راهنمای توسعه قالب وردپرس از صفر و ساخت قالب اختصاصی وردپرس چه مراحلی دارد آمده است.

وقتی کد شما بیشتر منطق است تا ظاهر

چایلد تم جای ظاهر است، نه منطق. اگر کد شما شامل قابلیت‌های منطقی است — مثل نوع نوشته سفارشی، فیلدهای متا، شورت‌کدهای کاربردی — این کدها باید در افزونه باشند نه چایلد تم. اگر قالب را عوض کردید، منطق شما باید زنده بماند. تفکیک ظاهر از منطق را در کدنویسی اختصاصی برای قالب وردپرس و کدنویسی اختصاصی برای افزونه وردپرس مفصل توضیح داده‌ام.

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

یک چایلد تم حرفه‌ای، در حداقل ساختار، به سه چیز نیاز دارد: فایل style.css با هدر مخصوص، فایل functions.php برای enqueue استایل‌ها و افزودن هوک‌ها، و یک فایل screenshot.png برای نمایش در پیشخوان. اما در پروژه‌های جدی، ساختار گسترده‌تر است.

wp-content/themes/my-child-theme/
├── style.css                 ← هدر قالب و استایل پایه
├── functions.php             ← enqueue و هوک‌ها
├── screenshot.png            ← تصویر نمایش پیشخوان
├── assets/
│   ├── css/
│   │   └── custom.css        ← استایل‌های سفارشی
│   ├── js/
│   │   └── custom.js         ← اسکریپت‌های سفارشی
│   └── images/
│       └── logo.svg
├── inc/
│   ├── enqueue.php           ← فایل انکیو جداگانه
│   ├── hooks.php             ← هوک‌های سایت
│   └── customizer.php        ← تنظیمات Customizer
└── template-parts/
    └── header/
        └── custom-header.php ← override فایل هدر

این ساختار، تفکیک مسئولیت‌ها را رعایت می‌کند. چیزی که در پروژه‌های تازه‌کار معمولاً اشتباه انجام می‌شود این است که همه کدها در یک functions.php چندصدخطی جمع می‌شوند. کار کردن با چنین فایلی بعد از چند ماه، به یک تجربه دردناک تبدیل می‌شود. مقایسه با ساختار استاندارد قالب‌ها در ساختار فایل‌های یک قالب استاندارد وردپرس دید خوبی به شما می‌دهد.

هدر فایل style.css

هدر فایل style.css در چایلد تم، دو کلید اختصاصی دارد: Template که نام پوشه قالب والد را مشخص می‌کند، و Text Domain که برای ترجمه استفاده می‌شود. یک نکته که در تجربه‌ام زیاد دیده‌ام: نام پوشه قالب والد، به بزرگی و کوچکی حروف حساس است. اگر پوشه والد astra است، در هدر هم باید دقیقاً astra نوشته شود، نه Astra.

/*
Theme Name: My Site Child
Theme URI: https://example.com/
Description: چایلد تم اختصاصی برای سایت من
Author: Your Name
Author URI: https://example.com/
Template: astra
Version: 1.0.0
Text Domain: my-site-child
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
*/

enqueue صحیح استایل: قلب چایلد تم امن

اگر یک نکته از این مقاله را جدی بگیرید، این بخش باید باشد. اشتباه در enqueue (بارگذاری صحیح فایل‌های استایل و اسکریپت) استایل قالب والد، رایج‌ترین اشتباهی است که چایلد تم‌ها را از کار می‌اندازد. دو روش اشتباه و یک روش درست:

روش اشتباه اول: استفاده از @import

روش قدیمی این بود که در ابتدای style.css چایلد تم، استایل والد را با @import صدا می‌زدند:

/* روش اشتباه - استفاده نکنید */
@import url("../astra/style.css");

این روش چند مشکل جدی دارد: اول این‌که سرعت بارگذاری CSS را کاهش می‌دهد چون مرورگر باید فایل دوم را پس از خواندن فایل اول دانلود کند. دوم این‌که در بعضی مرورگرها و در پیکربندی‌های کش، رفتار غیرقابل پیش‌بینی دارد. سوم این‌که با CDN (Content Delivery Network، شبکه تحویل محتوا) و ابزارهای بهینه‌سازی CSS سازگار نیست.

روش اشتباه دوم: ویرایش مستقیم فایل والد

این روشی است که در پروژه‌های تازه‌کار زیاد می‌بینم: تغییر مستقیم فایل style.css یا functions.php قالب والد. اشتباه بودن این روش هم بدیهی است، چون اولین به‌روزرسانی قالب، همه چیز را پاک می‌کند.

روش درست: enqueue با اولویت صحیح

روش حرفه‌ای، enqueue استایل والد و فرزند با ترتیب و اولویت درست است. کد زیر، الگویی است که در همه پروژه‌هایم استفاده می‌کنم:

<?php
function my_child_enqueue_assets() {
    // دریافت نسخه قالب برای cache busting
    $parent_version = wp_get_theme( get_template() )->get( 'Version' );
    $child_version  = wp_get_theme()->get( 'Version' );

    // بارگذاری استایل والد
    wp_enqueue_style(
        'my-parent-style',
        get_template_directory_uri() . '/style.css',
        array(),
        $parent_version
    );

    // بارگذاری استایل چایلد با وابستگی به والد
    wp_enqueue_style(
        'my-child-style',
        get_stylesheet_uri(),
        array( 'my-parent-style' ),
        $child_version
    );
}
add_action( 'wp_enqueue_scripts', 'my_child_enqueue_assets', 10 );

سه نکته کلیدی در این کد:

  • وابستگی درست: استایل چایلد به استایل والد وابسته است، یعنی مرورگر ترتیب بارگذاری را رعایت می‌کند و استایل شما روی استایل والد اعمال می‌شود.
  • نسخه‌بندی خودکار: با wp_get_theme()->get('Version') هر بار نسخه عوض شود، مرورگر فایل کش را دور می‌زند. این حلقه ساده، از یک سری باگ‌های مخفی کش جلوگیری می‌کند.
  • استفاده از get_stylesheet_uri: این تابع، آدرس استایل چایلد را برمی‌گرداند، نه والد. استفاده از get_template_directory_uri در جای اشتباه، منبع خطاهای رایج است.

پس از این enqueue، استایل شما در چایلد تم می‌تواند قواعد اضافه کند یا قواعد والد را بازنویسی کند. اگر ترتیب درست رعایت نشود، استایل شما هیچ تأثیری نخواهد داشت — چیزی که در تجربه‌ام بارها باعث سردرگمی تازه‌کارها شده. برای درک عمیق‌تر مفهوم enqueue و هوک wp_enqueue_scripts، هوک‌های وردپرس چیستند و چگونه کار می‌کنند توضیح جامعی ارائه می‌دهد.

enqueue اشتباه، معادل یک چایلد تم خاموش است. ظاهراً ساخته شده، اما در واقع هیچ‌وقت کار نمی‌کند.

override امن فایل‌های قالب والد

یکی از قابلیت‌های اصلی چایلد تم، امکان بازنویسی فایل‌های قالب والد است. اما این قابلیت، دو دام جدی دارد که در پروژه‌های واقعی زیاد دیده‌ام.

مکانیزم override در وردپرس

وردپرس برای هر فایل قالب، اول در چایلد تم به‌دنبال آن می‌گردد، و اگر پیدا نشد، سراغ والد می‌رود. یعنی اگر فایل header.php را در چایلد تم بسازید، نسخه والد دیگر بارگذاری نمی‌شود.

دام بزرگ: کپی کل فایل به‌جای تغییر کوچک

اشتباه رایج این است که توسعه‌دهنده کل فایل header.php را از والد کپی می‌کند و در چایلد تغییرات کوچکی اعمال می‌کند. سه ماه بعد، سازنده والد در نسخه جدید، فایل هدر را با ویژگی‌های جدید به‌روزرسانی می‌کند. اما شما نسخه قدیمی را در چایلد نگه داشته‌اید و سایت شما آن ویژگی‌ها را نمی‌بیند. بدتر از آن، ممکن است باگ‌های امنیتی که در والد برطرف شده‌اند در چایلد باقی بمانند.

قاعده‌ای که برای خودم گذاشته‌ام: تا زمانی که می‌توانم با هوک کاری را انجام دهم، فایل قالب را override نمی‌کنم. اگر واقعاً باید override کنم، حداقل نسخه والد را به‌عنوان مرجع نگه می‌دارم و در بازبینی‌های فصلی، تفاوت‌ها را بررسی می‌کنم.

override هوشمند با هوک‌ها

بسیاری از قالب‌های حرفه‌ای امروز، هوک‌هایی در نقاط مختلف قالب تعریف می‌کنند که به شما اجازه می‌دهند محتوا اضافه کنید بدون اینکه فایل را override کنید. مثال:

<?php
function my_child_custom_header_content() {
    if ( is_front_page() ) {
        echo '<div class="hero-badge">پروژه‌های حرفه‌ای وردپرس</div>';
    }
}
add_action( 'astra_header_after', 'my_child_custom_header_content' );

کد بالا، بدون override فایل هدر، محتوایی را بعد از هدر اضافه می‌کند. این رویکرد، در برابر به‌روزرسانی والد کاملاً مقاوم است. اگر می‌خواهید با اصول کار با هوک‌ها در چایلد تم آشنا شوید، هوک‌های وردپرس در توسعه قالب چه کاربردی دارند را ببینید.

کدام فایل‌ها را به override نیاز دارید؟

در تجربه‌ام، در بیشتر پروژه‌ها فقط دو یا سه فایل نیاز به override واقعی دارند. فهرست تیپیک:

فایلچه زمانی override کنیمریسک
header.phpفقط اگر تغییر ساختاری عمیق لازم استبالا
footer.phpافزودن اسکریپت تحلیلی یا اسکیمامتوسط
single.phpتغییر چیدمان نوشته‌های تکمتوسط
archive.phpتغییر چیدمان آرشیوپایین
functions.phpهرگز به‌عنوان کپی، فقط افزودنیپایین در صورت رعایت

نکته مهم درباره functions.php: این فایل در چایلد تم، به‌طور خودکار قبل از فایل والد بارگذاری می‌شود. یعنی توابعی که در چایلد تعریف می‌کنید، همیشه در دسترس هستند. اگر می‌خواهید تابعی از والد را جایگزین کنید، باید از function_exists و remove_action استفاده کنید.

سازماندهی فایل functions.php در چایلد تم

فایل functions.php در چایلد تم، جدی‌ترین فایل پروژه است. این فایل، همه چیز را به‌هم وصل می‌کند. اما یک فایل چندصدخطی، بعد از چند ماه به یک بحران تبدیل می‌شود. الگوی من برای سازماندهی این فایل در پروژه‌های جدی:

<?php
// functions.php در ریشه چایلد تم، فقط نقش لودر دارد

define( 'MY_CHILD_VERSION', '1.0.0' );
define( 'MY_CHILD_DIR', get_stylesheet_directory() );

require_once MY_CHILD_DIR . '/inc/enqueue.php';
require_once MY_CHILD_DIR . '/inc/hooks.php';
require_once MY_CHILD_DIR . '/inc/customizer.php';

این ساختار، هر بخش را در فایل مستقل خودش قرار می‌دهد. در پروژه‌ای که چند توسعه‌دهنده کار می‌کنند، هر نفر می‌تواند روی فایل مربوط به کار خودش تمرکز کند بدون درگیر شدن با فایل‌های دیگر. اگر با ساختار پروژه‌های وردپرسی آشنا نیستید، چگونه یک پروژه توسعه وردپرس را ساختاربندی کنیم راهنمای عملی خوبی است.

پیشوند یکتا در همه توابع

هر تابعی که در چایلد تم تعریف می‌کنید، باید یک پیشوند اختصاصی داشته باشد. این پیشوند، از تعارض با توابع والد یا افزونه‌ها جلوگیری می‌کند. مثال:

<?php
// اشتباه: نام عمومی که ممکن است با دیگران تعارض کند
function custom_header_style() { /* ... */ }

// درست: نام اختصاصی با پیشوند پروژه
function mysite_child_header_style() { /* ... */ }

این نکته در مقالات اصولی معمولاً سبک تلقی می‌شود اما در پروژه‌های واقعی، هر سال چند ساعت وقت تیم‌ها را هدر می‌دهد. جزئیات بیشتر در اصول کدنویسی تمیز در پروژه‌های وردپرس آمده است.

استفاده درست از هوک‌ها به‌جای override افراطی

قدرت واقعی چایلد تم در هوک‌ها است، نه در override فایل‌ها. چهار نوع هوک که در چایلد تم‌های خودم استفاده می‌کنم:

Action برای افزودن محتوا

افزودن محتوا به بخش‌های مختلف قالب، بدون تغییر فایل. مثال اضافه کردن بنر اطلاع‌رسانی به بالای سایت:

<?php
function mysite_child_notice_banner() {
    if ( ! is_user_logged_in() && is_front_page() ) {
        echo '<div class="notice-banner">تخفیف ویژه برای مشتریان جدید</div>';
    }
}
add_action( 'wp_body_open', 'mysite_child_notice_banner' );

هوک wp_body_open در همه قالب‌های حرفه‌ای وجود دارد و نقطه‌ای عالی برای این نوع محتواست.

Filter برای تغییر داده

تغییر داده‌های خروجی بدون override. مثلاً اضافه کردن یک کلاس CSS به body در صفحه‌های فروشگاه:

<?php
function mysite_child_body_class( $classes ) {
    if ( function_exists( 'is_woocommerce' ) && is_woocommerce() ) {
        $classes[] = 'mysite-shop-page';
    }
    return $classes;
}
add_filter( 'body_class', 'mysite_child_body_class' );

حذف هوک‌های والد

در بعضی موارد، قالب والد چیزی را رندر می‌کند که شما نمی‌خواهید. به‌جای override فایل قالب، می‌توانید هوک والد را حذف کنید. اما برای این کار، باید دقیق بدانید هوک با چه اولویتی و با چه تابعی ثبت شده:

<?php
function mysite_child_remove_parent_action() {
    remove_action( 'astra_footer', 'astra_footer_content', 10 );
}
add_action( 'init', 'mysite_child_remove_parent_action' );

نکته ظریف: تابع remove_action باید پس از ثبت هوک اصلی اجرا شود، پس زمان‌بندی اهمیت دارد. این دام، یکی از پرتکرارترین خطاهای تازه‌کارهاست. برای فهم کامل اولویت هوک‌ها و زمان‌بندی، نحوه استفاده صحیح از هوک‌های وردپرس را بخوانید.

ساخت هوک سفارشی برای آینده

اگر می‌خواهید چایلد تم شما قابل نگهداری باشد و تیم بعدی بتواند به‌راحتی روی آن کار کند، در بخش‌های کلیدی، هوک سفارشی تعریف کنید:

<?php
// در قالب فرزند
function mysite_child_custom_hero_section() {
    do_action( 'mysite_child_before_hero' );
    // محتوای hero
    do_action( 'mysite_child_after_hero' );
}

این کار، حتی اگر توسعه‌دهنده فعلی از سایت برود، تیم بعدی می‌تواند بدون دست‌زدن به کد اصلی، سفارشی‌سازی انجام دهد. این نوع مرزبندی، تفاوت بین یک چایلد تم متوسط و یک چایلد تم حرفه‌ای است.

مدیریت نسخه و collaboration تیمی

در پروژه‌های تک‌نفره، مدیریت نسخه چایلد تم یک ضرورت عمومی است. اما در پروژه‌های تیمی، تبدیل به یک الزام جدی می‌شود. اگر بدون مدیریت نسخه کار کنید، تغییرات هم‌زمان دو توسعه‌دهنده به‌سرعت به یک بحران تبدیل می‌شود. اصول استفاده از Git در پروژه‌های وردپرسی را در گیت در وردپرس آورده‌ام.

فایل .gitignore مناسب

در پروژه چایلد تم، فایل‌های زیر نباید به مخزن git اضافه شوند:

# فایل‌های سیستم
.DS_Store
Thumbs.db

# فایل‌های ویرایشگر
.vscode/
.idea/

# فایل‌های build
node_modules/
build/
dist/

# فایل‌های محلی
.env
.env.local

تفکیک بین کد منبع و کد build، یکی از اصول مدیریت پروژه‌های مدرن است. اگر با این مفهوم آشنا نیستید، مراجعه به مقایسه Webpack و Vite دید خوبی به شما می‌دهد.

الگوی شاخه‌بندی در پروژه‌های وردپرسی

الگوی شاخه‌بندی که در پروژه‌های خودم استفاده می‌کنم ساده است: شاخه main همیشه قابل استقرار است؛ برای هر تغییر جدید، شاخه feature/xxx ساخته می‌شود؛ پس از تست روی محیط staging، به main مرج می‌شود. اگر با اصول شاخه‌بندی در Git آشنایی ندارید، برنچ در git راهنمای عملی است.

پیام کامیت معنادار

یکی از کم‌ارزش‌ترین کارهایی که در تیم‌ها زیاد می‌بینم، پیام‌های کامیت بی‌معنا مثل «update» یا «fix» است. سه ماه بعد، هیچ‌کس نمی‌داند آن کامیت چه کاری انجام داده. الگوی من: feat: افزودن بنر اطلاع‌رسانی، fix: اصلاح enqueue استایل چایلد، refactor: جداسازی توابع در فایل‌های مستقل. این الگو، زمان پیدا کردن باگ یا بررسی تغییرات را نصف می‌کند.

بقای چایلد تم در به‌روزرسانی‌ها

یک پرسش کلیدی که در مشاوره‌ها زیاد می‌شنوم: چه اتفاقی می‌افتد وقتی قالب والد به‌روزرسانی می‌شود؟ پاسخ بسته به این دارد که چایلد تم شما چقدر اصولی ساخته شده باشد.

به‌روزرسانی‌های بی‌خطر

اگر چایلد تم شما اصولی ساخته شده باشد، در اکثر به‌روزرسانی‌ها هیچ مشکلی پیش نمی‌آید. تغییرات CSS در style.css چایلد، توابع سفارشی در functions.php، هوک‌های اضافه‌شده، تنظیمات Customizer — همه این‌ها از به‌روزرسانی والد تأثیر نمی‌گیرند چون در چایلد هستند نه در والد.

به‌روزرسانی‌های پرخطر

سه سناریو در به‌روزرسانی والد، چایلد تم شما را در خطر قرار می‌دهد:

  1. override فایل‌های قالب: اگر فایل header.php را از والد در چایلد کپی کرده باشید، نسخه قدیمی در چایلد باقی می‌ماند. اگر والد تغییرات امنیتی یا قابلیت جدیدی در هدر اضافه کرده باشد، شما آن‌ها را نمی‌بینید.
  2. حذف هوکی که والد تغییر داده: اگر هوکی از والد را حذف کرده باشید و والد در نسخه جدید نام یا اولویت آن هوک را تغییر داده باشد، حذف شما بی‌اثر می‌شود یا خطا ایجاد می‌کند.
  3. تغییر ساختار داده‌ای که والد ذخیره می‌کند: اگر از تنظیمات والد داده‌ای می‌خوانید و ساختار داده در نسخه جدید تغییر کرده، کد شما از کار می‌افتد.

پیشگیری از این سه خطر، نیازمند یک عادت ساده است: قبل از به‌روزرسانی قالب والد روی سایت زنده، همیشه ابتدا روی محیط staging تست کنید. اصول این کار را در توسعه وردپرس با محیط لوکال چگونه انجام می‌شود و چگونه قالب وردپرس را بدون آسیب به سایت تغییر دهیم آورده‌ام.

چایلد تم امن، چیزی است که سه سال بعد، وقتی قالب والد ده بار به‌روزرسانی شده، هنوز دقیقاً همان‌طور که انتظار دارید کار می‌کند.

اشتباهاتی که چایلد تم را به بدهی فنی تبدیل می‌کند

در بازبینی ده‌ها چایلد تم در پروژه‌های مختلف، الگوهای تکراری‌ای دیده‌ام که هر کدام به‌تنهایی می‌تواند چایلد تم را بی‌فایده کند. این فهرست، فهرست واقعی از اشتباهاتی است که در عمل با آن‌ها روبرو شده‌ام:

استفاده از @import به‌جای enqueue

این اشتباه، هم سرعت را کاهش می‌دهد، هم با کش سازگار نیست، هم در پروژه‌های امروز کاملاً منسوخ است. اگر در چایلد تم خود @import دیدید، حتماً با enqueue عوض کنید. سرعت واقعی سایت، تفاوت جدی بین این دو روش را نشان می‌دهد.

کپی کل فایل‌های والد

یکی از بدترین عادت‌های تازه‌کارها: کپی تمام فایل‌های والد به چایلد و کار روی آن‌ها. این کار، چایلد تم را به یک نسخه frozen از والد تبدیل می‌کند که هیچ‌وقت به‌روزرسانی والد را نمی‌بیند. قاعده درست: فقط فایل‌هایی را override کنید که واقعاً نیاز دارید، و در بازبینی‌های فصلی، از والد به‌روزرسانی بگیرید.

قرار دادن منطق کسب‌وکار در چایلد تم

اگر نوع نوشته سفارشی، فرم تماس اختصاصی، منطق پرداخت یا شورت‌کدهای کاربردی در چایلد تم قرار دهید، در روز تغییر قالب، همه چیز از دست می‌رود. منطق کسب‌وکار، جای درستش افزونه اختصاصی است. تفکیک واضح این دو لایه را در کدنویسی اختصاصی برای افزونه وردپرس و افزودن کد سفارشی بدون ویرایش هسته وردپرس مفصل توضیح داده‌ام.

نبود پیشوند در نام توابع

هر تابع بدون پیشوند اختصاصی، یک ریسک تعارض با افزونه‌ها یا قالب‌های دیگر است. یک تابع با نام custom_setup() می‌تواند با تابعی همنام در یک افزونه تعارض کند و سایت را سفید کند. پیشوند سه حرفی سایت شما، تفاوت بین یک چایلد تم امن و یک بمب ساعتی است.

نبود مستندسازی

اگر چایلد تم را به تیم بعدی تحویل دهید و هیچ کامنتی در کد نباشد، آن‌ها نمی‌دانند کدام تابع چه کاری انجام می‌دهد. در تجربه‌ام، اضافه کردن کامنت‌های توضیحی در بالای هر تابع، زمان آموزش توسعه‌دهنده جدید را به نصف کاهش می‌دهد. اگر با اصول کدنویسی حرفه‌ای آشنا نیستید، چگونه کدنویسی وردپرس را حرفه‌ای یاد بگیریم مسیر جامعی ارائه می‌دهد.

پرسش‌های پرتکرار درباره ساخت چایلد تم امن

چه زمانی واقعاً به چایلد تم نیاز دارم؟

اگر تنها تنظیمات Customizer را تغییر می‌دهید، نیازی به چایلد تم ندارید. اگر CSS سفارشی می‌نویسید، فایل قالب را دست می‌زنید، تابع PHP اضافه می‌کنید یا فایل قالب والد را override می‌کنید، چایلد تم ضروری است. به‌طور ساده: هر تغییر کدی که باید پس از به‌روزرسانی والد باقی بماند، باید در چایلد تم باشد.

آیا باید چایلد تم را به‌روزرسانی کنم یا والد؟

والد را از مسیر رسمی سازنده به‌روزرسانی می‌کنید. چایلد تم را خودتان مدیریت می‌کنید — معمولاً از طریق Git یا نسخه‌بندی محلی. چایلد تم اصلاً نیازی به به‌روزرسانی خودکار از مخزن ندارد، چون کد آن در اختیار شماست و شما مسئول تغییرات آن هستید. اما در چایلد تم، فیلد Version را دستی نگه دارید و هر بار تغییر دهید تا کش مرورگر به‌درستی شکسته شود.

اگر از @import استفاده کنم، دقیقاً چه اتفاقی می‌افتد؟

مرورگر برای رندر صفحه، ابتدا فایل چایلد را دانلود می‌کند، سپس در خط اول با @import مواجه می‌شود، سپس فایل والد را دانلود می‌کند. یعنی دو مرحله دانلود پیوسته، به‌جای یک مرحله موازی. این تفاوت در سایت‌های ساده شاید ۱۰۰ تا ۲۰۰ میلی‌ثانیه باشد؛ اما در پروژه‌های با CSS سنگین، می‌تواند به چند صد میلی‌ثانیه افزایش پیدا کند. تفاوت این عدد در Core Web Vitals (شاخص‌های اصلی وب) قابل اندازه‌گیری است.

چطور بفهمم کدام فایل را نیاز به override دارم؟

سه مرحله: اول بفهمید که آیا با هوک می‌توانید همان تغییر را انجام دهید — اگر بله، override نکنید. دوم، اگر واقعاً override نیاز است، فقط همان یک فایل را از والد کپی کنید، نه کل پوشه. سوم، در بالای فایل override شده، یک کامنت بگذارید که توضیح دهد چرا این فایل override شده و تاریخ آخرین بازبینی آن چه بوده. این عادت، در پروژه‌های بلندمدت ارزش خودش را ثابت می‌کند.

آیا چایلد تم سرعت سایت را کاهش می‌دهد؟

خود چایلد تم سرعت را کاهش نمی‌دهد اگر به‌درستی ساخته شده باشد. آن‌چه سرعت را کاهش می‌دهد، enqueue اشتباه، استفاده از @import، بارگذاری فایل‌های اضافه یا override فایل‌های سنگین است. اگر چایلد تم را اصولی بسازید — enqueue درست، فایل‌های CSS کوچک و هدفمند، بدون override افراطی — سرعت سایت شما تفاوت محسوسی با حالت بدون چایلد تم نخواهد داشت.

چایلد تم و ووکامرس: نکته خاصی هست؟

بله. ووکامرس فایل‌های قالب خودش را دارد که در پوشه woocommerce/ چایلد تم قابل override است. اگر می‌خواهید این کار را انجام دهید، فایل مربوطه را از پوشه woocommerce/templates/ در افزونه ووکامرس کپی کنید، اما حتماً در بالای فایل، کامنت هشدار تغییر نسخه را نگه دارید. ووکامرس به‌روزرسانی‌های دوره‌ای روی قالب‌هایش انجام می‌دهد و نسخه قدیمی فایل شما ممکن است با نسخه جدید ووکامرس ناسازگار باشد. جزئیات کامل این تکنیک در سفارشی‌سازی صفحه محصول در ووکامرس آمده است.

برای سایت فارسی، نکته خاصی در چایلد تم هست؟

بله. اگر قالب والد نسخه RTL (Right-to-Left، راست‌به‌چپ) جداگانه دارد، چایلد تم شما باید استایل‌های خودش را به‌درستی در هر دو حالت راست‌چین و چپ‌چین مدیریت کند. یک نکته عملی که در پروژه‌های فارسی بارها به‌کارم آمده: در چایلد تم، یک فایل جدا برای استایل‌های مخصوص RTL بسازید و در enqueue، شرطی بارگذاری کنید. اگر با فرآیند آماده‌سازی قالب برای فارسی آشنا نیستید، چگونه قالب وردپرس را برای زبان فارسی آماده کنیم راهنمای کامل ارائه می‌دهد.

چگونه امن بودن چایلد تم را تست کنم؟

سه تست ساده که در بازبینی‌های فصلی انجام می‌دهم: اول، سایت را روی یک محیط staging بالا بیاورید، قالب والد را به آخرین نسخه به‌روزرسانی کنید و ببینید آیا ظاهر و رفتار سایت تغییر می‌کند. دوم، با ابزار Theme Check چایلد تم را اسکن کنید و خطاهای جدی را برطرف کنید. سوم، در فایل‌های چایلد، جستجوی سریع روی @import و توابع بدون پیشوند انجام دهید. اگر هر سه تست را پاس کردید، چایلد تم شما در وضعیت قابل قبولی است.

آن‌چه سال‌ها بعد برایتان می‌ماند

اگر بخواهم در یک جمله جمع کنم چه چیزی چایلد تم را از بدهی فنی به دارایی بلندمدت تبدیل می‌کند، پاسخ این است: مرزبندی دقیق. چایلد تم امن، دقیقاً می‌داند چه چیزهایی در اختیار اوست و چه چیزهایی نیست. ظاهر سایت را در اختیار دارد، منطق کسب‌وکار را ندارد. تغییرات CSS را کنترل می‌کند، اما فایل قالب والد را کپی نمی‌کند. هوک‌ها را اضافه می‌کند، اما هرگز بدون دلیل فایل override نمی‌کند.

این مرزبندی، در روز اول هزینه دارد: زمان بیشتری برای ساختار درست صرف می‌شود، فایل‌ها در چند پوشه تقسیم می‌شوند، هر تابع پیشوند می‌گیرد. اما سه ماه بعد که قالب والد برای اولین بار به‌روزرسانی می‌شود، همان مرزبندی، تفاوت بین یک سایت سالم و یک سایت سفید را مشخص می‌کند. و سه سال بعد، وقتی تیم تغییر می‌کند و توسعه‌دهنده جدید سراغ پروژه می‌آید، همان مرزبندی به او اجازه می‌دهد در چند ساعت بفهمد چه چیزی در سایت کجاست و چه کاری انجام می‌دهد.

چایلد تم، فقط یک ابزار نیست. یک قرارداد است بین شما و آینده پروژه. هرچقدر این قرارداد را دقیق‌تر ببندید، آینده پروژه مطمئن‌تر خواهد بود.

اگر تجربه‌ای از ساخت چایلد تم در پروژه‌های واقعی دارید — به‌خصوص اگر با دام‌هایی مثل از دست رفتن سفارشی‌سازی بعد از به‌روزرسانی یا تعارض با افزونه‌ها مواجه شده‌اید — در دیدگاه‌ها بنویسید. این تجربه‌های میدانی، برای خواننده بعدی از هر مستند رسمی ارزشمندترند. 🧩