ویژگی تصویر

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

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

تابع is_404() یکی از conditional tag‌های وردپرس است که برای تشخیص این‌که صفحه فعلی پاسخ‌دهی 404 (یافت نشد) است یا نه استفاده می‌شود. این تابع در بسیاری از سناریوها کاربرد دارد: نمایش محتوای سفارشی، هدایت (redirect)، گزارش‌گیری از لینک‌های شکسته و بهینه‌سازی تجربه کاربری. در این مقاله به صورت دقیق، با مثال‌های عملی و نکات حرفه‌ای به کار با is_404() می‌پردازیم.

چه زمانی is_404() درست کار می‌کند؟

  • is_404() زمانی معتبر است که کوئری اصلی (main query) اجرا شده باشد. معمولاً این به معنای استفاده در مراحل بعدی بارگذاری وردپرس مانند template_redirect یا در قالب‌های تم است.
  • استفاده در مرحله‌های خیلی زود مانند init یا قبل از parse_query ممکن است نتیجه ندهد یا همیشه false برگردد.
  • در پنل مدیریت (wp-admin) معمولاً کاربرد ندارد مگر به صورت صریح و با توجه به صفحه مورد نظر.

مثال پایه: نمایش محتوای سفارشی برای 404

if ( is_404() ) {
    status_header( 404 );
    nocache_headers();
    // می‌توانید قالب یا کد HTML سفارشی رندر کنید
    get_template_part( 'template-parts/content', '404-custom' );
    exit;
}

توضیح: این کد بررسی می‌کند که آیا صفحه فعلی 404 است یا خیر. سپس هدر وضعیت 404 را تنظیم می‌کند و هدرهای cache را غیر فعال می‌کند. در نهایت یک قطعه قالب سفارشی را بارگذاری کرده و اجرا را متوقف می‌سازد تا وردپرس باقی عملیات عادی را ادامه ندهد.

نمونه: هدایت کاربران به صفحهٔ دیگر به جای نمایش 404

add_action( 'template_redirect', function() {
    if ( is_404() ) {
        wp_redirect( home_url( '/search/?s=' . urlencode( $_SERVER['REQUEST_URI'] ) ), 302 );
        exit;
    }
} );

توضیح: این هوک در مرحله template_redirect قرار می‌گیرد که پس از اجرا شدن کوئری اصلی فراخوانی می‌شود. اگر صفحه 404 باشد، کاربر به صفحه جستجو هدایت می‌شود. توجه کنید که استفاده از wp_redirect نیازمند خروج (exit) است تا اجرای بقیه کد متوقف شود.

نکات مهم و خطاهای رایج

  • قرارگیری در هوک مناسب: همواره is_404() را بعد از اجرای کوئری اصلی صدا بزنید (مثلاً template_redirect یا داخل فایل‌های قالب مانند 404.php یا header.php بعد از loop).
  • استفاده از is_main_query(): وقتی با WP_Query سفارشی کار می‌کنید، حتماً بررسی کنید که آیا کوئری جاری main query است؛ چون is_404() به کوئری اصلی مربوط است.
  • هدر وضعیت: حتی اگر تغییرات نمایش انجام می‌دهید، بهتر است با status_header(404) هدر صحیح را ارسال کنید تا موتورهای جستجو و مرورگرها رفتار درست داشته باشند.
  • اجتناب از ریدایرکت‌های زنجیره‌ای: ریدایرکت دائمی (301) بر روی صفحات 404 می‌تواند روی SEO تاثیر منفی داشته باشد اگر با دقت انجام نشود.

چک کردن با WP_Query سفارشی (مثال پیشرفته)

// مثال نادرست: بررسی is_404() در یک کوئری سفارشی (ممکن است اشتباه نتیجه دهد)
$query = new WP_Query( array( 'post_type' => 'book', 's' => 'unknown' ) );
if ( is_404() ) {
    // ... 
}

توضیح: در مثال بالا is_404() مربوط به کوئری اصلی است، نه $query. برای بررسی وضعیت 404 با یک کوئری سفارشی باید از منطق خود کوئری استفاده کنید یا حالت global WP_Query را بررسی کنید.

// روش صحیح: بررسی نتایج کوئری سفارشی و تنظیم 404 به صورت دستی در صورت نیاز
$query = new WP_Query( array( 'post_type' => 'book', 's' => 'unknown' ) );
if ( ! $query->have_posts() ) {
    global $wp_query;
    $wp_query->set_404();
    status_header( 404 );
    // سپس باید template مناسب را لود کنید یا ریدایرکت انجام دهید
}

توضیح: در این نمونه اگر کوئری سفارشی هیچ نتیجه‌ای نداشته باشد، با استفاده از متد set_404() و تنظیم هدر 404، وضعیت صفحه را به صورت دستی به 404 تغییر می‌دهیم. این به موتورهای جستجو و صفحات خطا کمک می‌کند تا رفتار صحیح را داشته باشند.

استفاده‌های عملی و سناریوهای رایج

  • نمایش پیغام‌های دوستانه و پیشنهادهای جایگزین (مثلاً لینک‌های مرتبط یا فرم جستجو).
  • لاگ‌گیری و ارسال گزارش لینک‌های شکسته به مدیر سایت برای اصلاح (با تابع error_log یا API خارجی).
  • ایجاد ریدایرکت هوشمند: بررسی مسیر در URL و ریدایرکت به محتوای نزدیک یا صفحه دسته‌بندی مرتبط.
  • بهبود UX با ارائه فرم جستجوی درون‌صفحه‌ای و لینک به محبوب‌ترین مطالب.

مثال: ثبت لینک‌های 404 در یک فایل لاگ

add_action( 'template_redirect', function() {
    if ( is_404() ) {
        $url = esc_url_raw( home_url( $_SERVER['REQUEST_URI'] ) );
        $msg = sprintf( "[%s] 404: %sn", date( 'Y-m-d H:i:s' ), $url );
        error_log( $msg, 3, WP_CONTENT_DIR . '/404-log.txt' );
    }
} );

توضیح: این کد هر بار که صفحه 404 پیدا شود، URL را به فایل 404-log.txt در پوشه wp-content اضافه می‌کند. از esc_url_raw برای ایمن‌سازی استفاده شده و با پرچم 3 تابع error_log می‌نویسد. حتماً مجوزهای فایل را کنترل کنید تا لاگ‌نویسی کار کند.

مقایسه با conditional tags مشابه

تابعکاربرد
is_404()بررسی اینکه صفحه 404 است یا خیر
is_404 && is_search()ندارد؛ استفاده ترکیبی معمول نیست. از is_search() برای صفحات جستجو استفاده کنید.
is_home(), is_front_page()بررسی صفحات خانه یا صفحه اول
is_singular(), is_archive()بررسی نوع محتوای نمایش داده شده

جمع‌بندی و توصیه‌های حرفه‌ای

  • همیشه is_404() را در زمان مناسب (بعد از اجرای کوئری) بررسی کنید؛ template_redirect و فایل‌های قالب 404.php جای‌های مناسب هستند.
  • در صورت استفاده از کوئری‌های سفارشی، وضعیت 404 را با $wp_query->set_404() تنظیم کنید تا موتورهای جستجو به درستی عمل کنند.
  • از ارسال هدر صحیح با status_header(404) و کنترل کش با nocache_headers() غافل نشوید.
  • برای بهبود SEO و UX، صفحات 404 را کاربردی و دارای پیشنهادات مفید طراحی کنید—پیشنهاد خواندن مطالب مرتبط، فرم جستجو و لینک‌های محبوب.

با درک درست از is_404() می‌توانید تجربه کاربری و سئو سایت را بهینه کنید، لینک‌های شکسته را مدیریت کنید و رفتار سفارشی برای صفحات یافت‌نشده پیاده‌سازی نمایید.

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

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