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

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

حداقل‌های اجباری هسته وردپرس

وردپرس از یک قالب فقط دو فایل را به‌عنوان حداقل اجباری می‌خواهد: style.css با هدر معتبر، و index.php. اگر این دو وجود داشته باشند، وردپرس قالب را در پیشخوان قابل فعال‌سازی می‌بیند. جالب اینجاست که با همین دو فایل هم سایت بالا می‌آید — فقط همه درخواست‌ها با همان index.php رندر می‌شوند و تجربه کاربری بی‌ریخت است.

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

هدر style.css یک بلوک کامنت با کلید-مقدارهای مشخص است. هسته وردپرس همین بلوک را می‌خواند و نام قالب، نسخه، نویسنده، لایسنس و — برای چایلد تم — کلید Template را استخراج می‌کند.

/*
Theme Name: My Essential Theme
Theme URI: https://example.com/my-essential-theme
Author: Your Name
Description: A hand-crafted theme with clear file structure.
Version: 1.0.0
Requires at least: 6.0
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: my-essential-theme
Tags: blog, custom-logo, featured-images, translation-ready
*/

/* Actual styles start here */

دو کلید Requires at least و Requires PHP اهمیت بالایی دارند، چون به وردپرس می‌گویند قالب در چه محیطی امن است. نبودشان، راه را برای فعال‌سازی روی PHP نسخه قدیمی باز می‌کند و سایت مشتری با fatal error از کار می‌افتد. قالب وردپرس (WordPress Theme) در مستندات رسمی، این هدر را به‌عنوان مهم‌ترین شناسه قالب معرفی می‌کند.

index.php؛ آخرین سنگر رندر

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

هر قالب حرفه‌ای فقط به دو فایل زنده است؛ بقیه فایل‌ها برای دقیق‌تر کردن نمایش‌اند، نه برای زنده نگه داشتن سایت.

سلسله‌مراتب قالب؛ منطق انتخاب فایل

برای فهم درست فایل‌های ضروری، باید منطق انتخاب فایل توسط وردپرس را درک کنید. وقتی کاربر آدرس یک برگه را باز می‌کند، هسته یک زنجیره تصمیم را طی می‌کند: از اختصاصی‌ترین فایل تا عمومی‌ترین، اولین فایلی که پیدا شود رندر می‌شود. این قرارداد را Template Hierarchy (سلسله‌مراتب قالب) می‌نامند و بدون درک آن، دیباگ مشکلات نمایش تقریباً غیرممکن می‌شود.

مثال عینی برای یک برگه با slug برابر about:

  1. page-about.php (اختصاصی‌ترین)
  2. page-{id}.php اگر شناسه برگه مد نظر باشد
  3. page.php
  4. singular.php
  5. index.php (آخرین سنگر)

برای یک نوشته، زنجیره مشابه است ولی با فایل‌های متفاوت: single-post-{slug}.php، single-post.php، single.php، singular.php و در نهایت index.php. برای آرشیو دسته‌بندی: category-{slug}.php، category-{id}.php، category.php، archive.php، index.php. برای جستجو: search.php و index.php. برای ۴۰۴: 404.php و index.php.

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

سلسله‌مراتب قالب یک پیشنهاد سبک نیست؛ یک قرارداد با هسته وردپرس است. هر قالبی که آن را نقض کند، در نقطه‌ای از پروژه می‌شکند.

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

حالا که منطق انتخاب فایل را می‌دانید، فایل‌های اصلی قالب را با نقش دقیقشان مرور کنیم.

header.php و footer.php

فایل header.php بالای هر صفحه را می‌سازد: تگ <head>، تابع wp_head()، لوگو و منو. فایل footer.php پایین صفحه را می‌سازد و شامل wp_footer() است. این دو معمولاً با get_header() و get_footer() در سایر قالب‌ها فراخوانی می‌شوند. قاعده‌ای که در پروژه‌ها رعایت می‌کنم: در header.php هر چیزی که در همه صفحات مشترک است قرار می‌گیرد، ولی کوئری سنگین یا منطق شرطی تخصصی به آن راه نمی‌یابد. این فایل در هر بازدید اجرا می‌شود و بی‌دقتی در آن هزینه آنی دارد.

single.php و page.php

فایل single.php برای نمایش یک نوشته تکی و page.php برای یک برگه استفاده می‌شود. تفاوت مهمی که در پروژه‌های متوسط زیاد نادیده گرفته می‌شود: برگه‌ها معمولاً بدون تاریخ و دسته‌بندی و ناوبری قبلی/بعدی نمایش داده می‌شوند؛ نوشته‌ها با این‌ها. ادغام این دو فایل در یک فایل واحد، خیلی سریع به کدی تبدیل می‌شود که پر از if ( is_singular( 'post' ) ) است و خوانایی را از بین می‌برد.

archive.php، search.php و 404.php

archive.php صفحات فهرست (دسته، برچسب، نویسنده، تاریخ) را رندر می‌کند. search.php نتایج جستجو و 404.php صفحه‌ای که کاربر وقتی محتوایی پیدا نمی‌شود به آن می‌رسد. در خیلی از قالب‌های ساده این سه فایل وجود ندارد و همه از index.php استفاده می‌کنند — از نظر فنی درست، ولی از نظر تجربه کاربری ضعیف. صفحه ۴۰۴ اختصاصی با لینک به بخش‌های پرطرفدار، در آمار واقعی نرخ پرش آن صفحه را محسوس کاهش می‌دهد.

sidebar.php

فایل sidebar.php ناحیه کناری قالب است. باید شرط is_active_sidebar() داشته باشد تا اگر کاربر هیچ ویجتی نگذاشت، فضای خالی در چیدمان ظاهر نشود. اگر روی مدیریت ویجت‌ها و نواحی جانبی دقت بیشتری می‌خواهید، پیکربندی منو و ویجت‌های وردپرس راهنمای مرتبطی است.

comments.php و searchform.php

اگر قالب می‌خواهد دیدگاه‌ها را فعال کند، فایل comments.php وارد بازی می‌شود؛ از comment_form() و wp_list_comments() استفاده می‌کند و با comments_template() بارگذاری می‌شود. فرم جستجو در قالب حرفه‌ای معمولاً در searchform.php جدا می‌شود تا با get_search_form() در همه جا قابل فراخوانی باشد. جداسازی این دو فایل، در پروژه‌های چندزبانه سود مستقیم دارد چون فرم را می‌توانید بر اساس زبان سایت شرطی کنید.

functions.php؛ ستون فقرات قالب

فایل functions.php قلب قالب است. برخلاف تصور رایج، این فایل کد نمایشی نیست؛ جایی است که قابلیت‌ها، هوک‌ها و تنظیمات قالب ثبت می‌شوند. هر چیزی که در این فایل بنویسید در هر درخواست وردپرس لود می‌شود، پس اضافه‌بار در آن مستقیماً روی سرعت سایت اثر می‌گذارد. قاعده ساده: هر چیزی که فقط در پیشخوان کار می‌کند، می‌تواند به فایل جدا شکسته و شرطی لود شود.

ثبت قابلیت‌های قالب

استانداردترین کاری که در functions.php انجام می‌شود، ثبت قابلیت‌ها با add_theme_support() است. قالب باید خودش اعلام کند که از تصویر شاخص، لوگوی سفارشی و HTML5 پشتیبانی می‌کند:

function my_theme_setup() {
    add_theme_support( 'post-thumbnails' );
    add_theme_support( 'title-tag' );
    add_theme_support( 'custom-logo', [
        'height'      => 60,
        'width'       => 200,
        'flex-height' => true,
        'flex-width'  => true,
    ] );
    add_theme_support( 'html5', [
        'search-form', 'comment-form', 'comment-list', 'gallery', 'caption',
    ] );

    register_nav_menus( [
        'primary' => __( 'Primary Menu', 'my-essential-theme' ),
        'footer'  => __( 'Footer Menu', 'my-essential-theme' ),
    ] );
}
add_action( 'after_setup_theme', 'my_theme_setup' );

این قطعه در تمام قالب‌های حرفه‌ای تکرار می‌شود و جزئیاتش در نحوه استفاده از add_action در وردپرس آمده. نکته کلیدی این است که این‌ها در هوک after_setup_theme ثبت شوند نه init؛ این جزئیات یکی از خطاهای رایج در قالب‌های تازه‌کار است که باعث می‌شود قابلیت‌هایی مثل تصویر شاخص گاهی در پیشخوان دیده نشوند.

بارگذاری Assets

فایل‌های CSS و JS قالب باید با wp_enqueue_style و wp_enqueue_script بارگذاری شوند. هرگز لینک مستقیم به CSS و JS در header.php نگذارید؛ این رویکرد هم کش را غیرفعال می‌کند هم با افزونه‌های بهینه‌سازی سازگار نیست:

function my_theme_assets() {
    $version = wp_get_theme()->get( 'Version' );

    wp_enqueue_style(
        'my-theme-style',
        get_stylesheet_uri(),
        [],
        $version
    );

    wp_enqueue_script(
        'my-theme-script',
        get_template_directory_uri() . '/assets/js/main.js',
        [],
        $version,
        true
    );
}
add_action( 'wp_enqueue_scripts', 'my_theme_assets' );

این الگو نسخه‌بندی را از هدر style.css می‌خواند و به کش اجازه می‌دهد بعد از هر انتشار فایل جدید را برای مرورگر بفرستد. نبود این نسخه‌بندی در قالب‌های آماتور، عامل باگ‌هایی است که کاربر به‌سختی به‌روزرسانی را می‌بیند.

ثبت نواحی ویجت

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

Template Parts و بازاستفاده ساختاری

در قالب‌های مدرن، به‌جای تکرار بلوک‌های HTML در فایل‌های مختلف، از قطعات قابل بازاستفاده استفاده می‌شود. تابع get_template_part() این کار را ممکن می‌کند: فرض کنید می‌خواهید کارت نوشته را در index.php، archive.php و search.php نمایش دهید. به‌جای کپی سه‌باره مارک‌آپ، یک فایل template-parts/content-card.php می‌سازید و در هر سه فایل با یک خط فراخوانی می‌کنید:

<?php get_template_part( 'template-parts/content', 'card' ); ?>

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

get_template_part(
    'template-parts/content',
    'card',
    [ 'show_excerpt' => true ]
);

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

theme.json و قالب‌های بلاکی

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

{
  "version": 2,
  "settings": {
    "color": {
      "palette": [
        { "slug": "primary", "color": "#0057B8", "name": "Primary" },
        { "slug": "accent",  "color": "#FFB000", "name": "Accent" }
      ]
    },
    "typography": {
      "fontSizes": [
        { "slug": "small", "size": "14px", "name": "Small" },
        { "slug": "large", "size": "22px", "name": "Large" }
      ]
    },
    "layout": {
      "contentSize": "720px",
      "wideSize": "1140px"
    }
  }
}

در قالب‌هایی که این فایل را دارند، فایل‌های PHP سنتی کمتر دیده می‌شوند و به‌جای آن‌ها فایل‌های HTML در پوشه templates/ و parts/ قرار می‌گیرند. منطق سلسله‌مراتب قالب در این حالت پیچیده‌تر است و وردپرس قبل از رسیدن به فایل‌های HTML، فایل‌های PHP قدیمی را هم بررسی می‌کند. برای آشنایی با چرخه کامل در قالب بلاکی، گوتنبرگ و آینده ویرایش محتوا در وردپرس دید وسیع‌تری می‌دهد.

پوشه‌های templates و parts

در قالب بلاکی، پوشه templates/ نقش همان فایل‌های PHP سنتی را دارد ولی محتوایش HTML خالص با بلوک‌های گوتنبرگ است. پوشه parts/ معادل header.php و footer.php است ولی به‌شکل قطعات مستقل بلاکی. قالب بلاکی حرفه‌ای معمولاً هر دو مسیر را ارائه می‌دهد: فایل‌های PHP برای سایت‌های قدیمی و فایل‌های HTML برای سایت‌های جدید.

Assets، فایل‌های زبان و اسکرین‌شات

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

assets

پوشه assets/ معمولاً شامل زیرپوشه‌های css/، js/ و images/ است. قاعده‌ای که در پروژه‌ها رعایت می‌کنم: هیچ‌وقت CSS و JS را مستقیم در پوشه ریشه قالب نگذارید. فایل‌های فشرده‌نشده را در مخزن نگه دارید و فایل‌های .min را در مرحله انتشار بسازید. این کار در بلندمدت تفاوت بزرگی در خوانایی کد و سرعت دیباگ ایجاد می‌کند.

languages

پوشه languages/ فایل‌های .pot، .po و .mo را نگه می‌دارد. قالب حرفه‌ای فایل .pot پایه را در همین پوشه قرار می‌دهد و همه رشته‌های قابل ترجمه را با Text Domain مشخص ثبت می‌کند. اگر روی قالب فارسی‌سازی‌شده کار می‌کنید، ساختار دقیق فایل‌های RTL و شیوه بارگذاری فونت فارسی را در آماده‌سازی قالب وردپرس برای زبان فارسی باز کرده‌ام.

screenshot.png و readme

فایل screenshot.png با ابعاد ۱۲۰۰×۹۰۰ پیکسل تصویری است که در پیشخوان وردپرس برای معرفی قالب دیده می‌شود. فایل readme.txt نسخه متنی توضیحات قالب است که در مخزن رسمی وردپرس کاربرد دارد. حتی اگر قالب را در مخزن توزیع نمی‌کنید، این دو فایل را نگه دارید؛ در انتقال پروژه به توسعه‌دهنده دیگر، مرجع سریعی برای فهم وضعیت قالب‌اند.

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

سناریوهای دیباگ واقعی: پیامد نبود هر فایل

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

فایل غایبپیامد روی سایتراه تشخیص سریع
هدر ناقص style.cssقالب در پیشخوان دیده نمی‌شود یا فعال نمی‌شودبازخوانی هدر با wp_get_theme()
index.phpخطای «The theme is missing the index.php template»پیام دقیق در پیشخوان هنگام فعال‌سازی
header.phpwp_head() بارگذاری نمی‌شود؛ افزونه‌ها بی‌اثر می‌شوندنبود خروجی متا در View Source
footer.phpwp_footer() اجرا نمی‌شود؛ برخی اسکریپت‌ها از کار می‌افتندنبود اسکریپت‌های انتهای صفحه
page.php یا single.phpخطایی نیست چون index.php جایگزین می‌شود، ولی نمایش نامناسب استمقایسه رفتار با قالب پیش‌فرض
comments.phpبخش دیدگاه در نوشته دیده نمی‌شودبررسی تابع comments_open()

یکی از موارد نادر ولی دردناک، حذف تصادفی header.php از قالب فعال است. در این حالت قالب همچنان فعال می‌ماند ولی دیگر خبری از wp_head() نیست. پیامد آن این است که بخش بزرگی از افزونه‌ها (از سئو گرفته تا ابزار تحلیل) بی‌سروصدا از کار می‌افتند و کاربر تا مدت‌ها متوجه نمی‌شود. تشخیص این وضعیت چند ثانیه‌ای است: در View Source صفحه اصلی، وجود تگ‌های متا و لینک‌های استایل که افزونه‌ها اضافه می‌کنند را بررسی کنید.

حالت دوم که زیاد دیده‌ام، نبود فایل singular.php است در حالی که توسعه‌دهنده انتظار دارد نوشته‌ها و برگه‌ها با یک الگوی مشترک رندر شوند. وردپرس در نبود این فایل، سراغ single.php و page.php می‌رود و در نبود آن دو، به index.php می‌رسد. اگر در ساختار قالب تصمیم گرفته‌اید الگوی مشترک داشته باشید، نبود singular.php باعث می‌شود در یک نگاه به کد، مسیر رندر گم شود. اینجاست که درک سلسله‌مراتب قالب، تفاوت بین یک دیباگ ده‌دقیقه‌ای و یک دیباگ سه‌ساعته است.

پرسش‌های پرتکرار درباره فایل‌های قالب

آیا قالب وردپرس فقط با دو فایل کار می‌کند؟ بله. اگر style.css با هدر معتبر و index.php وجود داشته باشد، وردپرس قالب را می‌شناسد و سایت بالا می‌آید. ولی این حداقل، تجربه کاربری خوبی نمی‌دهد؛ قالب حرفه‌ای این دو را دارد و فایل‌های تخصصی را روی آن می‌سازد.

ترتیب اولویت فایل‌ها در سلسله‌مراتب قالب چگونه است؟ از اختصاصی‌ترین به عمومی‌ترین. برای نوشته: single-{post-type}-{slug}.php، single-{post-type}.php، single.php، singular.php، index.php. برای برگه: page-{slug}.php، page-{id}.php، page.php، singular.php، index.php. تشخیص این ترتیب، اولین قدم در دیباگ مشکلات نمایش است.

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

تفاوت قالب کلاسیک و قالب بلاکی در ساختار فایل چیست؟ قالب کلاسیک بر فایل‌های PHP تکیه دارد و قالب بلاکی بر فایل‌های HTML در پوشه‌های templates/ و parts/ به‌همراه theme.json. وردپرس قبل از رسیدن به فایل‌های HTML، فایل‌های PHP را هم بررسی می‌کند؛ به این ترتیب قالب بلاکی می‌تواند برای بعضی صفحات PHP و برای بقیه HTML داشته باشد.

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

فایل screenshot.png چقدر اهمیت دارد؟ در پیشخوان اولین چیزی که کاربر می‌بیند همین تصویر است. نبودش قالب را در فهرست پوسته‌ها به‌شکل یک جای خالی نشان می‌دهد. ابعاد توصیه‌شده ۱۲۰۰×۹۰۰ پیکسل است.

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

تفاوت get_template_directory() و get_stylesheet_directory() چیست؟ در قالب بدون چایلد یکسان‌اند؛ ولی در چایلد متفاوت: اولی مسیر قالب والد را برمی‌گرداند و دومی مسیر قالب فعال. برای assetهای والد در چایلد از تابع اول و برای assetهای اختصاصی چایلد از تابع دوم استفاده کنید.

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

چرا در برخی قالب‌ها فایل front-page.php دیده می‌شود و در برخی دیگر نه؟ فایل front-page.php در سلسله‌مراتب قالب بالاتر از home.php و page.php قرار می‌گیرد و صفحه اصلی سایت را به‌طور اختصاصی رندر می‌کند. قالب‌هایی که می‌خواهند صفحه اصلی، رفتاری کاملاً متفاوت از فهرست نوشته‌ها داشته باشد، این فایل را می‌سازند. اگر این فایل را نسازید، وردپرس بر اساس تنظیمات «خواندن» در پیشخوان، بین home.php و page.php یکی را انتخاب می‌کند.

قرارداد با هسته را جدی بگیرید

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

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

تمرین دوم که در تیم‌های تازه‌کار زیاد پیشنهاد می‌کنم: روی یک نصب تستی، فایل header.php را موقتاً تغییر نام دهید و ببینید افزونه سئو چه واکنشی نشان می‌دهد. این آزمایش کوچک، در چند دقیقه ارزش عملی مفهوم wp_head() را به‌شکل ملموس نشان می‌دهد و باعث می‌شود دفعه بعد که قالبی می‌سازید، آن را به‌عنوان یک قرارداد با هسته ببینید نه یک تزئین اختیاری.

اگر تجربه‌ای از دیباگ قالبی دارید که ریشه در نبود یک فایل داشته — یا برعکس، قالبی که با وجود همه فایل‌ها رفتار غیرمنتظره‌ای نشان داده — در دیدگاه بنویسید. آن تجربه برای کسی که همین امروز روی قالب اولش کار می‌کند، نقشه راهی ارزشمندتر از هر مستند رسمی است. 📁