ویژگی تصویر

آموزش تابع is_front_page() در وردپرس و کاربرد آن

  /  وردپرس   /  تابع is_front_page در وردپرس
بنر تبلیغاتی الف
wp - wordpress - وردپرس

تابع is_front_page() در وردپرس یک conditional tag است که تشخیص می‌دهد صفحه‌ای که کاربر مشاهده می‌کند آیا صفحهٔ اول سایت (Front Page) است یا خیر. این تابع نقش مهمی در شخصی‌سازی قالب، بارگذاری اسکریپت‌ها/استایل‌ها فقط برای صفحهٔ اول، و تنظیمات ریدایرکت یا نمایش محتوای ویژه دارد.

چه زمانی is_front_page() مقدار true برمی‌گرداند؟

  • وقتی در بخش تنظیمات وردپرس (Settings → Reading) گزینهٔ “Front page displays” روی “A static page” تنظیم شده و کاربر صفحهٔ مشخص‌شده به‌عنوان صفحهٔ نخست را می‌بیند.
  • اگر “Front page displays” روی “Your latest posts” باشد، هنگام مشاهدهٔ صفحهٔ اصلی سایت نیز is_front_page() مقدار true برمی‌گرداند.
  • نکتهٔ مهم: در حالت آخر (نمایش آخرین نوشته‌ها) هر دو تابع is_front_page() و is_home() مقدار true بازمی‌گردانند.

تفاوت is_front_page() با is_home()

تابعحالت trueکاربرد متداول
is_front_page()وقتی کاربر صفحهٔ اول سایت را می‌بیند (چه صفحهٔ ثابت و چه لیست نوشته‌ها)سفارشی‌سازی نمایش صفحهٔ اصلی، انبارکردن اسکریپت/استایل مخصوص صفحهٔ اول
is_home()وقتی کاربر صفحهٔ اندکس نوشته‌ها (Blog Index) را می‌بیندتشخیص صفحهٔ وبلاگ برای نمایش لیست نوشته‌ها، استفاده در حلقهٔ اصلی نوشته‌ها

نکات مهم و محدودیت‌ها

  • تابع is_front_page() بر اساس کوئری اصلی (main query) کار می‌کند. اگر از WP_Query سفارشی استفاده کنید، این تابع وضعیت کوئری اصلی را بررسی می‌کند، نه کوئری دلخواه.
  • در برخی هوک‌های خیلی زود (مثل plugins_loaded) ممکن است کوئری اصلی هنوز تنظیم نشده باشد؛ بنابراین نباید توقع داشت که is_front_page() همیشه در آنجا درست کار کند. هوک‌های مناسب برای استفاده از این تابع شامل template_redirect، wp, wp_enqueue_scripts و خود فایل‌های قالب هستند.
  • در صفحات ادمین (پیشخوان)، is_front_page() همواره false است؛ این تابع فقط برای فرانت‌اند سایت کاربرد دارد.

مثال‌های عملی و کد

۱) نمایش بلوک قهرمان (hero) تنها در صفحهٔ اول

if ( is_front_page() ) {
    get_template_part( 'template-parts/hero' );
}

توضیح: این قطعه کد بررسی می‌کند که آیا صفحهٔ جاری صفحهٔ اول است یا خیر. در صورت true، فایل template-parts/hero.php بارگذاری می‌شود تا بخش قهرمان فقط در صفحهٔ اصلی نمایش داده شود.

۲) بارگذاری یک CSS یا JS فقط در صفحهٔ اول

function theme_enqueue_front_page_assets() {
    if ( ! is_admin() && is_front_page() ) {
        wp_enqueue_style( 'front-hero-style', get_template_directory_uri() . '/css/front-hero.css', array(), '1.0' );
        wp_enqueue_script( 'front-hero-script', get_template_directory_uri() . '/js/front-hero.js', array('jquery'), '1.0', true );
    }
}
add_action( 'wp_enqueue_scripts', 'theme_enqueue_front_page_assets' );

توضیح: در این نمونه، ابتدا چک می‌کنیم که فراخوانی در بخش ادمین نباشد و سپس is_front_page() را بررسی می‌کنیم. در نتیجه فایل‌های CSS و JS مربوط به صفحهٔ اول فقط وقتی بارگذاری می‌شوند که کاربر صفحهٔ اول را ببیند. این به کاهش بار و افزایش سرعت صفحه‌های دیگر کمک می‌کند.

۳) ریدایرکت کردن صفحهٔ اول به یک صفحهٔ دلخواه

function redirect_front_page_to_custom() {
    if ( is_front_page() && ! is_user_logged_in() ) {
        wp_redirect( home_url( '/welcome/' ) );
        exit;
    }
}
add_action( 'template_redirect', 'redirect_front_page_to_custom' );

توضیح: این کد زمانی که بازدیدکننده ناشناس صفحهٔ اول را باز می‌کند، او را به /welcome/ هدایت می‌کند. از hook مناسب template_redirect استفاده شده تا قبل از خروجی ارسال ریدایرکت انجام شود.

چند سناریوی پیشرفته و نکات تخصصی

  • اگر قالب شما از صفحهٔ اول به‌عنوان نمایش نوشته‌ها استفاده می‌کند و شما می‌خواهید در همان صفحه یک کوئری ثانویه اجرا کنید، مراقب باشید که is_front_page() مربوط به کوئری اصلی است. برای تغییر کوئری اصلی از pre_get_posts استفاده کنید تا شرط‌ها به‌درستی اعمال شوند.
  • استفادهٔ هم‌زمان is_front_page() و is_home(): وقتی هر دو true باشند یعنی صفحهٔ اصلی لیست نوشته‌ها است؛ این حالت را برای اعمال استایل یا نمایش محتوا به‌طور اختصاصی بررسی کنید.
  • در قالب‌های چندزبان (مثل WPML یا Polylang) مراقب باشید که ترجمهٔ صفحهٔ اول و تعیین صفحهٔ ثابت ممکن است باعث تغییر slug‌ یا آرایهٔ گزینه‌ها شود. همیشه از توابع API افزونه برای بررسی صفحهٔ فعلی در شرایط چندزبانه استفاده کنید.

بهینه‌سازی و سازگاری

  • برای جلوگیری از اجرای غیرضروری چک‌ها در بک‌اند، همیشه is_admin() را قبل از بررسی‌های فرانت‌اند به‌کار ببرید.
  • در صورت نیاز به اعمال تغییرات در کوئری صفحهٔ اول، از pre_get_posts و بررسی is_main_query() و is_front_page() استفاده کنید تا فقط کوئری اصلی تحت تأثیر قرار گیرد.
  • برای عملکرد بهتر، منابعی که فقط صفحهٔ اول نیاز دارد را lazy-load یا conditional enqueue کنید تا سرعت صفحات دیگر تحت تاثیر قرار نگیرد.

خلاصهٔ کاربردها

  • نمایش یا مخفی‌کردن عناصر طراحی مخصوص صفحهٔ اول
  • بارگذاری اسکریپت/استایل اختصاصی برای صفحهٔ اول
  • ریدایرکت یا تغییر رفتار سایت فقط هنگام مشاهدهٔ صفحهٔ اصلی
  • تغییر کوئری‌ها یا افزودن محتوای خاص به کوئری اصلی صفحهٔ اول

تابع is_front_page() یک ابزار ساده اما قدرتمند برای کنترل تجربهٔ کاربران در صفحهٔ اول سایت است. با رعایت نکات مربوط به هوک‌ها و بررسی کوئری اصلی، می‌توانید تغییرات هدفمند، بهینه و بدون اثر جانبی روی باقی صفحات اعمال کنید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: