ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home ปิดปลั๊กอิน WordPress เมื่อเข้าหลังบ้านไม่ได้

ปิดปลั๊กอิน WordPress เมื่อเข้าหลังบ้านไม่ได้

ปลั๊กอินที่อัปเดตแล้วไม่เข้ากับเวอร์ชัน PHP ปลั๊กอินสองตัวที่ทำงานชนกัน หรือปลั๊กอินความปลอดภัยที่บล็อกการเข้าสู่ระบบของเราเอง ล้วนทำให้เข้าหน้าหลังบ้าน WordPress ไม่ได้ เมื่อเข้า /wp-admin ไม่ได้ ก็กดปุ่ม Deactivate ในหน้า Plugins ไม่ได้เช่นกัน

บทความนี้รวม 4 วิธีปิดปลั๊กอินจากภายนอก ตั้งแต่วิธีที่แม่นยำที่สุด (WP-CLI) ไปจนถึงวิธีที่ใช้ได้แม้มีแค่ File Manager หรือ phpMyAdmin พร้อมวิธีหาว่าปลั๊กอินตัวใดเป็นต้นเหตุ

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

  • ช่องทางใดช่องทางหนึ่ง: SSH, SFTP/FTP, File Manager ของ Plesk หรือ DirectAdmin, หรือ phpMyAdmin
  • ทราบตำแหน่งโฟลเดอร์เว็บไซต์ เช่น /var/www/example.com หรือ httpdocs บน Plesk และ public_html บน DirectAdmin
  • ไฟล์สำรองเว็บไซต์ หากจะแก้ฐานข้อมูลโดยตรง

หากยังไม่รู้ว่าปลั๊กอินตัวใดเป็นต้นเหตุ ให้ดู Log ก่อนตาม แก้ปัญหา "There has been a critical error" ใน WordPress ด้วย WP_DEBUG ข้อความ Error มักระบุ Path wp-content/plugins/ชื่อปลั๊กอิน/ ไว้ชัดเจน

วิธีที่ 1: ปิดด้วย WP-CLI (แนะนำ)

SSH เข้าเซิร์ฟเวอร์แล้วไปยังโฟลเดอร์เว็บ รันด้วยผู้ใช้เจ้าของไฟล์ (ดู จัดการ WordPress ด้วย WP-CLI) ใส่ --skip-plugins และ --skip-themes ทุกครั้ง เพื่อไม่ให้ปลั๊กอินที่เสียทำให้ WP-CLI ล่มตาม

cd /var/www/example.com
wp plugin list --skip-plugins --skip-themes

ผลลัพธ์เป็นตารางแสดงชื่อ (Slug) และสถานะ จากนั้นปิดตัวที่สงสัย

wp plugin deactivate wordfence --skip-plugins --skip-themes

ผลที่ถูกต้องคือ Plugin 'wordfence' deactivated. และ Success: Deactivated 1 of 1 plugins. หากไม่รู้ว่าตัวไหน ให้ปิดทั้งหมดก่อน

wp plugin list --status=active --field=name --skip-plugins --skip-themes > ~/active-plugins.txt
wp plugin deactivate --all --skip-plugins --skip-themes

บรรทัดแรกบันทึกรายชื่อปลั๊กอินที่เปิดอยู่ไว้ เพื่อเปิดกลับได้ครบในภายหลัง

วิธีที่ 2: เปลี่ยนชื่อโฟลเดอร์ปลั๊กอิน

WordPress โหลดปลั๊กอินจากโฟลเดอร์ใน wp-content/plugins/ หากหาโฟลเดอร์ไม่พบ ปลั๊กอินนั้นจะไม่ถูกโหลด วิธีนี้ใช้ได้ทั้ง SSH, SFTP และ File Manager

ปิดทีละตัว

cd /var/www/example.com/wp-content/plugins
mv wordfence wordfence.off

บน File Manager ของ Plesk หรือ DirectAdmin ให้คลิกขวาที่โฟลเดอร์ปลั๊กอินแล้วเลือก Rename (ดู อัปโหลดและจัดการไฟล์เว็บไซต์ด้วย File Manager บน Plesk และ จัดการไฟล์เว็บไซต์ด้วย File Manager บน DirectAdmin)

ปิดทั้งหมดพร้อมกัน

cd /var/www/example.com/wp-content
mv plugins plugins.off
mkdir plugins

จากนั้นเข้าหลังบ้าน หากเข้าได้แปลว่าต้นเหตุคือปลั๊กอินตัวใดตัวหนึ่ง ย้ายโฟลเดอร์กลับ

rmdir plugins
mv plugins.off plugins

ข้อควรรู้: เมื่อ WordPress ตรวจพบว่าโฟลเดอร์ปลั๊กอินหายไป (เช่น เมื่อเปิดหน้า Plugins) จะนำปลั๊กอินนั้นออกจากรายการที่เปิดใช้งานอย่างถาวร หลังเปลี่ยนชื่อกลับ ปลั๊กอินจะอยู่ในสถานะปิด และต้องเปิดใหม่เองทีละตัวในหน้า Plugins ข้อดีคือใช้หาตัวต้นเหตุได้ง่าย ข้อเสียคือต้องจำว่าเดิมเปิดตัวใดไว้บ้าง

วิธีที่ 3: แก้ค่า active_plugins ในฐานข้อมูล

ใช้เมื่อเข้าไฟล์ไม่ได้แต่เข้า phpMyAdmin ได้ รายการปลั๊กอินที่เปิดใช้งานเก็บอยู่ในตาราง wp_options แถว active_plugins (Prefix อาจไม่ใช่ wp_ ดูค่า $table_prefix ใน wp-config.php)

  1. เปิด phpMyAdmin เลือกฐานข้อมูลของเว็บ แล้วเปิดแท็บ SQL
  2. ดูค่าปัจจุบันแล้วคัดลอกเก็บไว้ในไฟล์ข้อความ
SELECT option_value FROM wp_options WHERE option_name = 'active_plugins';

ค่าที่ได้มีลักษณะแบบนี้

a:2:{i:0;s:19:"akismet/akismet.php";i:1;s:23:"wordfence/wordfence.php";}
  1. ปิดปลั๊กอินทั้งหมดด้วยการตั้งค่าเป็นรายการว่าง
UPDATE wp_options SET option_value = 'a:0:{}' WHERE option_name = 'active_plugins';

ห้ามแก้ค่านี้ด้วยการลบบางส่วนด้วยมือ เพราะเป็นข้อมูลแบบ PHP Serialized ที่ระบุจำนวนรายการ (a:2) และความยาวข้อความ (s:19) ไว้ หากตัวเลขไม่ตรง WordPress จะอ่านค่าไม่ได้ การตั้งเป็น a:0:{} ทั้งหมดปลอดภัยที่สุด

บน Multisite ปลั๊กอินที่เปิดทั้งเครือข่าย (Network Activate) เก็บอยู่ในตาราง wp_sitemeta ที่ meta_key = 'active_sitewide_plugins' แทน

วิธีที่ 4: ปลั๊กอิน Must-Use และธีม

ปลั๊กอินในโฟลเดอร์ wp-content/mu-plugins/ ทำงานเสมอ และไม่มีปุ่มปิดในหลังบ้าน วิธี 1 และ 3 ใช้ไม่ได้ ต้องย้ายไฟล์ออกจากโฟลเดอร์นั้น เช่น mv wp-content/mu-plugins/custom.php ~/ โฮสต์บางแห่งวางไฟล์ Must-Use ของตัวเองไว้ในนี้ ให้ย้ายเฉพาะไฟล์ที่ Error Log ชี้ถึง

หากต้นเหตุคือธีม ให้สลับเป็นธีมมาตรฐานที่ติดตั้งอยู่

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

ไม่มี SSH ให้เปลี่ยนชื่อโฟลเดอร์ธีมที่ใช้อยู่ใน wp-content/themes/ WordPress จะเปลี่ยนไปใช้ธีมมาตรฐานเริ่มต้น (ค่า WP_DEFAULT_THEME) ให้อัตโนมัติ หากธีมนั้นติดตั้งอยู่ในเครื่อง จึงควรเก็บธีมมาตรฐานรุ่นล่าสุดไว้อย่างน้อย 1 ตัวเสมอ

หาปลั๊กอินต้นเหตุหลังปิดทั้งหมด

เมื่อเข้าหลังบ้านได้แล้ว ให้เปิดปลั๊กอินกลับทีละตัว และตรวจหน้าเว็บหลังเปิดแต่ละตัว ตัวที่เปิดแล้วเว็บพังคือต้นเหตุ ด้วย WP-CLI ทำได้ดังนี้

for p in $(cat ~/active-plugins.txt); do
  wp plugin activate "$p" --skip-themes || break
  curl -s -o /dev/null -w "$p: %{http_code}\n" https://example.com/wp-login.php
done

หากปลั๊กอินตัวใดทำให้รหัสที่ได้เป็น 500 ให้หยุดและปิดตัวนั้น จากนั้นอัปเดต ย้อนเวอร์ชัน หรือหาปลั๊กอินอื่นแทน

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

  • เปิด https://example.com/wp-admin/ ได้และเข้าสู่ระบบได้ตามปกติ
  • หน้า Plugins แสดงปลั๊กอินต้นเหตุในสถานะ Inactive
  • รัน wp plugin list --status=active แล้วเทียบกับไฟล์ ~/active-plugins.txt ว่าเปิดตัวที่จำเป็นกลับครบ

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

ปิดปลั๊กอินทั้งหมดแล้วยังเข้าหลังบ้านไม่ได้

ต้นเหตุอาจเป็นธีม ปลั๊กอิน Must-Use หรือไฟล์ .htaccess ลองสลับธีม และเปลี่ยนชื่อ .htaccess ชั่วคราว (จากนั้นสร้างใหม่ที่ Settings > Permalinks) ตรวจ Log อีกครั้ง

WP-CLI เองก็ขึ้น Fatal error

ลืมใส่ --skip-plugins --skip-themes หรือต้นเหตุอยู่ใน wp-config.php หรือ mu-plugins ให้ใช้วิธีที่ 2 หรือ 4 แทน

ถูกปลั๊กอินความปลอดภัยล็อกออกเพราะ Login ผิดหลายครั้ง

ปิดปลั๊กอินนั้นด้วยวิธีใดวิธีหนึ่งข้างต้นก็จะปลดล็อกได้ แต่ถ้าถูกบล็อกที่ระดับเซิร์ฟเวอร์ เช่น Fail2Ban บน Plesk ต้องปลดที่นั่น ดู ปลดบล็อก IP ที่ถูก Fail2Ban แบนบน Plesk

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

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security