آنچه در این مطلب خواهید خواند

حل مشکل نمایش آرشیو به‌جای صفحه 404 در وردپرس با المنتور

خطای 404 در وردپرس با المنتور
آنچه در این مطلب خواهید خواند

در دنیای طراحی وب با وردپرس، گاهی اوقات با مشکلات غیرمنتظره‌ای مواجه می‌شویم که می‌توانند تجربه کاربری سایت را تحت تأثیر قرار دهند. یکی از این مشکلات که تیم راش وب اخیراً با آن مواجه شد، نمایش قالب آرشیو به‌جای صفحه 404 برای URL‌های ناموجود در سایت‌های وردپرسی بود که با افزونه المنتور ساخته شده‌اند. اگر شما هم با این مشکل روبه‌رو شده‌اید که وقتی یک URL ناموجود مثل example.com/agsdfgas/ را وارد می‌کنید، به‌جای صفحه 404، صفحه آرشیو نمایش داده می‌شود، این مقاله برای شماست. در این پست، ما به‌طور کامل این مشکل را بررسی می‌کنیم، دلایل آن را توضیح می‌دهیم و یک راه‌حل قطعی با استفاده از کد PHP ارائه می‌دهیم که این مشکل را برای همیشه برطرف می‌کند.

مشکل چیست؟

تصور کنید کاربری یک URL اشتباه مثل example.com/something/ را در مرورگر وارد می‌کند. انتظار می‌رود که وردپرس یک صفحه 404 (صفحه یافت نشد) نمایش دهد. اما در برخی سایت‌های وردپرسی که از المنتور و افزونه‌های مرتبط مثل جت‌انجین استفاده می‌کنند، به‌جای صفحه 404، قالب آرشیو (مانند آرشیو پست‌ها یا پست‌تایپ‌های سفارشی) بارگذاری می‌شود. نکته جالب اینجاست که اگر URL را به‌صورت چندقسمتی وارد کنید (مثل example.com/something/else/)، صفحه 404 به‌درستی نمایش داده می‌شود.

این رفتار غیرمنتظره می‌تواند چند مشکل ایجاد کند:

  • تجربه کاربری ضعیف: کاربران به‌جای دیدن پیام واضح “صفحه یافت نشد”، با یک صفحه آرشیو خالی یا نامرتبط مواجه می‌شوند.
  • تأثیر منفی روی سئو: موتورهای جستجو ممکن است این صفحات را به‌عنوان محتوای تکراری یا بی‌کیفیت شناسایی کنند.
  • ایجاد سردرگمی برای توسعه‌دهندگان: تشخیص منبع مشکل می‌تواند زمان‌بر باشد، به‌خصوص در پروژه‌های پیچیده.

ما در راش وب، که سال‌هاست پروژه‌های وردپرسی را با المنتور و جت‌انجین پیاده‌سازی می‌کنیم، با این مشکل در چند پروژه برخورد کردیم و پس از بررسی‌های گسترده، راه‌حلی قطعی پیدا کردیم که در ادامه با شما به اشتراک می‌گذاریم.

چرا این مشکل رخ می‌دهد؟

برای حل این مشکل، ابتدا باید دلایل آن را درک کنیم. این مشکل معمولاً به ترکیب المنتور، جت‌انجین و نحوه مدیریت URL‌ها توسط وردپرس مربوط است. در ادامه چند دلیل اصلی را بررسی می‌کنیم:

1. تنظیمات Theme Builder المنتور

المنتور از Theme Builder برای ایجاد قالب‌های سفارشی برای آرشیوها، صفحات تک‌مطلب و صفحات 404 استفاده می‌کند. اگر در Theme Builder یک قالب آرشیو برای “All Archives” یا پست‌تایپ‌های سفارشی تنظیم شده باشد، وردپرس ممکن است URL‌های ناموجود تک‌قسمتی (مثل /agsdfgas/) را به‌عنوان آرشیو تفسیر کند و قالب آرشیو را نمایش دهد.

2. پست‌تایپ‌های سفارشی جت‌انجین

جت‌انجین، افزونه‌ای قدرتمند برای ایجاد پست‌تایپ‌های سفارشی، می‌تواند تنظیماتی مثل has_archive را برای پست‌تایپ‌ها فعال کند. این تنظیم باعث می‌شود وردپرس URL‌های ناشناخته را به‌عنوان آرشیو پست‌تایپ‌های سفارشی شناسایی کند، به‌خصوص اگر slug پست‌تایپ با URL تداخل داشته باشد.

3. قوانین بازنویسی URL (Rewrite Rules)

وردپرس از قوانین بازنویسی (Rewrite Rules) برای پردازش URL‌ها استفاده می‌کند. اگر این قوانین به‌درستی تنظیم نشده باشند یا افزونه‌ها (مثل المنتور یا جت‌انجین) قوانین سفارشی اضافه کرده باشند، ممکن است URL‌های ناموجود به‌جای 404 به قالب آرشیو هدایت شوند.

4. تداخل افزونه‌ها

افزونه‌های دیگر مثل Yoast SEO، Rank Math یا افزونه‌های کش (مثل WP Rocket) می‌توانند روی مدیریت URL‌ها تأثیر بگذارند و باعث این رفتار غیرمنتظره شوند.

5. تنظیمات سرور

در برخی موارد، تنظیمات سرور (مثل Apache یا Nginx) یا فایل .htaccess می‌توانند روی نحوه پردازش URL‌ها اثر بگذارند و باعث شوند وردپرس URL‌های ناموجود را به‌اشتباه پردازش کند.

چگونه مشکل را شناسایی کردیم؟

در پروژه‌های راش وب، ما معمولاً از المنتور برای طراحی صفحات، جت‌انجین برای پست‌تایپ‌های سفارشی و قالب سلام‌المنتور برای سایت‌های وردپرسی استفاده می‌کنیم. وقتی با این مشکل مواجه شدیم، مراحل زیر را برای عیب‌یابی انجام دادیم:

  • بازسازی پیوندهای یکتا: به تنظیمات > پیوندهای یکتا رفتیم و قوانین بازنویسی را بازسازی کردیم.
  • بررسی جت‌انجین: تنظیمات پست‌تایپ‌های سفارشی را بررسی کردیم و مطمئن شدیم که has_archive فقط برای موارد ضروری فعال است.
  • تست با غیرفعال کردن افزونه‌ها: وقتی المنتور را غیرفعال کردیم، متوجه شدیم که صفحه 404 به‌درستی نمایش داده می‌شود. این نشان داد که مشکل به المنتور مربوط است.
  • بررسی Theme Builder: قالب‌های آرشیو در المنتور را بررسی کردیم، اما تنظیمات آن‌ها مشکلی نداشت.
  • دیباگ وردپرس: با فعال کردن دیباگ و استفاده از افزونه Query Monitor، متوجه شدیم که وردپرس URL‌های تک‌قسمتی را به‌عنوان آرشیو بارگذاری می‌کند.

پس از این بررسی‌ها، تصمیم گرفتیم یک راه‌حل برنامه‌نویسی ارائه دهیم که رفتار المنتور را برای URL‌های ناموجود اصلاح کند.

راه‌حل قطعی: کد PHP برای اجبار صفحه 404

برای حل این مشکل، ما یک قطعه کد PHP نوشتیم که بررسی می‌کند آیا URL واردشده یک URL ناموجود تک‌قسمتی است و در این صورت، آن را به صفحه 404 هدایت می‌کند. این کد به‌گونه‌ای طراحی شده که با المنتور و جت‌انجین سازگار باشد و از بارگذاری قالب آرشیو برای URL‌های ناموجود جلوگیری کند.

کد راه‌حل

کد زیر را به فایل functions.php قالب خود (یا قالب فرزند) اضافه کنید:

add_action('template_redirect', function() {
global $wp_query;

// اگر المنتور فعال است و کوئری آرشیو برای URL ناموجود بارگذاری شده
if (class_exists('Elementor\Plugin') && $wp_query->is_archive && !have_posts()) {
// بررسی اگر URL تک‌قسمتی است
$requested_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
if (count(explode('/', $requested_path)) === 1) {
// اگر با هیچ پست‌تایپ، دسته‌بندی یا taxonomy مطابقت ندارد
if (!get_page_by_path($requested_path) && !is_category($requested_path) && !is_tag($requested_path) && !is_tax() && !is_post_type_archive($requested_path)) {
$wp_query->set_404();
status_header(404);
nocache_headers();
// بارگذاری قالب 404
if (file_exists(get_404_template())) {
include(get_404_template());
exit;
}
}
}
}
});

توضیح کد

  • هوک template_redirect: این هوک قبل از بارگذاری قالب اجرا می‌شود و به ما امکان می‌دهد رفتار وردپرس را تغییر دهیم.
  • بررسی المنتور: با class_exists(‘Elementor\Plugin’) مطمئن می‌شویم که کد فقط در سایت‌هایی که المنتور فعال است اجرا شود.
  • تشخیص آرشیو خالی: با $wp_query->is_archive && !have_posts() بررسی می‌کنیم که آیا کوئری آرشیو است و هیچ پستی برای نمایش ندارد.
  • بررسی URL تک‌قسمتی: با count(explode(‘/’, $requested_path)) === 1 مطمئن می‌شویم که URL فقط یک بخش دارد (مثل /agsdfgas/).
  • تطبیق با محتوا: بررسی می‌کنیم که URL با هیچ صفحه، دسته‌بندی، برچسب یا پست‌تایپ آرشیوی مطابقت ندارد.
  • اجبار 404: با $wp_query->set_404() و status_header(404)، وردپرس را مجبور می‌کنیم که صفحه 404 را نمایش دهد.
  • بارگذاری قالب 404: قالب 404 را با include(get_404_template()) بارگذاری می‌کنیم.

نحوه استفاده

  • فایل functions.php قالب خود را باز کنید (در مسیر /wp-content/themes/hello-elementor/functions.php یا قالب فرزند).
  • کد بالا را در انتهای فایل اضافه کنید.
  • فایل را ذخیره کنید و URL ناموجود (مثل example.com/agsdfgas/) را تست کنید.
  • مطمئن شوید که یک قالب 404 در Theme Builder المنتور یا فایل 404.php قالب شما وجود دارد.

نکات مهم برای پیشگیری از مشکلات مشابه

برای جلوگیری از بروز این مشکل در پروژه‌های آینده، این نکات را در نظر بگیرید:

تنظیم دقیق Theme Builder:

در المنتور، قالب‌های آرشیو را فقط برای شرایط خاص (مثل آرشیوهای دسته‌بندی یا پست‌تایپ‌های مشخص) تنظیم کنید.
همیشه یک قالب 404 سفارشی در Theme Builder بسازید.

مدیریت پست‌تایپ‌های جت‌انجین:

فقط برای پست‌تایپ‌هایی که نیاز به آرشیو دارند، has_archive را فعال کنید.
از slugهای منحصربه‌فرد برای پست‌تایپ‌ها استفاده کنید تا با URL‌های دیگر تداخل نداشته باشند.

به‌روزرسانی افزونه‌ها:

همیشه المنتور، جت‌انجین و قالب خود را به‌روز نگه دارید تا از باگ‌های شناخته‌شده جلوگیری کنید.

پاک‌سازی کش:

پس از هر تغییر در تنظیمات یا کد، کش سایت (از طریق افزونه کش یا سرور) و کش مرورگر را پاک کنید.

دیباگ وردپرس:

حالت دیباگ وردپرس را فعال کنید تا ارورهای احتمالی را شناسایی کنید:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

تجربه راش وب

ما در راش وب سال‌هاست که سایت‌های وردپرسی را با المنتور و جت‌انجین طراحی می‌کنیم. این مشکل خاص در چند پروژه به ما نشان داد که حتی ابزارهای قدرتمندی مثل المنتور ممکن است نیاز به تنظیمات یا مداخله برنامه‌نویسی داشته باشند. با استفاده از کد ارائه‌شده، توانستیم این مشکل را در تمام پروژه‌هایمان برطرف کنیم و تجربه کاربری بهتری برای مشتریانمان فراهم کنیم.

اگر شما هم با مشکلات مشابه در وردپرس مواجه هستید، پیشنهاد می‌کنیم با تیم حرفه‌ای ما در RUSHWEB.CO تماس بگیرید. ما آماده‌ایم تا سایت‌های وردپرسی شما را بهینه، سریع و بدون خطا کنیم!

جمع‌بندی

نمایش قالب آرشیو به‌جای صفحه 404 در سایت‌های وردپرسی که از المنتور استفاده می‌کنند، مشکلی است که می‌تواند به دلایل مختلفی مثل تنظیمات Theme Builder، پست‌تایپ‌های جت‌انجین یا قوانین بازنویسی URL رخ دهد. با استفاده از کد PHP ارائه‌شده در این مقاله، می‌توانید این مشکل را به‌راحتی برطرف کنید. این راه‌حل نه‌تنها مشکل را حل می‌کند، بلکه با وردپرس، المنتور و جت‌انجین کاملاً سازگار است.

آیا شما هم با این مشکل مواجه شده‌اید؟ یا راه‌حل دیگری برای این موضوع دارید؟ نظرات خود را در بخش کامنت‌های وبلاگ راش وب با ما به اشتراک بگذارید. برای آموزش‌های بیشتر درباره وردپرس، المنتور و طراحی وب، وبلاگ ما را دنبال کنید!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *