چرا برگهها در قالب وردپرس نمایش داده نمیشوند و چگونه آن را اصولی برطرف کنیم؟
راهنمای عمیق و تجربهمحور برای شناسایی، تحلیل و رفع خطای عدم نمایش برگهها در قالب وردپرس؛ از کالبدشکافی صفحهبندی و قالبهای page.php تا نقش تنظیمات خواندن، سلسلهمراتب قالب، تعارض با افزونهها و کش در سایتهای وردپرسی و ووکامرسی.
page.php را با یک نسخه چایلد بازنویسی کرده که حلقه اصلی را حذف کرده بود. آن روز فهمیدم که در وردپرس، «نمایش نیافتن» میتواند چهار لایه مختلف داشته باشد: لایه تنظیمات، لایه ثبت، لایه قالب، و لایه کش.
در این مقاله میخواهم دقیقاً بگویم این خطا از کجا میآید، چطور ریشهاش را پیدا کنید، و چه الگویی برای ساختار قالب وجود دارد که احتمال بروز این مشکل را در بلندمدت به حداقل برساند.
عدم نمایش برگهها دقیقاً به چه معناست؟
وقتی میگوییم برگهها در قالب نمایش داده نمیشوند، در واقع یکی از این چهار سناریو رخ داده است: برگه اصلاً در سایت یافت نمیشود (خطای ۴۰۴)، برگه یافت میشود اما محتوایش خالی است (یا نمایش داده نمیشود)، برگه نمایش داده میشود اما قالب اشتباه (مثلاً قالب آرشیو بهجای تکبرگه) بارگذاری میشود، یا برگه در سایت نمایش داده میشود اما در منو یا لینکهای داخلی غایب است. تشخیص این چهار سناریو از هم، اولین قدم در حل مشکل است.
در وردپرس، برگه (Page) یکی از دو نوع محتوای اصلی است (نوع دیگر، نوشته یا Post). برگهها برخلاف نوشتهها، ساختار سلسلهمراتبی دارند و از یک ساختار URL متفاوت استفاده میکنند. همچنین برگهها بهطور پیشفرض در حلقه اصلی نوشتهها (Blog Loop) نمایش داده نمیشوند. این تفاوتهای ماهوی، منبع بسیاری از سردرگمیهاست. برای درک دقیقتر تفاوت برگه و نوشته، مقاله چگونه برگه در وردپرس بسازیم را توصیه میکنم.
یک سوءبرداشت رایج این است که تصور کنیم برگهها همیشه از یک فایل قالب مشخص رندر میشوند. اینطور نیست. وردپرس یک سلسلهمراتب قالب (Template Hierarchy) پیچیده دارد که در آن، برای هر برگه بسته به ساختارش، یکی از چند فایل ممکن بهعنوان قالب انتخاب میشود. اگر یکی از این فایلها در قالب وجود نداشته باشد، وردپرس به فایل بعدی در سلسلهمراتب میرود و در نهایت به index.php میرسد. اما اگر فایل انتخابشده خطا داشته باشد یا حلقه اصلی نداشته باشد، برگه ممکن است ناقص یا خالی نمایش داده شود. برای درک جایگاه این مکانیزم در معماری کلی، مقاله قالب وردپرس چیست و چگونه انتخاب کنیم نقطه شروع خوبی است.
نکته دوم: «نمایش نیافتن» همیشه بهمعنی «نبود برگه» نیست. گاهی ریشه در تنظیمات صفحه اصلی، در ساختار پیوندهای یکتا، در قالبهای شرطی، یا در تعارض با افزونههای سئو است. برای فهم بهتر ساختار WordPress و مکانیزم برگه، ویکیپدیا نقطه شروع خوبی است.
برگهای که در پیشخوان هست اما در سایت دیده نمیشود، لزوماً پاک نشده؛ به احتمال زیاد فقط در یک مسیر اشتباه، منتظر دیده شدن است.
هفت ریشه اصلی این خطا
در تجربهام، این خطا تقریباً همیشه یکی از هفت ریشه زیر را دارد. هر کدام امضای مشخص خودش را در رفتار پیشخوان یا سایت دارد:
۱. تنظیمات اشتباه در «تنظیمات ← خواندن»
شایعترین علت. در وردپرس، در بخش «تنظیمات ← خواندن»، دو گزینه برای صفحه اصلی وجود دارد: «آخرین نوشتهها» یا «یک برگه استاتیک». اگر این تنظیم روی «آخرین نوشتهها» باشد اما شما انتظار دارید برگه اصلی نمایش داده شود، ناهماهنگی رخ میدهد. همچنین اگر برگهای بهعنوان صفحه اصلی انتخاب شده اما بعداً پاک یا غیرفعال شده باشد، وردپرس یک صفحه خالی نمایش میدهد.
۲. مشکل در فایل page.php قالب
اگر قالب شما فایل page.php داشته باشد اما در آن، the_content() فراخوانی نشده باشد، برگه رندر میشود اما محتوایش خالی نمایش داده میشود. اگر the_post() یا حلقه اصلی (while ( have_posts() )) حذف شده باشد، احتمالاً صفحه بهطور کامل خالی یا با خطای PHP مواجه میشود. این حالت در چایلد تمهایی که توسعهدهنده فقط بخشی از فایل والد را کپی کرده، شایع است. برای مطالعه بیشتر، مقاله قالب وردپرس چایلد چیست و چه زمانی به آن نیاز داریم را ببینید.
۳. تعارض با فایلهای template اختصاصی
قالب شما ممکن است فایلهایی مثل page-services.php یا page-about.php داشته باشد که برای برگههای با slug مشخص طراحی شدهاند. اگر این فایلها خطای PHP داشته باشند یا حلقه اصلی را نداشته باشند، برگههای متناظر نمایش داده نمیشوند. این حالت در قالبهای شرکتی که از template اختصاصی برای هر بخش استفاده میکنند، شایع است.
۴. تعارض با افزونههای سئو یا امنیتی
افزونههایی مثل Yoast SEO یا Rank Math گاهی برگهها را بهعنوان noindex علامتگذاری میکنند یا در sitemap قرار نمیدهند. اگرچه این موضوع روی نمایش مستقیم اثر ندارد، اما اگر کاربر شما از طریق گوگل به دنبال برگه باشد و آن را پیدا نکند، به نظر میرسد «نمایش داده نمیشود». برای مطالعه دقیقتر، مقاله بهترین افزونههای سئو وردپرس را توصیه میکنم.
۵. مشکل در ساختار پیوندهای یکتا
اگر پیوندهای یکتا (Permalinks) بهدرستی تنظیم نشده باشند، برگهها ممکن است با URL اشتباه نمایش داده شوند یا خطای ۴۰۴ بگیرند. این حالت بعد از انتقال سایت بین سرورها یا بعد از تغییر تنظیمات پیوند، شایع است. راهحل سریع، رفتن به «تنظیمات ← پیوندهای یکتا» و ذخیره مجدد بدون هیچ تغییری است.
۶. تعارض با افزونههای مدیریت محتوا
افزونههایی مثل Members یا User Role Editor میتوانند دسترسی به برگهها را بر اساس نقش کاربری محدود کنند. اگر تنظیمات این افزونهها با قالب جدید تعارض داشته باشند، کاربران غیرادمین ممکن است برگهها را نبینند. این حالت در سایتهای عضویتمحور یا فروشگاهی که نقشهای کاربری مختلف دارند، شایع است.
۷. مشکل کش یا CDN
اگر برگهها در پیشنمایش زنده نمایش داده میشوند اما در سایت واقعی نه، احتمالاً کش مرورگر، کش افزونه، کش سرور، یا CDN نسخه قدیمی صفحه را نمایش میدهد. این حالت بهسادگی با پاک کردن کش قابل حل است، اما اغلب در شلوغی تشخیص نادیده گرفته میشود. برای مطالعه بیشتر درباره لایههای کش، مقاله بهترین افزونههای کش وردپرس را ببینید.
نمایش نیافتن برگه، اغلب یک تصمیم ناخواسته در یکی از لایههای وردپرس است؛ نه یک حادثه تصادفی.
نشانهها و علائم تشخیص
این خطا در همه موارد بهشکل یک پیام صریح ظاهر نمیشود. در تجربهام، این نشانهها ظاهر میشوند و اگر به آنها توجه کنید، میتوانید بهموقع اقدام کنید:
- خطای ۴۰۴ در برگههای داخلی: اگر برگهای در پیشخوان هست اما URL آن ۴۰۴ میدهد، مشکل در پیوندهای یکتا یا ساختار URL است.
- نمایش صفحهای خالی یا نیمهخالی: اگر برگهای رندر میشود اما محتوایش دیده نمیشود، احتمالاً
the_content()از فایل قالب حذف شده است. - نمایش قالب اشتباه: اگر برگهای نمایش داده میشود اما ظاهرش با بقیه سایت فرق دارد (مثلاً فهرست نوشتهها را میبینید)، یعنی سلسلهمراتب قالب بهدرستی اجرا نمیشود.
- عدم حضور در منو: اگر برگهای در پیشخوان هست اما در منوی سایت غایب است، احتمالاً منو بهدرستی به برگه متصل نشده است.
- نبودن برگهها در sitemap: اگر برگهها در sitemap نیستند اما در سایت نمایش داده میشوند، مشکل در تنظیمات افزونه سئو است.
- نمایش ناهماهنگ در مرورگرهای مختلف: اگر برگهای در یک مرورگر نمایش داده میشود و در دیگری نه، مشکل در کش مرورگر است.
- خطاهای PHP در لاگ: اگر برگهای باعث خطای PHP میشود، احتمالاً یک فایل قالب یا افزونه با آن تعارض دارد.
نکته مهم: نبود برگه در سایت، همیشه بهمعنی «نبود برگه در دیتابیس» نیست. اگر برگه در بخش «برگهها» پیشخوان دیده میشود، یعنی در دیتابیس موجود است و مشکل در لایه نمایش است. این تشخیص ساده، اولین قدم در حل مسئله است. برای مطالعه بیشتر درباره عیبیابی سیستماتیک قالب، مقاله چگونه خطای قالب وردپرس را عیبیابی کنیم را توصیه میکنم.
پروتکل تشخیص گامبهگام
برای رسیدن به ریشه مشکل، این پروتکل را در تجربهام مفید یافتهام. مرحلهبهمرحله پیش بروید:
گام اول: بررسی ساختار پیشخوان
به پیشخوان وردپرس بروید، مسیر «برگهها ← همه برگهها» را باز کنید. اگر برگهها را در این فهرست میبینید، یعنی در دیتابیس موجودند و ریشه مشکل در لایه نمایش است. اگر برگهای در این فهرست نمیبینید، احتمالاً فیلتر یا فیلتر وضعیت (منتشرشده، پیشنویس، سطل زباله) فعال است.
گام دوم: بررسی تنظیمات خواندن
به «تنظیمات ← خواندن» بروید و بررسی کنید:
- در بخش «صفحه اصلی نمایش میدهد»، کدام گزینه انتخاب شده است؟
- اگر «یک برگه استاتیک» انتخاب شده، آیا برگه اصلی بهدرستی انتخاب شده است؟
- اگر «آخرین نوشتهها» انتخاب شده، آیا قالب شما برای نمایش این حالت طراحی شده است؟
این گام را جدی بگیرید. در بیش از ۳۰٪ مواردی که با این خطا مواجه شدهام، ریشه در همین تنظیمات بوده است.
گام سوم: بررسی فایلهای قالب
با FTP یا File Manager، به پوشه قالب فعلی بروید. بررسی کنید که آیا فایل page.php وجود دارد یا نه. اگر وجود دارد، محتوایش را باز کنید و مطمئن شوید که شامل حلقه اصلی است:
<?php
while ( have_posts() ) :
the_post();
?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<h1><?php the_title(); ?></h1>
<div class="entry-content">
<?php the_content(); ?>
</div>
</article>
<?php
endwhile;
?>
اگر the_content() یا the_title() در فایل نبود، احتمالاً محتوای برگه نمایش داده نمیشود. برای مطالعه بیشتر درباره ساختار فایل قالب، مقاله ساختار فایلهای یک قالب استاندارد وردپرس را توصیه میکنم.
گام چهارم: بررسی سلسلهمراتب قالب
در وردپرس، اگر برگه شما قالب اختصاصی دارد (مثلاً page-services.php)، وردپرس آن را بهجای page.php بارگذاری میکند. اگر این فایل خطا داشته باشد یا حلقه اصلی را نداشته باشد، برگه نمایش داده نمیشود. برای بررسی این موضوع، از افزونه Query Monitor یا Debug Bar استفاده کنید و در بخش «Template» ببینید کدام فایل بارگذاری شده است.
گام پنجم: بازنشانی پیوندهای یکتا
به «تنظیمات ← پیوندهای یکتا» بروید و بدون هیچ تغییری، روی «ذخیره تغییرات» کلیک کنید. این کار باعث میشود که وردپرس قوانین بازنویسی URL (Rewrite Rules) را دوباره بسازد و مشکل ۴۰۴ در برگهها حل شود.
گام ششم: تعویض قالب به قالب پیشفرض
اگر مشکل حل نشد، قالب را به یکی از قالبهای پیشفرض وردپرس (مثل Twenty Twenty-Five) تغییر دهید و سایت را بررسی کنید. اگر برگهها در قالب پیشفرض نمایش داده میشوند، مطمئن میشوید که مقصر خودِ قالب فعلی است. اگر مشکل ادامه داشت، احتمالاً یک افزونه یا تنظیمات سراسری مقصر است.
گام هفتم: غیرفعالسازی افزونهها
تمام افزونهها را غیرفعال کنید و سایت را بررسی کنید. اگر مشکل حل شد، افزونهها را یکییکی فعال کنید و بعد از هر فعالسازی، سایت را تست کنید. اولین افزونهای که مشکل را برگرداند، مقصر است. این پروتکل در چگونه افزونه مشکلساز وردپرس را پیدا کنیم تفصیل داده شده است.
گام هشتم: بررسی کش
اگر همهچیز در دیتابیس و قالب درست است، کش را پاک کنید. ترتیب اصولی: کش مرورگر، کش افزونه، کش سرور، و در نهایت کش CDN. همیشه بعد از پاک کردن کش مرورگر (با Ctrl+Shift+R) شروع کنید.
تفاوت با خطاهای مشابه
عدم نمایش برگهها اغلب با خطاهای دیگری قاطی میشود. این جدول به شما کمک میکند تفاوتها را سریع تشخیص دهید:
| خطا | علت اصلی | نشانه کلیدی |
|---|---|---|
| عدم نمایش برگهها | تنظیمات خواندن یا قالب | برگه در پیشخوان هست اما در سایت نه |
| خطای ۴۰۴ در برگه | پیوندهای یکتا | URL اشتباه یا ۴۰۴ مستقیم |
| نمایش صفحه خالی | نبود the_content | قالب بارگذاری میشود اما محتوا خالی است |
| عدم نمایش نوشتهها | مشکل در حلقه اصلی | برگه درست است اما آرشیو نه |
| عدم نمایش ابزارکها | نبود register_sidebar | سایدبار خالی میشود |
| عدم نمایش منو | نبود register_nav_menus | منو در پیشخوان تعریف شده اما نمایش داده نمیشود |
| کندی شدید در بارگذاری برگه | کوئری سنگین یا تعارض | صفحه نیمهکاره رها میشود |
نکته ظریف: عدم نمایش برگه و عدم نمایش نوشته، اگرچه از نظر ظاهری مشابهند اما از نظر ریشهای متفاوتند. برگهها از سلسلهمراتب قالب جداگانهای استفاده میکنند و بهطور پیشفرض در حلقه نوشتهها نمایش داده نمیشوند. برای مطالعه بیشتر درباره ساختار نوشتهها، مقاله توابع وردپرس چیست و چگونه از آنها استفاده کنیم را ببینید.
راهحلهای عملی برای هر ریشه
حالا که مقصر را شناسایی کردید، وقت درمان است. راهحلها را بر اساس ریشه مشکل دستهبندی کردهام:
راهحل ریشه اول: اصلاح تنظیمات خواندن
به «تنظیمات ← خواندن» بروید و بررسی کنید که کدام گزینه انتخاب شده است. اگر قصد دارید یک برگه استاتیک بهعنوان صفحه اصلی نمایش داده شود، گزینه «یک برگه استاتیک» را انتخاب کنید و در فهرستهای کشویی، برگه اصلی و برگه نوشتهها را انتخاب کنید. اگر برگهای انتخاب شده که پاک شده، وردپرس یک صفحه خالی نمایش میدهد — این یکی از شایعترین دلایل خطای «صفحه اصلی سفید» است.
راهحل ریشه دوم: بازسازی فایل page.php
اگر فایل page.php مشکل دارد، آن را با یک نسخه استاندارد جایگزین کنید. این یک الگوی حداقلی کارآمد است:
<?php get_header(); ?>
<main id="primary" class="site-main">
<?php while ( have_posts() ) : the_post(); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="entry-header">
<?php the_title( '<h1 class="entry-title">', '</h1>' ); ?>
</header>
<div class="entry-content">
<?php the_content(); ?>
</div>
</article>
<?php endwhile; ?>
</main>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
اگر میخواهید تغییرات را در چایلد تم اعمال کنید، همان اصل را رعایت کنید: فایل والد را کپی کنید و تغییرات را روی نسخه چایلد اعمال کنید. برای مطالعه بیشتر، مقاله چگونه قالب آماده را سفارشی کنیم را توصیه میکنم.
راهحل ریشه سوم: بازنشانی پیوندهای یکتا
به «تنظیمات ← پیوندهای یکتا» بروید و بدون تغییر، روی «ذخیره تغییرات» کلیک کنید. این کار قوانین بازنویسی را دوباره میسازد. اگر این کار جواب نداد، با دسترسی به هاست، فایل .htaccess را در ریشه سایت بررسی کنید — این فایل در سرورهای Apache مسئول بازنویسی URL است.
راهحل ریشه چهارم: مدیریت تعارض افزونهها
اگر افزونهای مثل Yoast یا Rank Math برگهها را noindex علامتگذاری کرده، به تنظیمات افزونه بروید و بخش «انواع محتوا» (Content Types) را بررسی کنید. مطمئن شوید که برگهها در sitemap و برای ایندکس فعال هستند. اگر افزونهای مانند Members یا User Role Editor دسترسی به برگهها را محدود کرده، تنظیمات نقشهای کاربری را بررسی کنید.
راهحل ریشه پنجم: رفع خطای PHP
اگر خطای PHP در لاگ میبینید، ابتدا با فعال کردن حالت دیباگ در wp-config.php، خطا را دقیقتر پیدا کنید:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
سپس فایل wp-content/debug.log را بررسی کنید. برای مطالعه دقیقتر درباره دیباگ، مقاله دیباگ کردن کدهای سفارشی وردپرس را توصیه میکنم.
راهحل ریشه ششم: پاک کردن کش
ترتیب اصولی پاک کردن کش: کش مرورگر، کش افزونه (مثل WP Rocket یا LiteSpeed)، کش سرور، و در نهایت کش CDN. برای مطالعه بیشتر درباره کش، مقاله بهینهسازی سرعت سایت چیست را ببینید.
راهحل ریشه هفتم: بازبینی ساختار قالب
اگر قالب شما از چند فایل template اختصاصی استفاده میکند، اطمینان حاصل کنید که هر فایل، حلقه اصلی و فراخوانی the_content() را دارد. یک الگوی مقاوم، همیشه شامل header، main loop، footer، و sidebar است. برای مطالعه الگوهای حرفهای، مقاله بررسی مهمترین امکانات یک قالب حرفهای را توصیه میکنم.
در حل مشکل نمایش برگهها، همیشه از لایه تنظیمات شروع کنید، نه از لایه کد؛ چرا که اکثر دلایل در لایه تنظیمات پنهان است.
سلسلهمراتب قالب: نقشه راه درست برگهها
برای درک عمیق این مشکل، باید سلسلهمراتب قالب وردپرس را بشناسید. وقتی کاربری URL یک برگه را درخواست میکند، وردپرس بهترتیب زیر دنبال فایل قالب میگردد و اولین فایلی که پیدا کند را بارگذاری میکند:
- template-name.php — اگر برگه در ویرایشگر یک قالب اختصاصی انتخاب کرده باشد (مثلاً «قالب تمامعرض»)
- page-{slug}.php — اگر برگه slug مشخصی داشته باشد (مثلاً
page-services.php) - page-{id}.php — اگر برگه شناسه مشخصی داشته باشد (مثلاً
page-42.php) - page.php — قالب عمومی برای همه برگهها
- singular.php — قالب برای همه محتواهای تک (از وردپرس ۴.۳)
- index.php — آخرین مرحله، قالب پیشفرض
نکته کلیدی: اگر فایل page-services.php در قالب شما وجود دارد اما اشتباهاً برای یک slug دیگر استفاده میشود، یا محتوای آن برای برگه فعلی مناسب نیست، ممکن است برگه نمایش داده نشود یا ناقص باشد. همیشه قبل از ساخت یک فایل template اختصاصی، مطمئن شوید که نام فایل با slug برگه مطابقت دارد.
نکته دوم: در بعضی قالبها، توسعهدهنده از فایل singular.php برای رندر همه انواع محتوا (نوشته و برگه) استفاده میکند. اگر این فایل خطا داشته باشد، هم نوشتهها و هم برگهها با مشکل مواجه میشوند. برای مطالعه بیشتر درباره ساختار قالب، مقاله ساخت قالب اختصاصی وردپرس چه مراحلی دارد را توصیه میکنم.
نکته سوم: اگر قالب شما از ساختار FSE (Full Site Editing) استفاده میکند — یعنی از فایلهای .html در پوشه templates بهجای فایلهای PHP — سلسلهمراتب متفاوت است. در این حالت، برگهها از فایلهای page.html یا singular.html استفاده میکنند. اگر این فایلها در پوشه templates قالب شما وجود نداشته باشند یا خطا داشته باشند، برگهها نمایش داده نمیشوند. برای مطالعه بیشتر درباره قالبهای FSE، مقاله گوتنبرگ و آینده ویرایش محتوا در وردپرس را ببینید.
استراتژیهای پیشگیری در بلندمدت
پیشگیری از این خطا، نیازمند نظم در چرخه توسعه و انتخاب است. در تجربهام، رعایت این نکات بیشترین بازدهی را داشته:
۱. نگهداری استاندارد فایلهای قالب
همیشه فایل page.php را در قالب خود داشته باشید، حتی اگر از فایلهای template اختصاصی استفاده میکنید. این فایل بهعنوان یک نقطه بازگشت (Fallback) عمل میکند و اگر برگهای قالبی نداشت، به این فایل رجوع میشود.
۲. استفاده از چایلد تم برای سفارشیسازی
هرگونه تغییر در ساختار قالب را در چایلد تم انجام دهید. این کار تضمین میکند که با آپدیت والد، تغییرات شما باقی میماند و در صورت بروز مشکل، میتوانید با غیرفعال کردن چایلد تم، به حالت اولیه برگردید.
۳. مستندسازی قالبهای اختصاصی
اگر از فایلهای template اختصاصی استفاده میکنید، یک فایل مستندات ساده در قالب خود داشته باشید که در آن مشخص شده باشد هر فایل برای کدام slug استفاده میشود. این کار در آینده از سردرگمی جلوگیری میکند.
۴. تست بعد از هر تغییر تنظیمات
هر بار که تنظیمات خواندن را تغییر میدهید، سایت را در incognito تست کنید. کش میتواند تغییرات را پنهان کند و شما را به اشتباه بیندازد.
۵. استفاده از ابزارهای حرفهای
افزونههایی مثل Query Monitor یا Debug Bar به شما نشان میدهند که کدام فایل قالب بارگذاری شده است. این اطلاعات در عیبیابی سریع بسیار ارزشمند است. برای مطالعه بیشتر درباره ابزارهای توسعه، مقاله افزونههای ضروری مرورگر برای توسعهدهندگان را ببینید.
۶. مدیریت کش با درایت
اگر از افزونه کش استفاده میکنید، صفحات برگه را در فهرست استثنا (Exclude) قرار دهید تا در حین توسعه، تغییرات بلافاصله اعمال شوند. بعد از اتمام توسعه، این استثنا را حذف کنید.
۷. پایش خطاهای PHP
در محیط استجینگ، حالت دیباگ را فعال کنید و بهطور مداوم لاگ را بررسی کنید. خطاهای PHP که در حین بارگذاری برگه رخ میدهند، در همان لحظه قابل تشخیص هستند.
پرسشهای پرتکرار درباره نمایش برگهها
چرا برگهها در پیشخوان میبینم اما در سایت نمایش داده نمیشوند؟
این نشانه کلاسیک عدم رندر است. سه احتمال: تنظیمات خواندن، فایل page.php قالب، یا سلسلهمراتب قالب. ابتدا تنظیمات خواندن را بررسی کنید، سپس فایل قالب.
چرا برگهها با خطای ۴۰۴ نمایش داده میشوند؟
این حالت معمولاً بهخاطر پیوندهای یکتا است. به «تنظیمات ← پیوندهای یکتا» بروید و بدون تغییر، ذخیره کنید. اگر مشکل حل نشد، فایل .htaccess را بررسی کنید.
تفاوت برگه و نوشته در وردپرس چیست؟
برگهها ساختار سلسلهمراتبی دارند و از فایلهای page.php و page-{slug}.php استفاده میکنند. نوشتهها از فایلهای single.php و single-{post_type}.php استفاده میکنند و بهطور پیشفرض در آرشیو دستهبندی نمایش داده میشوند.
آیا مشکل میتواند از افزونه سئو باشد؟
بله، اگر افزونه سئو برگهها را noindex علامتگذاری کرده باشد یا در sitemap قرار نداده باشد، کاربر ممکن است تصور کند که برگه نمایش داده نمیشود. تنظیمات «انواع محتوا» در افزونه سئو را بررسی کنید.
چطور بفهمم کدام فایل قالب برای برگه من بارگذاری میشود؟
از افزونه Query Monitor یا Debug Bar استفاده کنید. در بخش Template، نام فایل قالب بارگذاریشده را میبینید. همچنین میتوانید در فایل functions.php از هوک template_include استفاده کنید تا فایل قالب فعلی را در نوار ابزار نمایش دهید.
آیا استفاده از قالبهای FSE میتواند باعث این مشکل شود؟
بله. در قالبهای FSE، برگهها از فایلهای HTML در پوشه templates استفاده میکنند. اگر این فایلها وجود نداشته باشند یا خطا داشته باشند، برگهها نمایش داده نمیشوند. فایلهای page.html و singular.html را بررسی کنید.
آیا مشکل میتواند از سمت دیتابیس باشد؟
در بعضی موارد نادر، بله. اگر جدول wp_posts خراب شده باشد، ممکن است برگهها در پیشخوان نمایش داده شوند اما در سایت نه. برای بررسی، از دستور CHECK TABLE wp_posts; استفاده کنید.
چطور از بروز این مشکل در آینده جلوگیری کنم؟
راههای پیشگیری در بخش «استراتژیهای پیشگیری» توضیح داده شده. مهمترین نکته: همیشه از چایلد تم استفاده کنید و بعد از هر تغییر، سایت را در incognito تست کنید.
کالبدشکافی فنی: وردپرس چطور برگهها را رندر میکند؟
برای درک عمیق این مکانیزم، باید بدانید وردپرس چطور یک درخواست برگه را پردازش میکند. وقتی کاربری URL یک برگه مثل example.com/about/ را وارد میکند، این چرخه طی میشود:
- URL Parsing: مرورگر درخواست را به سرور ارسال میکند. سرور (معمولاً Apache یا Nginx) درخواست را به
index.phpریشه سایت هدایت میکند. - WP Bootstrap: فایل
wp-load.phpبارگذاری میشود که خودشwp-settings.phpرا فراخوانی میکند. این فایل هسته وردپرس و افزونهها را بارگذاری میکند. - URL Rewriting: وردپرس از قوانین بازنویسی URL (که در جدول
wp_optionsبا کلیدrewrite_rulesذخیره شده) استفاده میکند تا URL درخواست را به پارامترهای کوئری تبدیل کند. - Query Parsing: وردپرس یک شیء
WP_Queryمیسازد و بر اساس URL، نوع محتوای درخواستی را تشخیص میدهد — در اینجا، یک برگه با slug مشخص. - Template Resolution: وردپرس از تابع
get_page_template()استفاده میکند تا بر اساس سلسلهمراتب قالب، فایل مناسبی برای رندر انتخاب کند. - Template Loading: فایل انتخابشده بارگذاری میشود. این فایل باید شامل
get_header()، حلقه اصلی (while ( have_posts() ))، وget_footer()باشد. - Output Rendering: خروجی به HTML تبدیل و به کاربر ارسال میشود.
نکته مهم و کمتر شناختهشده: در مرحله پنجم، اگر وردپرس فایل قالب مناسبی پیدا نکند، به ترتیب سلسلهمراتب به عقب برمیگردد. اگر در نهایت به index.php برسد و این فایل هم حلقه اصلی را نداشته باشد، صفحه خالی نمایش داده میشود. این موضوع، یکی از شایعترین دلایل نمایش نیافتن برگهها در قالبهای سفارشی است که توسعهدهنده حلقه اصلی را فراموش کرده است.
نکته دوم: در مرحله چهارم، اگر پیوندهای یکتا درست تنظیم نشده باشند، URL بهدرستی به پارامترهای کوئری تبدیل نمیشود و وردپرس نمیتواند تشخیص دهد که درخواست برای یک برگه است. در این حالت، به جای برگه، یک ۴۰۴ یا صفحه اصلی نمایش داده میشود.
نکته سوم: در قالبهای FSE (Full Site Editing)، مرحله پنجم کاملاً متفاوت است. بهجای فایلهای PHP، وردپرس از فایلهای HTML در پوشه templates استفاده میکند و یک موتور رندر مبتنی بر بلاک، این فایلها را به خروجی تبدیل میکند. این موتور از خود فایل theme.json و ساختار بلاکها استفاده میکند. اگر این فایلها بهدرستی ساخته نشده باشند، برگهها نمایش داده نمیشوند. برای مطالعه بیشتر درباره کدنویسی وردپرس در قالبهای FSE، توصیه میکنم.
نکته چهارم و مهمتر: در همه مراحل، وردپرس از مکانیزم Caching API استفاده میکند. اگر نتایج این مراحل در کش ذخیره شده باشند، ممکن است بعد از تغییر تنظیمات، همچنان نتایج قدیمی نمایش داده شوند. به همین دلیل، همیشه بعد از هر تغییر، کش را پاک کنید — این اصلی است که در افزونههای وردپرس چگونه روی سرعت سایت اثر میگذارند هم روی آن تأکید کردهام.
مطالعه موردی: احیای برگههای خدمات یک سایت شرکتی
یک سایت شرکتی با حدود ۱۵ برگه خدماتی، بعد از آپدیت قالب، با مشکل جدی مواجه شد: برگههای خدمات کاملاً از سایت ناپدید شدند. تیم توسعه ابتدا فکر کرد که قالب اشکال دارد، سپس سرور را متهم کرد، اما در نهایت ریشه مشکل جای دیگری بود.
علائم:
- همه برگهها در پیشخوان سرجایشان بودند
- برگه اصلی سایت کار میکرد
- برگههای داخلی با خطای ۴۰۴ یا صفحه خالی مواجه میشدند
- هیچ خطای PHP در لاگ نبود
- مشکل بعد از آپدیت قالب به نسخه جدید ظاهر شد
تشخیص:
با بررسی دقیق، مشخص شد که قالب جدید فایل page-services.php را با یک نسخه بهروز جایگزین کرده. اما در نسخه جدید، توسعهدهنده یک شرط اشتباه اضافه کرده بود:
if ( ! is_user_logged_in() ) {
wp_redirect( home_url( '/' ) );
exit;
}
این کد باعث میشد که کاربران غیر واردشده به صفحه اصلی هدایت شوند. در نتیجه، برگههای خدمات برای همه کاربران ناشناس ناپدید شده بودند. تیم توسعه اصلاً متوجه این کد نشده بود، چون در نسخه قدیمی این شرط وجود نداشت.
درمان:
- ابتدا این شرط را حذف کردیم.
- سپس با استفاده از یک بکاپ از نسخه قبل، فایل را با استفاده از
diffمقایسه کردیم تا مطمئن شویم تغییرات ناخواسته دیگری وجود ندارد. - در نهایت، یک تست جامع روی همه برگهها با نقشهای کاربری مختلف انجام دادیم.
درسآموخته:
عدم نمایش برگهها همیشه بهمعنی نبود برگه نیست؛ گاهی بهمعنی وجود یک شرط اشتباه در فایل قالب است. همیشه در آپدیت قالب، تغییرات را مرحلهبهمرحله تست کنید و اگر امکان دارد، از محیط استجینگ استفاده کنید. برای مطالعه موردی مشابه، مقاله چگونه قالب وردپرس را بدون آسیب به سایت تغییر دهیم را توصیه میکنم.
خط بسته: هدایت مسیر، نه فقط ساختن صفحه
عدم نمایش برگهها در قالب وردپرس، در نگاه اول یک خطای ناامیدکننده است، اما در واقع یک پیام دقیق معماری است: یکی از چهار لایه تنظیمات، ثبت، قالب، یا کش در جایی پاره شده. سؤال درست این نیست «چطور برگه را برگردانم»، بلکه این است «کدام لایه از این زنجیره در پروژه من ضعیف است».
از تجربهام، شش اصل عملی بیشترین بازدهی را داشتهاند: اول، همیشه از لایه تنظیمات شروع کنید — بیش از ۳۰٪ مشکلات در همین لایه پنهان است. دوم، فایل page.php را در قالب خود داشته باشید، حتی اگر از فایلهای اختصاصی استفاده میکنید. سوم، در مهاجرت قالب، فایلهای قالب را مرحلهبهمرحله تست کنید و از diff استفاده کنید. چهارم، همیشه از چایلد تم برای سفارشیسازی استفاده کنید. پنجم، بعد از هر تغییر، کش را پاک کنید و در incognito تست کنید. ششم، از ابزارهایی مثل Query Monitor برای دیدن فایل قالب فعلی استفاده کنید.
در نهایت، اگر روی سایت پربازدیدی کار میکنید که برگههای مهمی مثل «خدمات» یا «درباره ما» دارد، توصیه میکنم همیشه یک برگه پشتیبان (Fallback) داشته باشید که در صورت مشکل، کاربران با صفحه خالی مواجه نشوند. این کار را میتوان با کدی ساده در functions.php انجام داد — همان اصلی که در افزودن کد سفارشی به وردپرس توضیح دادهام.
اگر روی پروژهای با این مشکل مواجه شدهاید و روش خاصی برای حلش پیدا کردهاید — بهخصوص اگر با قالبهای FSE، چایلد تم، یا سلسلهمراتب قالب سر و کار داشتهاید — خوشحال میشوم تجربهتان را بشنوم. بگویید در آن پروژه، مقصر اصلی چه بود: تنظیمات خواندن، فایل page.php، یا سلسلهمراتب قالب؟ و اگر در تشخیص آن به نکتهای رسیدید که در این مقاله نبود، بگویید تا در نسخه بعدی همان زاویه را عمیقتر باز کنم. 📄