تابع is_home چطور کار میکند؟
تابع is_home برای تشخیص صفحه وبلاگ در وردپرس؛ بررسی پارامترها، تفاوت با is_front_page، نکات کلیدی و اشتباهات رایج در قالب.
چرا تشخیص صفحه وبلاگ اهمیت دارد؟
صفحه وبلاگ، صفحهای است که آخرین نوشتههای سایت را فهرست میکند. این صفحه معمولاً ساختار نمایش متفاوتی از نوشته تکی و برگه دارد: چکیده نوشتهها، تصویر شاخص، تاریخ و نام نویسنده در آن ظاهر میشوند و طراحی آن معمولاً بر پایه فهرست است. اگر در قالب، این صفحه از صفحه اصلی و سایر صفحات تشخیص داده نشود، نمیتوان این طراحی اختصاصی را بهدرستی پیاده کرد. تابعis_home() دقیقاً همین تشخیص را ممکن میکند و پایه تصمیمهای طراحی در صفحه وبلاگ است.
تابع is_home چیست؟
تابعis_home() یک تابع شرطی در هسته وردپرس است که در فایل wp-includes/query.php تعریف شده است. این تابع بررسی میکند که آیا صفحه فعلی همان صفحه وبلاگ است یا نه.
خروجی این تابع یک مقدار بولی است: true اگر صفحه فعلی صفحه وبلاگ باشد و false در غیر این صورت. این تابع هیچ پارامتر ورودی نمیگیرد.
نکته مهم این است که این تابع تنها برای حلقه اصلی (Main Query) معتبر است. اگر از WP_Query سفارشی استفاده کنید، مقدار نادرست برمیگرداند. برای مطالعه بیشتر روی کوئری سفارشی، میتوانید به راهنمای WP_Query مراجعه کنید.
امضای تابع و پارامترها
امضای این تابع بهشکل زیر است:function is_home() {
global $wp_query;
return $wp_query->is_home();
}
این تابع هیچ پارامتر ورودی نمیگیرد و تنها یک مقدار بولی برمیگرداند. این سادگی ظاهری، گاهی باعث اشتباه در استفاده میشود؛ بهخصوص زمانی که با is_front_page() اشتباه گرفته شود.
سازوکار داخلی تابع
تابعis_home() در واقع یک میانبر (Wrapper) برای متد is_home() روی شیء جهانی $wp_query است. این متد در کلاس WP_Query تعریف شده و بر اساس تنظیمات «تنظیمات > خواندن» تصمیم میگیرد.
منطق داخلی این متد به این ترتیب است:
- اگر در تنظیمات، صفحه اصلی به آخرین نوشتهها (Latest Posts) تنظیم شده باشد، صفحه اصلی سایت همان صفحه وبلاگ است و is_home() در آن true برمیگرداند.
- اگر صفحه اصلی به یک برگه ایستا تنظیم شده باشد و صفحه وبلاگ در «تنظیمات > خواندن» انتخاب شده باشد، is_home() فقط در آن صفحه وبلاگ true برمیگرداند.
نکته مهم دیگر این است که وردپرس برای صفحه وبلاگ، فایل home.php را در اولویت اول قرار میدهد. اگر این فایل وجود نداشته باشد، از index.php استفاده میکند.
تفاوت is_home با is_front_page
این دو تابع پرتکرارترین اشتباه توسعهدهندگان وردپرس را میسازند. تفاوت اصلی آنها در مفهوم است: -is_home(): صفحه وبلاگ (Blog Page) را تشخیص میدهد، یعنی صفحهای که آخرین نوشتهها را فهرست میکند.
- is_front_page(): صفحه اصلی سایت (Front Page) را تشخیص میدهد، یعنی آن صفحهای که اولین بار با بازکردن دامنه نمایش داده میشود.
در سایتهای ساده، این دو یکی هستند. اما در سایتهای حرفهای با صفحه اصلی ایستا و وبلاگ مجزا، این دو صفحه متفاوت هستند و باید تفکیک شوند.
برای مطالعه دقیقتر درباره is_front_page، میتوانید به راهنمای is_front_page مراجعه کنید.
کاربردهای عملی در قالب
یکی از رایجترین کاربردهای این تابع، اضافه کردن کلاس CSS اختصاصی به بدنه است:add_filter( 'body_class', 'myplugin_body_classes' );
function myplugin_body_classes( $classes ) {
if ( is_home() ) {
$classes[] = 'blog-listing-page';
}
return $classes;
}
تابع body_class در راهنمای body_class به تفصیل بررسی شده است.
کاربرد دیگر، نمایش عنوان مناسب در بالای صفحه وبلاگ است:
if ( is_home() ) {
echo '' . esc_html( get_the_title( get_option( 'page_for_posts' ) ) ) . '
';
}
نکته مهم: در این الگو، از get_option( 'page_for_posts' ) برای دریافت ID برگه وبلاگ استفاده میشود. این گزینه در «تنظیمات > خواندن» تنظیم میشود. اگر صفحه اصلی به آخرین نوشتهها تنظیم شده باشد، این گزینه ممکن است خالی باشد و باید با شرط مناسب مدیریت شود.
تنظیمات وبلاگ و اثر آن بر تابع
در «تنظیمات > خواندن» وردپرس، میتوانید صفحه اصلی را به یکی از دو حالت زیر تنظیم کنید: - آخرین نوشتهها (Your latest posts) - یک صفحه ایستا (A static page) در حالت اول، صفحه اصلی و صفحه وبلاگ یکی هستند. در حالت دوم، میتوانید یک برگه دیگر را بهعنوان صفحه وبلاگ انتخاب کنید. این تنظیم، رفتارis_home() را کاملاً تغییر میدهد. توسعهدهندگان حرفهای معمولاً در قالب به هر دو حالت توجه میکنند و از ترکیب is_home() و is_front_page() برای تصمیمگیری دقیقتر استفاده میکنند.
ارتباط با سلسلهمراتب قالب
وردپرس برای نمایش صفحه وبلاگ، فایلhome.php را در اولویت اول قرار میدهد. اگر این فایل وجود نداشته باشد، از index.php استفاده میکند.
اگر صفحه وبلاگ یک برگه باشد (حالت دوم تنظیمات)، وردپرس از سلسلهمراتب برگهها استفاده میکند و فایل page.php یا page-{slug}.php را بارگذاری میکند، مگر آنکه فایل home.php وجود داشته باشد.
برای مطالعه دقیقتر روی سلسلهمراتب قالب، میتوانید به راهنمای get_template_part، راهنمای get_header و راهنمای get_footer مراجعه کنید.
نکات امنیتی و اشتباهات رایج
اشتباه اول، اشتباه گرفتن باis_front_page() است. این پرتکرارترین اشتباه است و معمولاً به نمایش نادرست بخشهای صفحه اصلی منجر میشود.
اشتباه دوم، نبود شرط مناسب در قالب است. اگر در فایل home.php از is_home() استفاده کنید، شرط زائد است. اما اگر در فایل مشترک مانند index.php استفاده میکنید، شرط ضروری است.
اشتباه سوم، نبود escape در خروجی است. اگر عنوان یا محتوای صفحه وبلاگ را چاپ میکنید، باید از توابع escape استفاده کنید. راهنمای این توابع در صفحه esc_html آمده است.
اشتباه چهارم، نبود تست در هر دو حالت تنظیمات خواندن است. باید هم حالت «آخرین نوشتهها» و هم حالت «برگه ایستا» را در محیط staging تست کنید.
اشتباه پنجم، استفاده از این تابع در حلقه سفارشی است. این تابع تنها برای حلقه اصلی معتبر است.
تحلیل فنی پیشرفته
در نگاه مهندسی، تابعis_home() یک نقطه تصمیم (Decision Point) در لایه نمایش است که بر چند لایه معماری وردپرس اثر میگذارد. لایه اول لایه کوئری است. وردپرس با تجزیه URL و ساخت WP_Query، بررسی میکند که آیا این URL با صفحه وبلاگ مطابقت دارد یا نه. سپس متد is_home() بر اساس این بررسی تصمیم میگیرد.
لایه دوم لایه تنظیمات است. برخلاف بسیاری از توابع شرطی، این تابع به تنظیمات «تنظیمات > خواندن» وابسته است. این وابستگی، یک نکته مهم در تست و مستندسازی قالب است.
لایه سوم لایه سئو است. صفحه وبلاگ معمولاً یکی از مهمترین صفحات فهرستمحور سایت است و باید متا تگها و داده ساختاریافته آن بهدرستی تنظیم شود. برای مطالعه درباره سئوی صفحات فهرستی، میتوانید به راهنمای سئوی صفحهبندی مراجعه کنید.
لایه چهارم لایه کشینگ است. صفحه وبلاگ معمولاً اولین صفحهای است که در کش ذخیره میشود و این کش میتواند بیشترین اثر را روی سرعت داشته باشد. همچنین اگر صفحهبندی داشته باشد، هر صفحه باید کش مجزایی داشته باشد.
لایه پنجم لایه تست است. تستهای End-to-End باید هم صفحه وبلاگ بهعنوان صفحه اصلی و هم صفحه وبلاگ مجزا را پوشش دهند.
در معماری Headless WordPress، این تابع در سمت بکاند اجرا میشود و فرانتاند باید بر اساس نوع صفحه وبلاگ، نمایش متفاوتی پیاده کند. برای مطالعه درباره REST API به راهنمای register_rest_route مراجعه کنید.
پرسشهای پرتکرار
تفاوتis_home و is_front_page چیست؟ is_home صفحه وبلاگ را هدف میگیرد و is_front_page صفحه اصلی سایت را. در بعضی تنظیمات، این دو یکی هستند.
آیا is_home در حلقه سفارشی کار میکند؟ خیر، این تابع تنها بر پایه کوئری اصلی کار میکند.
آیا is_home به تنظیمات خواندن وابسته است؟ بله، این تابع بر اساس تنظیمات «تنظیمات > خواندن» تصمیم میگیرد.
چطور بفهمیم صفحه اصلی همان وبلاگ است؟ اگر هر دو تابع is_home() و is_front_page() همزمان true برمیگردانند، صفحه اصلی همان وبلاگ است.
آیا is_home در فایل home.php زائد است؟ بله، اما در فایلهای مشترک ضروری است.
نتیجه و مسیر ادامه
تابعis_home() یک ابزار دقیق برای تشخیص صفحه وبلاگ در وردپرس است. استفاده درست از آن یعنی درک دقیق تفاوت با is_front_page()، توجه به تنظیمات خواندن، escape در خروجی و تست در هر دو حالت. اشتباههای کوچک در این تابع اغلب به نمایش نادرست بخشهای صفحه اصلی یا وبلاگ منجر میشوند و میتوانند تجربه کاربری را تضعیف کنند.
اگر این تابع را در پروژهای واقعی به کار بردهاید و رفتار غیرمنتظرهای دیدهاید — بهخصوص در ترکیب با قالبهای پیچیده یا Child Themeها — تجربهتان میتواند راهگشای دیگران باشد. کدام بخش بیشترین زمان را از شما گرفت؟ دیدگاه خود را بنویسید.