แก้ปัญหา "There has been a critical error" ใน WordPress ด้วย WP_DEBUG

เปิด WP_DEBUG บันทึก Error ลงไฟล์ อ่าน debug.log เพื่อหาปลั๊กอินหรือธีมต้นเหตุ และใช้ Recovery Mode แก้หน้าจอ Critical Error ของ WordPress

โดย ทีมงาน THAI DATA CLOUD อัปเดต อ่าน 10 นาที เข้าชม 3 ครั้ง

แชร์FacebookXLINELinkedIn
critical error — แก้ปัญหา "There has been a critical error" ใน WordPress ด้วย WP_DEBUG
แก้ปัญหา "There has been a critical error" ใน WordPress ด้วย WP_DEBUG

คำตอบสั้น ๆ: เปิด WP_DEBUG บันทึก Error ลงไฟล์ อ่าน debug.log เพื่อหาปลั๊กอินหรือธีมต้นเหตุ และใช้ Recovery Mode แก้หน้าจอ Critical Error ของ WordPress

คู่มือนี้อธิบาย critical error ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย

ข้อความ "There has been a critical error on this website." คือหน้าจอที่ WordPress แสดงเมื่อเกิด PHP Fatal Error ระหว่างโหลดหน้าเว็บ ตั้งแต่ WordPress 5.2 ระบบจะซ่อนรายละเอียดของ Error ไว้เพื่อไม่ให้ผู้เข้าชมเห็นข้อมูลภายใน แต่นั่นก็ทำให้ผู้ดูแลไม่รู้ว่าอะไรพัง สาเหตุที่พบบ่อยคือปลั๊กอินหรือธีมที่เพิ่งอัปเดต การเปลี่ยนเวอร์ชัน PHP หรือหน่วยความจำไม่พอ

บทความนี้อธิบายวิธีใช้ WP_DEBUG บันทึกรายละเอียดของ Error ลงไฟล์ วิธีอ่านข้อความ Error เพื่อหาไฟล์ต้นเหตุ และการใช้ Recovery Mode ที่ WordPress ส่งมาทางอีเมล

สิ่งที่ต้องเตรียม

  • สิทธิ์แก้ไขไฟล์ wp-config.php ผ่าน SSH, SFTP หรือ File Manager ของ Plesk/DirectAdmin
  • สำเนาของ wp-config.php ก่อนแก้ไข
  • เข้าถึงอีเมลของผู้ดูแลเว็บ (Administration Email Address ใน Settings > General) เพื่อรับลิงก์ Recovery Mode

ขั้นตอนที่ 1: ตรวจอีเมล Recovery Mode

เมื่อเกิด Fatal Error ที่ WordPress ระบุต้นเหตุได้ ระบบจะส่งอีเมลหัวเรื่อง "Your Site is Experiencing a Technical Issue" ไปยังอีเมลผู้ดูแล ในอีเมลจะบอกว่าปลั๊กอินหรือธีมใดทำให้เกิด Error และมีลิงก์สำหรับเข้า Recovery Mode

  1. คลิกลิงก์ในอีเมล แล้วเข้าสู่ระบบตามปกติ
  2. ใน Recovery Mode ปลั๊กอินที่มีปัญหาจะถูกหยุดชั่วคราวเฉพาะสำหรับเซสชันของคุณ ให้ไปที่หน้า Plugins แล้ว Deactivate ปลั๊กอินนั้นจริง
  3. คลิก Exit Recovery Mode ที่แถบด้านบน แล้วทดสอบเว็บ

ลิงก์ Recovery Mode มีอายุจำกัด และจะไม่ได้รับอีเมลหากเว็บส่งอีเมลไม่ได้ (ดู ตั้งค่า WordPress ให้ส่งอีเมลผ่าน SMTP) หรือ Error เกิดก่อนที่ WordPress จะโหลดส่วนนี้ ในกรณีนั้นให้ทำขั้นตอนถัดไป

ขั้นตอนที่ 2: เปิด WP_DEBUG บันทึกลงไฟล์

เปิด wp-config.php หาบรรทัด define( 'WP_DEBUG', false ); แล้วแทนที่ด้วยชุดนี้ (หากไม่มีบรรทัดดังกล่าว ให้เพิ่มก่อนบรรทัด /* That's all, stop editing! Happy publishing. */)

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
ค่าความหมาย
WP_DEBUGเปิดโหมด Debug ให้ PHP รายงาน Error ทุกระดับ
WP_DEBUG_LOGบันทึก Error ลงไฟล์ wp-content/debug.log
WP_DEBUG_DISPLAYตั้งเป็น false เพื่อไม่แสดง Error บนหน้าเว็บให้ผู้เข้าชมเห็น

define() แต่ละค่าต้องมีเพียงครั้งเดียวในไฟล์ หากมี WP_DEBUG ซ้ำสองบรรทัด PHP จะแจ้งเตือนว่าค่าคงที่ถูกกำหนดแล้ว

เพื่อไม่ให้ใครดาวน์โหลดไฟล์ Log ผ่านเบราว์เซอร์ได้ แนะนำให้ระบุตำแหน่งไฟล์ไว้นอกโฟลเดอร์เว็บ (รองรับตั้งแต่ WordPress 5.1)

define( 'WP_DEBUG_LOG', '/var/www/logs/wp-debug.log' );

โฟลเดอร์ปลายทางต้องมีอยู่และผู้ใช้ที่ PHP รันอยู่ต้องเขียนได้

ขั้นตอนที่ 3: ทำให้ Error เกิดซ้ำแล้วอ่าน Log

เปิดหน้าที่ขึ้น Critical Error อีกครั้ง 1-2 ครั้ง จากนั้นอ่านท้ายไฟล์ Log

tail -n 30 /var/www/example.com/wp-content/debug.log

ตัวอย่างผลลัพธ์

[19-Sep-2026 03:12:45 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function create_function()
in /var/www/example.com/wp-content/plugins/old-gallery/includes/widget.php:42
Stack trace:
#0 /var/www/example.com/wp-includes/class-wp-hook.php(324): og_register_widget()
...

อ่านจากบรรทัดที่มีคำว่า PHP Fatal error เป็นหลัก บรรทัด Warning, Notice และ Deprecated มักไม่ใช่ต้นเหตุของหน้าจอ Critical Error ให้ดูที่ Path ของไฟล์

  • อยู่ใน wp-content/plugins/ชื่อ/ แปลว่าปลั๊กอินนั้นเป็นต้นเหตุ
  • อยู่ใน wp-content/themes/ชื่อ/ แปลว่าธีมเป็นต้นเหตุ
  • อยู่ใน wp-includes/ หรือ wp-admin/ ให้ดู Stack trace ต่อลงไป มักมีบรรทัดที่ชี้ไปยังปลั๊กอินหรือธีม

ข้อความ Error ที่พบบ่อยและวิธีแก้

ข้อความสาเหตุวิธีแก้
Call to undefined function create_function() หรือ each()โค้ดเก่าไม่รองรับ PHP 8อัปเดตหรือเปลี่ยนปลั๊กอิน/ธีม หรือย้อนเวอร์ชัน PHP ชั่วคราว
Allowed memory size of 268435456 bytes exhaustedหน่วยความจำ PHP ไม่พอดู เพิ่ม Memory Limit ใน WordPress
Call to undefined function mysqli_connect() หรือ imagecreatefromjpeg()ไม่ได้ติดตั้ง PHP Extensionติดตั้ง Extension เช่น php8.3-mysql, php8.3-gd แล้วรีสตาร์ต PHP-FPM
Cannot redeclare function ...ปลั๊กอินสองตัวชนกัน หรือติดตั้งซ้ำปิดปลั๊กอินตัวที่ติดตั้งล่าสุด
Maximum execution time of 30 seconds exceededงานใช้เวลานานเกินกำหนดหาสาเหตุที่ช้าก่อน แล้วค่อยพิจารณาเพิ่ม max_execution_time

เมื่อรู้ปลั๊กอินต้นเหตุแล้ว ปิดปลั๊กอินนั้นด้วย WP-CLI

wp plugin deactivate old-gallery --skip-plugins --skip-themes

หรือเปลี่ยนชื่อโฟลเดอร์ปลั๊กอิน ดูรายละเอียดที่ ปิดปลั๊กอิน WordPress เมื่อเข้าหลังบ้านไม่ได้ หากเป็นธีม ให้สลับไปใช้ธีมมาตรฐานชั่วคราว

wp theme activate twentytwentyfour --skip-plugins --skip-themes

ขั้นตอนที่ 4: หาก debug.log ว่างเปล่า

ถ้า Error เกิดก่อนที่ WordPress จะโหลด wp-config.php เสร็จ เช่น พิมพ์ผิดใน wp-config.php เอง ไฟล์ debug.log จะไม่ถูกสร้าง ให้ดู Error Log ของ PHP หรือเว็บเซิร์ฟเวอร์แทน

# Ubuntu + Nginx
sudo tail -n 50 /var/log/nginx/error.log
# Ubuntu + PHP-FPM (เปลี่ยนเลขเวอร์ชันตามเครื่อง)
sudo tail -n 50 /var/log/php8.3-fpm.log
# AlmaLinux/Rocky + PHP-FPM
sudo tail -n 50 /var/log/php-fpm/www-error.log

บน Plesk ดู Log ได้จากหน้า Logs ของโดเมน ดู ดู Log เว็บไซต์บน Plesk เพื่อหาสาเหตุ Error และตรวจ Syntax ของไฟล์ PHP ด้วยคำสั่ง

php -l /var/www/example.com/wp-config.php

ผลที่ถูกต้องคือ No syntax errors detected

ตรวจสอบผลลัพธ์

  • เปิดหน้าเว็บและหน้าหลังบ้านได้ตามปกติ ไม่มีหน้าจอ Critical Error
  • รัน tail -f wp-content/debug.log แล้วคลิกดูหลายหน้า ต้องไม่มี Fatal error ใหม่เกิดขึ้น
  • ดู Tools > Site Health ว่าไม่มีรายการ Critical ค้างอยู่

ขั้นตอนที่ 5: ปิด Debug เมื่อแก้เสร็จ

เปลี่ยนกลับเป็น define( 'WP_DEBUG', false ); และลบบรรทัด WP_DEBUG_LOG, WP_DEBUG_DISPLAY ออก จากนั้นลบไฟล์ Log ที่อาจมีข้อมูลภายใน เช่น Path และชื่อฐานข้อมูล

rm /var/www/example.com/wp-content/debug.log

ปัญหาที่พบบ่อย

ไม่มีไฟล์ debug.log เกิดขึ้น

PHP อาจไม่มีสิทธิ์เขียนโฟลเดอร์ wp-content ตรวจเจ้าของไฟล์ด้วย ls -ld wp-content หรือกำหนด Path ของ Log ไปยังโฟลเดอร์ที่เขียนได้

หน้าเว็บแสดง Error ดิบให้ผู้เข้าชมเห็น

ลืมตั้ง WP_DEBUG_DISPLAY เป็น false หรือ php.ini เปิด display_errors ไว้ ให้ตรวจทั้งสองจุด

ต้องการเห็น Error จริงแทนหน้าจอ Critical Error

สำหรับเครื่องทดสอบเท่านั้น สามารถปิดตัวจัดการ Error ของ WordPress ได้ด้วย define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true ); ห้ามใช้บนเว็บจริง

หากทำตามขั้นตอนแล้วยังติดปัญหา สามารถติดต่อทีมสนับสนุนของ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

สรุปขั้นตอน critical error

ทบทวน critical error ทั้งหมดตามลำดับ ก่อนนำไปใช้กับระบบจริง

  1. ตรวจอีเมล Recovery Mode
  2. เปิด WP_DEBUG บันทึกลงไฟล์
  3. ทำให้ Error เกิดซ้ำแล้วอ่าน Log
  4. หาก debug.log ว่างเปล่า
  5. ปิด Debug เมื่อแก้เสร็จ

เมื่อทำครบทุกข้อแล้ว critical error จะพร้อมใช้งาน หากผลลัพธ์ไม่เป็นไปตามที่คาด ให้ย้อนกลับไปดูหัวข้อปัญหาที่พบบ่อยด้านบน ซึ่งรวบรวมกรณีที่พบจริงจากการใช้งาน critical error ไว้แล้ว

อ่านเพิ่มเติมเกี่ยวกับ critical error

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน