ویژگی تصویر

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

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

تابع is_home() در وردپرس یکی از conditional tags کلیدی است که برای تشخیص صفحهٔ «بلاگ» یا صفحه‌ای که آخرین نوشته‌ها را نشان می‌دهد استفاده می‌شود. این تابع به توسعه‌دهندگان قالب و افزونه کمک می‌کند تا محتوای متفاوت یا تنظیمات خاص را تنها در صفحهٔ اصلی بلاگ اعمال کنند.

تعریف و رفتار پایه‌ای

وقتی می‌گوییم صفحهٔ «home» در وردپرس، منظور صفحه‌ای است که در تنظیمات وردپرس (تنظیمات → خواندن) به‌عنوان «صفحهٔ نوشته‌ها» تعیین شده یا به‌صورت پیش‌فرض فهرستی از آخرین نوشته‌ها نمایش می‌دهد. تابع is_home() در این حالت مقدار true برمی‌گرداند.

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

این دو تابع معمولاً با هم اشتباه گرفته می‌شوند، اما تفاوت مهمی دارند:

  • is_front_page(): بررسی می‌کند که آیا صفحهٔ لندینگ اصلی سایت (Front Page) است یا خیر. اگر در تنظیمات وردپرس صفحهٔ ایستا برای صفحهٔ اصلی تنظیم شده باشد، آن صفحه true باز می‌گرداند.
  • is_home(): بررسی می‌کند که آیا صفحهٔ نمایش «آخرین نوشته‌ها» است یا خیر. حتی اگر صفحهٔ نوشته‌ها به صفحه‌ای اختصاصی اختصاص داده شده باشد، is_home() آن صفحه را تشخیص می‌دهد.
شرطنتیجه در صفحهٔ اصلی (صفحهٔ ایستا)نتیجه در صفحهٔ نوشته‌ها (Blog)
is_front_page()true (اگر صفحهٔ ایستا باشد)false
is_home()falsetrue

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

در ادامه چند سناریو و مثال کدنویسی می‌آوریم که نشان می‌دهد چطور از is_home() در قالب یا افزونه استفاده کنید.

1. بارگذاری استایل یا اسکریپت مخصوص صفحهٔ بلاگ

add_action('wp_enqueue_scripts', 'enqueue_blog_styles');
function enqueue_blog_styles() {
    if ( is_home() ) {
        wp_enqueue_style('blog-style', get_template_directory_uri() . '/css/blog.css');
    }
}

این کد یک استایل اختصاصی را فقط در صفحهٔ نمایش آخرین نوشته‌ها بارگذاری می‌کند. شرط is_home() باعث می‌شود فایل CSS فقط در صفحهٔ بلاگ وارد شود و از لود بی‌جهت در سایر صفحات جلوگیری شود که به بهینه‌سازی سرعت کمک می‌کند.

2. نمایش هدر متفاوت برای صفحهٔ بلاگ

if ( is_home() ) {
    get_template_part('template-parts/header', 'blog');
} else {
    get_template_part('template-parts/header', 'default');
}

در این مثال، اگر کاربر در صفحهٔ بلاگ باشد، هدر مخصوص بلاگ فراخوانی می‌شود؛ در غیر این صورت هدر پیش‌فرض نمایش داده می‌شود. این روش برای طراحی تجربهٔ کاربری (UX) متفاوت در صفحهٔ بلاگ مناسب است.

3. ریدایرکت صفحهٔ بلاگ به صفحهٔ خاص یا آرشیو

add_action('template_redirect', 'redirect_blog_to_archive');
function redirect_blog_to_archive() {
    if ( is_home() && !is_paged() ) {
        wp_redirect( home_url('/news/'), 301 );
        exit;
    }
}

این کد صفحهٔ اصلی بلاگ را به مسیر /news/ منتقل می‌کند. شرط !is_paged() تضمین می‌کند که تنها صفحهٔ اول بلاگ ریدایرکت شود و صفحات صفحه‌بندی‌شده دست‌نخورده باقی بمانند. استفاده از کد 301 نیز برای سئوی بهتر و اعلام تغییر دائمی به موتورهای جستجو مناسب است.

4. تغییر کوئری پیش‌فرض صفحهٔ بلاگ

add_action('pre_get_posts', 'customize_home_query');
function customize_home_query($query) {
    if ( $query->is_main_query() && is_home() && !is_admin() ) {
        $query->set('posts_per_page', 6);
        $query->set('cat', '-5'); // exclude category ID 5
    }
}

در این نمونه، کوئری اصلی صفحهٔ بلاگ تغییر کرده تا تعداد مطالب در هر صفحه به 6 محدود شود و یک دسته خاص حذف گردد. استفاده از is_main_query() و بررسی !is_admin() برای جلوگیری از تأثیرگذاری ناخواسته بر درخواست‌های ادمین ضروری است.

نکات حرفه‌ای و بهترین شیوه‌ها

  • همیشه در pre_get_posts از is_main_query() استفاده کنید تا کوئری‌های فرعی یا API تحت‌تاثیر قرار نگیرند.
  • در زمان تعیین صفحهٔ نوشته‌ها در تنظیمات وردپرس، آگاه باشید که is_home() صفحهٔ تعیین‌شده را به‌عنوان بلاگ تشخیص می‌دهد و نه الزاماً صفحهٔ front.
  • برای شرایط ترکیبی از توابع شرطی استفاده کنید؛ مثلاً is_home() && is_paged() برای شناسایی صفحات بعدی صفحهٔ بلاگ.
  • برای سئو، اگر قصد ریدایرکت دارید از HTTP status مناسب (301 برای دائمی، 302 برای موقت) استفاده کنید و از خروج با exit; پس از wp_redirect() اطمینان حاصل کنید.
  • استفاده از is_home() هزینهٔ پردازشی زیادی ندارد، اما در فراخوانی‌های مکرر داخل حلقه یا توابع سنگین بهتر است ابتدا با یک متغیر محلی شرط را بررسی کنید.

مواردی که باید مراقبشان باشید

  • اگر صفحهٔ اول سایت شما یک صفحهٔ ایستا است و نوشته‌ها در صفحهٔ دیگری نمایش داده می‌شوند، is_front_page() برای صفحهٔ اصلی واقعی مناسب‌تر است.
  • در قالبی که از فیدها یا ورودی‌های AJAX استفاده می‌کند ممکن است is_home() رفتار متفاوتی داشته باشد؛ همیشه در محیط توسعه تست کنید.

جمع‌بندی

تابع is_home() ابزار ساده ولی قدرتمندی برای شناسایی صفحهٔ نمایش آخرین نوشته‌ها در وردپرس است. فهم تفاوت آن با is_front_page() و ترکیب درست با سایر Conditional Tags مانند is_paged() یا is_main_query() به شما امکان می‌دهد کنترل دقیقی روی ظاهر، بارگذاری منابع و منطق قالب یا افزونه‌تان داشته باشید. با نمونه‌های بالا می‌توانید به‌سرعت شروع به اعمال تنظیمات مخصوص صفحهٔ بلاگ کنید و تجربهٔ کاربری و سئو سایت خود را بهبود دهید.

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

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