คำตอบสั้น ๆ: เปิด 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
- คลิกลิงก์ในอีเมล แล้วเข้าสู่ระบบตามปกติ
- ใน Recovery Mode ปลั๊กอินที่มีปัญหาจะถูกหยุดชั่วคราวเฉพาะสำหรับเซสชันของคุณ ให้ไปที่หน้า Plugins แล้ว Deactivate ปลั๊กอินนั้นจริง
- คลิก 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