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

چرا تشخیص صفحه اصلی اهمیت دارد؟

صفحه اصلی سایت، اولین صفحه‌ای است که اکثر بازدیدکنندگان با آن مواجه می‌شوند و به همین دلیل نقش تعیین‌کننده‌ای در برداشت اولیه کاربر از برند دارد. این صفحه معمولاً طراحی متفاوتی از سایر صفحات دارد: بخش Hero، پیام اصلی برند، فراخوان‌های اقدام مهم و بخش‌های ویژه در آن قرار می‌گیرند. اگر در قالب، صفحه اصلی از سایر صفحات تشخیص داده نشود، نمی‌توان این طراحی اختصاصی را به‌درستی پیاده کرد. تابع is_front_page() دقیقاً همین تشخیص را ممکن می‌کند و پایه تصمیم‌های طراحی و محتوایی در صفحه اصلی است.

تابع is_front_page چیست؟

تابع is_front_page() یک تابع شرطی در هسته وردپرس است که در فایل wp-includes/query.php تعریف شده است. این تابع بررسی می‌کند که آیا صفحه فعلی همان صفحه اصلی سایت است یا نه. خروجی این تابع یک مقدار بولی است: true اگر صفحه فعلی صفحه اصلی سایت باشد و false در غیر این صورت. این تابع هیچ پارامتر ورودی نمی‌گیرد. نکته مهم این است که این تابع تنها برای حلقه اصلی (Main Query) معتبر است. اگر از WP_Query سفارشی استفاده کنید، مقدار نادرست برمی‌گرداند. برای مطالعه بیشتر روی کوئری سفارشی، می‌توانید به راهنمای WP_Query مراجعه کنید.

امضای تابع و پارامترها

امضای این تابع به‌شکل زیر است:
function is_front_page() {
    global $wp_query;
    return $wp_query->is_front_page();
}
این تابع هیچ پارامتر ورودی نمی‌گیرد و تنها یک مقدار بولی برمی‌گرداند. این سادگی ظاهری، گاهی باعث اشتباه در استفاده می‌شود؛ به‌خصوص زمانی که با is_home() اشتباه گرفته شود.

سازوکار داخلی تابع

تابع is_front_page() در واقع یک میان‌بر (Wrapper) برای متد is_front_page() روی شیء جهانی $wp_query است. این متد در کلاس WP_Query تعریف شده و بر اساس تنظیمات «صفحه اصلی» و «صفحه وبلاگ» تصمیم می‌گیرد. منطق داخلی این متد به این ترتیب است: - اگر در تنظیمات، صفحه اصلی به یک برگه ایستا (Static Page) تنظیم شده باشد، بررسی می‌کند که آیا کوئری فعلی مربوط به آن برگه است. - اگر صفحه اصلی به آخرین نوشته‌ها (Latest Posts) تنظیم شده باشد، بررسی می‌کند که آیا کوئری فعلی همان کوئری صفحه اصلی وبلاگ است. به همین دلیل، رفتار این تابع به تنظیمات «تنظیمات > خواندن» بستگی دارد و می‌تواند در دو سایت با یک قالب، نتایج متفاوتی بدهد.

تفاوت is_front_page با is_home

این دو تابع پرتکرارترین اشتباه توسعه‌دهندگان وردپرس را می‌سازند. تفاوت اصلی آن‌ها در مفهوم است: - is_front_page(): صفحه اصلی سایت (Front Page) را تشخیص می‌دهد. یعنی آن صفحه‌ای که اولین بار با بازکردن دامنه نمایش داده می‌شود. - is_home(): صفحه وبلاگ (Blog Page) را تشخیص می‌دهد. یعنی آن صفحه‌ای که فهرست آخرین نوشته‌ها در آن نمایش داده می‌شود. در بسیاری از سایت‌ها، این دو مفهوم یکی هستند: صفحه اصلی، همان صفحه فهرست نوشته‌هاست. اما در سایت‌های حرفه‌ای که صفحه اصلی یک برگه ایستا است و وبلاگ در یک آدرس دیگر قرار دارد، این دو صفحه متفاوت هستند. مثال تفکیک: - اگر صفحه اصلی به آخرین نوشته‌ها تنظیم شده باشد: هر دو تابع true برمی‌گردانند. - اگر صفحه اصلی یک برگه ایستا باشد و وبلاگ در آدرس دیگری: is_front_page() فقط در صفحه اصلی true است و is_home() فقط در صفحه وبلاگ. برای مطالعه دقیق‌تر درباره is_home، می‌توانید به راهنمای is_home مراجعه کنید.

کاربردهای عملی در قالب

یکی از رایج‌ترین کاربردهای این تابع، اضافه کردن کلاس CSS اختصاصی به بدنه است:
add_filter( 'body_class', 'myplugin_body_classes' );
function myplugin_body_classes( $classes ) {
    if ( is_front_page() ) {
        $classes[] = 'front-page-layout';
    }
    return $classes;
}
تابع body_class در راهنمای body_class به تفصیل بررسی شده است. کاربرد دیگر، نمایش بخش Hero فقط در صفحه اصلی است. برای نمونه:
if ( is_front_page() ) {
    get_template_part( 'parts/hero' );
}
همچنین می‌توانید رفتار قالب را بر اساس اینکه صفحه اصلی برگه است یا وبلاگ، متفاوت کنید:
if ( is_front_page() && is_home() ) {
    // صفحه اصلی همان وبلاگ است
} elseif ( is_front_page() ) {
    // صفحه اصلی یک برگه ایستا است
}
این الگو در قالب‌های حرفه‌ای برای نمایش متفاوت صفحه اصلی بسیار رایج است.

تنظیمات خواندن و اثر آن بر تابع

در «تنظیمات > خواندن» وردپرس، گزینه‌ای به نام «نمایش صفحه اصلی» وجود دارد که می‌تواند دو مقدار بگیرد: - آخرین نوشته‌ها (Your latest posts) - یک صفحه ایستا (A static page) این تنظیم، رفتار is_front_page() و is_home() را کاملاً تغییر می‌دهد. در حالت اول، صفحه اصلی و صفحه وبلاگ یکی هستند. در حالت دوم، دو صفحه مجزا وجود دارد. توسعه‌دهندگان حرفه‌ای معمولاً در قالب خود به هر دو حالت توجه می‌کنند و از ترکیب is_front_page() و is_home() برای تصمیم‌گیری دقیق‌تر استفاده می‌کنند.

ارتباط با سلسله‌مراتب قالب

وردپرس برای نمایش صفحه اصلی، اگر یک برگه ایستا باشد، از سلسله‌مراتب قالب برگه‌ها استفاده می‌کند. اگر آخرین نوشته‌ها باشد، از home.php و در صورت نبود آن، از index.php استفاده می‌کند. نکته مهم این است که اگر صفحه اصلی یک برگه ایستا باشد، وردپرس فایل front-page.php را در اولویت اول قرار می‌دهد. بنابراین حتی اگر این برگه یک برگه معمولی باشد، می‌توان با ساخت front-page.php یک طراحی کاملاً اختصاصی برای آن پیاده کرد. برای مطالعه دقیق‌تر روی سلسله‌مراتب قالب، می‌توانید به راهنمای get_template_part، راهنمای get_header و راهنمای get_footer مراجعه کنید.

نکات امنیتی و اشتباهات رایج

اشتباه اول، اشتباه گرفتن با is_home() است. این پرتکرارترین اشتباه است و معمولاً به نمایش نادرست بخش‌های صفحه اصلی منجر می‌شود. اشتباه دوم، نبود شرط مناسب در قالب است. اگر در فایل front-page.php از is_front_page() استفاده کنید، شرط زائد است. اما اگر در فایل مشترک مانند page.php یا index.php استفاده می‌کنید، شرط ضروری است. اشتباه سوم، نبود escape در خروجی است. اگر عنوان یا محتوای صفحه اصلی را چاپ می‌کنید، باید از توابع escape استفاده کنید. راهنمای این توابع در صفحه esc_html آمده است. اشتباه چهارم، نبود تست در هر دو حالت تنظیمات خواندن است. باید هم حالت «آخرین نوشته‌ها» و هم حالت «برگه ایستا» را در محیط staging تست کنید. اشتباه پنجم، استفاده از این تابع در حلقه سفارشی است. این تابع تنها برای حلقه اصلی معتبر است.

تحلیل فنی پیشرفته

در نگاه مهندسی، تابع is_front_page() یک نقطه تصمیم (Decision Point) در لایه نمایش است که بر چند لایه معماری وردپرس اثر می‌گذارد. لایه اول لایه کوئری است. وردپرس با تجزیه URL و ساخت WP_Query، بررسی می‌کند که آیا این URL با صفحه اصلی مطابقت دارد یا نه. سپس متد is_front_page() بر اساس این بررسی تصمیم می‌گیرد. لایه دوم لایه تنظیمات است. برخلاف بسیاری از توابع شرطی، این تابع به تنظیمات «تنظیمات > خواندن» وابسته است. این وابستگی، یک نکته مهم در تست و مستندسازی قالب است. لایه سوم لایه سئو است. صفحه اصلی معمولاً مهم‌ترین صفحه سایت از نظر سئو است و باید متا تگ‌ها، داده ساختاریافته و بهینه‌سازی سرعت آن به‌صورت اختصاصی پیاده شود. برای مطالعه بیشتر روی این موضوع، می‌توانید به راهنمای معماری اطلاعات برای سئو مراجعه کنید. لایه چهارم لایه کشینگ است. صفحه اصلی معمولاً اولین صفحه‌ای است که کش می‌شود و این کش می‌تواند بیشترین اثر را روی سرعت داشته باشد. لایه پنجم لایه تست است. تست‌های End-to-End باید هم صفحه اصلی برگه و هم صفحه اصلی وبلاگ را پوشش دهند. مفاهیم پایه‌ای صفحه اصلی در Home Page در ویکی‌پدیا توضیح داده شده است. در معماری Headless WordPress، این تابع در سمت بک‌اند اجرا می‌شود و فرانت‌اند باید بر اساس نوع صفحه اصلی، نمایش متفاوتی پیاده کند. برای مطالعه درباره REST API به راهنمای register_rest_route مراجعه کنید.

پرسش‌های پرتکرار

تفاوت is_front_page و is_home چیست؟ is_front_page صفحه اصلی سایت را هدف می‌گیرد و is_home صفحه وبلاگ را. در بعضی تنظیمات، این دو یکی هستند. آیا is_front_page در حلقه سفارشی کار می‌کند؟ خیر، این تابع تنها بر پایه کوئری اصلی کار می‌کند. آیا is_front_page به تنظیمات خواندن وابسته است؟ بله، این تابع بر اساس تنظیمات «تنظیمات > خواندن» تصمیم می‌گیرد. چطور بفهمیم صفحه اصلی برگه است یا وبلاگ؟ با ترکیب is_front_page() و is_home(). آیا is_front_page در فایل front-page.php زائد است؟ بله، اما در فایل‌های مشترک ضروری است.

نتیجه و مسیر ادامه

تابع is_front_page() یک ابزار دقیق برای تشخیص صفحه اصلی سایت در وردپرس است. استفاده درست از آن یعنی درک دقیق تفاوت با is_home()، توجه به تنظیمات خواندن، escape در خروجی و تست در هر دو حالت. اشتباه‌های کوچک در این تابع اغلب به نمایش نادرست بخش‌های صفحه اصلی منجر می‌شوند و می‌توانند تجربه کاربری را تضعیف کنند. اگر این تابع را در پروژه‌ای واقعی به کار برده‌اید و رفتار غیرمنتظره‌ای دیده‌اید — به‌خصوص در ترکیب با قالب‌های پیچیده یا Child Theme‌ها — تجربه‌تان می‌تواند راهگشای دیگران باشد. کدام بخش بیشترین زمان را از شما گرفت؟ دیدگاه خود را بنویسید.