تابع is_404 در وردپرس
تابع 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() میتوانید تجربه کاربری و سئو سایت را بهینه کنید، لینکهای شکسته را مدیریت کنید و رفتار سفارشی برای صفحات یافتنشده پیادهسازی نمایید.
آیا این مطلب برای شما مفید بود ؟




