حل مشکل Error 500 صفحه افزونه های وردپرس در زمان قطعی اینترنت
بهطور معمول، وقتی وارد پیشخوان وردپرس میشوید و بر روی منوی افزونهها کلیک میکنید، چند درخواست خارجی به سرورهای wordpress.org و سایر APIهای رسمی وردپرس میفرستد.
این درخواستها برای بررسی آپدیتها، دریافت لیست جدید افزونه و اجرای WP‑Cron لازم هستند.
اما در سرورهایی که به اینترنت متصل نیستند، فایروال یا محدودیتهای DNS باعث میشود این درخواستها زمانبر یا حتی ناموفق باشند. در نتیجه صفحهی افزونهها سفید میماند، به مدت طولانی “Loading” مینشیند و در نهایت با خطای ۵۰۰ نمایش داده میشود.
چرا این اتفاق میافتد؟
- وردپرس، قبل از نمایش لیست افزونهها، بهصورت خودکار وضعیت آپدیتها را چک میکند.
- برای این کار به
api.wordpress.orgمیرود و یا باplugins.wordpress.orgارتباط برقرار میکند. - اگر این سرورها پاسخ ندهند، تابع
wp_ajaxدر انتهای صفبندیشدن فراخوانیها متوقف میشود و صفحه “پایدار” نمیشود. - در سرورهای درونسازمانی یا کشهای DNS ناپایدار، این فراخوانیها تا حدود چند دقیقه طول میکشند و در نهایت سرور پاسخ میدهد یا زماناتش میشود.
راهحلی که همهی این درخواستها را مسدود میکند
در زیر یک بلوک کامل کد آورده شده که بهصورت مستقیم در فایل wp-config.php قرار میگیرد و تمام ارتباطهای خارجی وردپرس را غیرفعال میکند. بعد از رفع محدودیتها یا برای محیطهای تست، میتوانید آن را حذف کنید.
/** ==========================================================================
* 1️⃣ مسدودسازی کامل درخواستهای خارجی وردپرس
* ==========================================================================
*/
define( ‘WP_HTTP_BLOCK_EXTERNAL’, true ); // تمام درخواستهای HTTP خارجی را مسدود کن
define( ‘WP_HTTP_ALLOW_LOCALHOST’, true ); // فقط دسترسی به localhost و IP داخلی را مجاز کن
/** ==========================================================================
* 2️⃣ غیرفعالسازی آپدیتها و ارتباط با APIهای وردپرس.org
* ==========================================================================
*/
define( ‘AUTOMATIC_UPDATER_DISABLED’, true ); // غیرفعالسازی آپدیتهای خودکار
define( ‘WP_AUTO_UPDATE_CORE’, false ); // بروز رسانی هسته به صورت خودکار
define( ‘DISALLOW_FILE_MODS’, true ); // نصب و ویرایش افزونهها/قالبها از پنل غیرفعال میشود
/** ==========================================================================
* 3️⃣ متوقفکردن WP‑Cron
* ==========================================================================
*/
define( ‘DISABLE_WP_CRON’, true ); // WP-Cron را غیرفعال کن؛ برای سرورهای محدود بسیار مفید
/** ==========================================================================
* 4️⃣ فیلتر کردن دستی بهصورت استثنائی به wordpress.org
* ==========================================================================
*/
add_filter( ‘pre_http_request’, function ( $pre, $args, $url ) {
if ( strpos( $url, ‘wordpress.org’ ) !== false ) {
return new WP_Error( ‘blocked’, ‘External requests blocked’ );
}
return $pre;
}, 10, 3 );
نکته: تمام این تغییرات را در آخر فایل
wp-config.phpقبل از خط/* That's all, stop editing! Happy blogging. */اضافه کنید.
چرا با این روش کار میکند؟
| بخش کد | عملکرد | توضیح مختصر |
|---|---|---|
WP_HTTP_BLOCK_EXTERNAL |
مسدود کردن تمام درخواستهای HTTP خارج از میزبان | هیچ اتصال بیرونی ایجاد نمیشود. |
WP_HTTP_ALLOW_LOCALHOST |
اجازهی ارتباط فقط با localhost | فقط برقراری ارتباط داخل سرور مجاز است. |
AUTOMATIC_UPDATER_DISABLED & WP_AUTO_UPDATE_CORE |
غیرفعالسازی آپدیتهای خودکار | وردپرس دیگر سعی در برقراری ارتباط با wordpress.org نخواهد کرد. |
DISALLOW_FILE_MODS |
جلوگیری از نصب/ویرایش افزونه و قالب از پنل | افزونهها/قالبها فقط از طریق FTP یا مدیریت فایل سرور نصب میشوند. |
DISABLE_WP_CRON |
غیرفعالسازی WP‑Cron | هیچ رویداد زمانبندیشدهای در پسزمینه اجرا نخواهد شد. |
فیلتر pre_http_request |
قطع سریع هر فراخوانی به wordpress.org | در صورت تغییر در تنظیمات بالا، هنوز در این خط مسدود میشود. |
نتیجهٔ نهایی
- بارگذاری سریع صفحهی افزونهها بدون انتظار برای پاسخ سرورهای خارجی.
- کاهش مصرف باند و درخواستهای بیفایده که در سرورهای محدود یا درونسازمانی میتواند باعث اختلال شود.
- افزایش امنیت چون امکان نصب یا ویرایش فایلها از طریق پیشخوان حذف میشود.
این راهحل برای سرورهای داخلی، سازمانی، توسعهمحیطی و هر سروری که محدودیت دسترسی به اینترنت دارد، مناسب است. در صورتی که مجدداً نیاز به دسترسی به وردپرس.org (بهعنوان مثال برای دریافت آپدیتهای جدید) دارید، کافی است خطوط مربوطه را حذف یا false کنید.
بعضی وقتها فقط میخوای سریع یه ابزار رو با دسترسی ادمین باز کنی،اما راستکلیک، منو، دنگوفنگ… زمان میبره! این میانبُر…
سالهاست بسیاری از سازمانها تصور میکنند که مسئولیت امنیت سایبری فقط بر عهدهٔ تیم فناوری اطلاعات (IT) است. اما تجربه…