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

پیش‌نیازهای واقعی طراحی قالب

برای طراحی قالب وردپرس، سه مهارت پایه لازم است که اگر نبود، هر قدم بعدی سخت می‌شود: HTML، CSS و PHP پایه. HTML و CSS برای ساختار و ظاهر، و PHP برای اتصال به سیستم وردپرس. اگر HTML را نمی‌دانید، مسیر آموزش HTML از صفر نقطهٔ شروع است. برای CSS، آموزش CSS از صفر و فلکس باکس در CSS پایه‌های چیدمان را می‌دهند. و برای PHP، فقط دانستن متغیرها، توابع و آرایه‌ها کافی است — عمق زیاد در PHP، مزیت طراحی قالب نیست؛ شناخت وردپرس مزیت اصلی است. با مفاهیم هوک و APIهای داخلی وردپرس آشنا شوید، چون تمام قالب روی همین‌ها بنا می‌شود.

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

ساختار فایل‌های یک قالب استاندارد

قالب وردپرس، یک پوشه در مسیر wp-content/themes/ است که مجموعه‌ای مشخص از فایل‌ها در آن قرار می‌گیرد. حداقل فایل‌های لازم برای یک قالب فعال:

my-theme/
├── style.css
├── index.php
├── functions.php
├── header.php
├── footer.php
├── sidebar.php
├── single.php
├── page.php
├── archive.php
├── search.php
├── 404.php
└── screenshot.png

وردپرس به‌طور پیش‌فرض از میان این فایل‌ها، الگوهای خاصی را برای هر نوع صفحه انتخاب می‌کند. مثلاً برای نمایش یک نوشتهٔ تکی، اول single.php را می‌گردد؛ اگر نبود، به singular.php می‌رود؛ و اگر آن هم نبود، در نهایت index.php را استفاده می‌کند. همین منطق، دلیل نیاز به ترتیب فایل‌هاست. این ساختار به‌همین شکل در ساختار فایل‌های یک قالب استاندارد وردپرس به‌تفصیل آمده است.

هدر style.css و شناسنامهٔ قالب

قالب وردپرس بدون هدر style.css شناسایی نمی‌شود. این هدر، یک کامنت چند خطی است که وردپرس آن را می‌خواند:

/*
Theme Name: My Custom Theme
Theme URI: https://example.com
Author: Your Name
Description: یک قالب سبک و ساده برای وبلاگ شخصی
Version: 1.0.0
License: GNU General Public License v2 or later
Text Domain: my-custom-theme
Tags: blog, one-column, custom-menu, featured-images
*/

سه فیلد از این هدر اهمیت ویژه دارند: Theme Name که در پیشخوان دیده می‌شود؛ Version که برای آپدیت‌های آینده مهم است؛ و Text Domain که برای ترجمهٔ قالب استفاده می‌شود. اگر قالب شما هم‌زمان به‌عنوان چایلد تم استفاده می‌شود، فیلد Template هم باید اضافه شود — که در قالب چایلد وردپرس چیست بازش کرده‌ام.

اولین حلقه: index.php و ساختار پایه

فایل index.php قلب هر قالب است. حتی اگر تمام فایل‌های دیگر وجود داشته باشند، نبود این فایل باعث می‌شود قالب فعال نشود. ساده‌ترین ساختار:

<?php get_header(); ?>

<main>
  <?php if ( have_posts() ) : ?>
    <?php while ( have_posts() ) : the_post(); ?>
      <article>
        <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
        <?php the_excerpt(); ?>
      </article>
    <?php endwhile; ?>
  <?php endif; ?>
</main>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

این حلقهٔ معروف که در همهٔ قالب‌ها می‌بینید — if have_posts و while have_posts — همان چیزی است که نوشته‌های وردپرس را از دیتابیس می‌خواند. تمام توابعی که اینجا استفاده شد، بخشی از «توابع قالب» وردپرس هستند که در مهم‌ترین توابع وردپرس برای توسعه‌دهندگان فهرست شده‌اند. نکتهٔ مهم در کدنویسی قالب: هرگز کوئری دیتابیس را دستی ننویسید؛ همیشه از توابع استاندارد وردپرس استفاده کنید تا با کش و افزونه‌های بهینه‌سازی سازگار بمانید.

فایل functions.php و هوک‌های ضروری

فایل functions.php مغز قالب است. هر آنچه در سراسر قالب لازم دارید، از اینجا مدیریت می‌شود. سه عملکرد ضروری که باید در هر قالب حرفه‌ای وجود داشته باشند:

<?php
// 1. پشتیبانی از امکانات وردپرس
add_action( 'after_setup_theme', function () {
    add_theme_support( 'post-thumbnails' );
    add_theme_support( 'title-tag' );
    add_theme_support( 'html5', array( 'search-form', 'comment-form' ) );
    register_nav_menus( array(
        'primary' => 'منوی اصلی',
        'footer'  => 'منوی فوتر',
    ) );
} );

// 2. بارگذاری فایل‌های CSS و JS
add_action( 'wp_enqueue_scripts', function () {
    wp_enqueue_style( 'my-theme-style', get_stylesheet_uri(), array(), '1.0.0' );
} );

این کد، دو هوک ضروری را نشان می‌دهد: after_setup_theme که در آن قالب به وردپرس اعلام می‌کند چه امکاناتی را پشتیبانی می‌کند، و wp_enqueue_scripts که فایل‌های CSS و JS را به‌شکل صحیح بارگذاری می‌کند. اگر با مفهوم هوک آشنایی ندارید، پیش از ادامه، هوک‌های وردپرس چیستند و چگونه کار می‌کنند را بخوانید. استفاده از هوک‌ها، تفاوت میان یک قالب آماتور و یک قالب حرفه‌ای است — همان مرزی که در تشخیص قالب وردپرس استاندارد بیشتر بازش کرده‌ام.

قالب‌های اختصاصی: single، page، archive

بعد از ساختار پایه، نوبت به قالب‌های اختصاصی می‌رسد. هر فایل، یک «سناریوی نمایش» را کنترل می‌کند:

  • single.php — نمایش یک نوشتهٔ تکی (با محتوای کامل).
  • page.php — نمایش یک برگهٔ وردپرس (بدون دسته‌بندی و برچسب).
  • archive.php — نمایش آرشیو دسته، برچسب، نویسنده یا تاریخ.
  • search.php — نمایش نتایج جست‌وجو.
  • 404.php — صفحهٔ خطای ۴۰۴؛ نکات طراحی این صفحه را در خطای ۴۰۴ در وردپرس آورده‌ام.

یک نکتهٔ مهم طراحی: در تمام این قالب‌ها، ساختار پایه (header، footer، sidebar) از طریق توابع get_header()، get_footer() و get_sidebar() فراخوانی می‌شود. این الگو، دلیل اصلی جداسازی منطق از نمایش است و رعایت آن در پروژه‌های بزرگ حیاتی است.

بارگذاری صحیح CSS و JS

در قالب‌های آماتور، فایل‌های CSS و JS با تگ <link> در هدر header.php درج می‌شوند. در قالب حرفه‌ای، این کار از طریق تابع wp_enqueue_style و wp_enqueue_script انجام می‌شود. این تابع، امکان مدیریت ترتیب، وابستگی و نسخه‌بندی را می‌دهد. به‌عنوان مثال، اگر استایل قالب شما به jQuery وابسته است:

wp_enqueue_script(
    'my-theme-scripts',
    get_template_directory_uri() . '/js/main.js',
    array( 'jquery' ),
    '1.0.0',
    true
);

پارامتر آخر (true) باعث می‌شود اسکریپت در فوتر بارگذاری شود که برای سرعت بارگذاری سایت تأثیر مستقیم دارد. دلایل فنی این تأثیر و روش‌های حرفه‌ای بارگذاری را در چگونه سرعت سایت وردپرسی را افزایش دهیم؟ به‌تفصیل نوشته‌ام.

جدول فایل‌های قالب و نقش هرکدام

فایلنقشاجباری؟نکتهٔ مهم
style.cssشناسنامه و استایل اصلیبلهبدون هدر، قالب شناسایی نمی‌شود
index.phpقالب پیش‌فرض همه صفحاتبلهآخرین سنگر منطق نمایش
functions.phpمنطق قالب و هوک‌هاخیرباید در چایلد تم نگه داشته شود
header.phpسربرگ مشترکخیرشامل تگ wp_head()
footer.phpفوتر مشترکخیرشامل تگ wp_footer()
single.phpنمایش یک نوشتهخیردر نبود، از index استفاده می‌شود
page.phpنمایش یک برگهخیربرای صفحات بدون دسته‌بندی
screenshot.pngتصویر شناسای قالبخیرابعاد توصیه‌شده: ۱۲۰۰×۹۰۰

ریسپانسیو و RTL: از روز اول

دو خواستهٔ ضروری برای هر قالب فارسی: اول، ریسپانسیو بودن از روز اول نه بعداً. اضافه‌کردن ریسپانسیو بعد از ساخت کامل قالب، تقریباً معادل بازنویسی نیمی از CSS است. از همان اولین استایل، از واحدهای نسبی (rem، %) و چیدمان فلکس‌باکس یا گرید استفاده کنید. اصول کامل را در طراحی ریسپانسیو چیست و چرا ضروری است؟ آورده‌ام. دوم، آماده بودن RTL (Right-to-Left — راست‌به‌چپ) از ابتدا. در CSS، از خواص منطقی مثل margin-inline-start به‌جای margin-left استفاده کنید تا در هر دو جهت کار کند. تفاوت‌های RTL و نکات قالب فارسی را در قالب وردپرس فارسی چیست و چه تفاوتی با قالب انگلیسی دارد تحلیل کرده‌ام.

اشتباهات رایج در طراحی قالب

  • نوشتن کوئری دیتابیس به‌جای استفاده از توابع وردپرس: این کار با کش و افزونه‌های امنیتی نمی‌سازد و در آپدیت‌های هسته ممکن است بشکند.
  • کد مستقیم در functions.php قالب اصلی به‌جای چایلد تم: با هر آپدیت قالب، تغییرات شما پاک می‌شود.
  • بارگذاری CSS و JS با تگ مستقیم در هدر: ترتیب و نسخه‌بندی از دست می‌رود و مشکل کش ایجاد می‌شود.
  • نبود wp_head() و wp_footer() در header و footer: بسیاری از افزونه‌ها به این دو هوک نیاز دارند و نبودشان باعث می‌شود افزونه‌ها درست کار نکنند.
  • نادیده گرفتن i18n: رشته‌های ثابت به زبان فارسی در کد، جلوی ترجمه در آینده را می‌گیرد. همیشه از __() و _e() استفاده کنید.

نگاه از لایهٔ معماری: قالب به‌عنوان قرارداد نمایش

در نگاه معماری، قالب وردپرس یک لایهٔ «قرارداد نمایش» است که بین دادهٔ خام و کاربر نهایی می‌نشیند. طراحی درست این لایه، سه اصل را باید رعایت کند. اصل اول، جداکردن منطق از نمایش: منطق باید در functions.php یا افزونه باشد، نه در قالب‌های نمایشی. اگر در single.php یک کوئری دیتابیس می‌بینید، این کد در جای اشتباه نشسته. اصل دوم، استفاده از هوک‌ها به‌جای دستکاری خروجی: هر تغییری که می‌توانید از طریق هوک انجام دهید، بهتر از دستکاری مستقیم فایل است. اصل سوم، سازگاری با آپدیت: قالب شما باید طوری ساخته شود که با هر نسخهٔ جدید وردپرس و هر افزونه‌ای که از APIهای استاندارد استفاده می‌کند، همچنان کار کند.

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

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