หนึ่งในปัญหายอดฮิตที่มือใหม่เจอหลังจาก ย้ายโดเมน, เปลี่ยน URL จาก http เป็น https หรือ ย้าย Hosting ใหม่ คือลิงก์ภาพและลิงก์ภายในเว็บยังชี้ไปที่ URL เก่า ทำให้รูปหาย, เว็บแสดงผลผิดพลาด หรือ Mixed Content Warning ขึ้น ทางแก้คือการใช้ Search & Replace ในฐานข้อมูล WordPress ซึ่งถ้าทำถูกวิธีใช้เวลาไม่กี่นาทีก็เสร็จ
ทำไมต้อง Search & Replace ในฐานข้อมูล?
WordPress เก็บข้อมูลเนื้อหา, URL รูปภาพ, ลิงก์ภายใน และการตั้งค่าต่าง ๆ ไว้ในฐานข้อมูล MySQL ดังนั้นการแค่เปลี่ยน Settings → General แล้วอัปเดต WordPress Address URL จึงยังไม่พอ เพราะ URL เก่าที่ฝังอยู่ใน wp_posts, wp_options และตารางอื่น ๆ จะยังคงอยู่
สถานการณ์ที่ต้องใช้ Search & Replace:
- เปลี่ยนโดเมนจาก
oldsite.comเป็นnewsite.com - เปลี่ยน URL จาก
http://เป็นhttps://(SSL) - ย้ายจาก
localhostหรือโดเมนทดสอบขึ้น Production - ย้าย WordPress จาก Subfolder ไปยัง Root Domain
- เปลี่ยนชื่อโดเมนย่อย (subdomain)
วิธีที่ 1: ใช้ Plugin Better Search Replace (แนะนำสำหรับมือใหม่)
Better Search Replace เป็น Plugin ฟรีที่ได้รับความนิยมสูงสุด ใช้งานง่าย และรองรับ Serialized Data ซึ่งเป็นรูปแบบข้อมูลพิเศษที่ WordPress ใช้เก็บค่าบางอย่าง
ขั้นตอนติดตั้งและใช้งาน
- เข้า WordPress Admin → Plugins → Add New
- ค้นหา "Better Search Replace"
- กด Install Now แล้ว Activate
- ไปที่เมนู Tools → Better Search Replace
- กรอกช่อง Search for: ใส่ URL เก่า เช่น
http://oldsite.com - กรอกช่อง Replace with: ใส่ URL ใหม่ เช่น
https://newsite.com - เลือกตารางที่ต้องการ (แนะนำให้เลือกทั้งหมด)
- ติ๊ก "Run as dry run?" ก่อนเพื่อดูตัวอย่างว่าจะมีกี่รายการที่เปลี่ยน
- เมื่อพอใจแล้ว ยกเลิก dry run แล้วกด Run Search/Replace
วิธีที่ 2: ใช้ phpMyAdmin ใน cPanel (แบบ Manual)
สำหรับคนที่ไม่อยากติดตั้ง Plugin เพิ่ม สามารถใช้ phpMyAdmin ซึ่งมีอยู่แล้วใน cPanel ได้
ขั้นตอนการใช้งาน
- เข้า cPanel → Databases → phpMyAdmin
- คลิกที่ชื่อฐานข้อมูล WordPress ของคุณด้านซ้าย
- คลิกแท็บ SQL ด้านบน
- พิมพ์คำสั่ง SQL แล้วกด Go
ตัวอย่างคำสั่ง SQL สำหรับเปลี่ยน URL:
-- เปลี่ยน URL ใน wp_options (WordPress Address และ Site Address)
UPDATE wp_options
SET option_value = REPLACE(option_value, 'http://oldsite.com', 'https://newsite.com')
WHERE option_name IN ('siteurl', 'home');
-- เปลี่ยน URL ในเนื้อหาบทความ
UPDATE wp_posts
SET post_content = REPLACE(post_content, 'http://oldsite.com', 'https://newsite.com');
-- เปลี่ยน URL ใน post_excerpt
UPDATE wp_posts
SET post_excerpt = REPLACE(post_excerpt, 'http://oldsite.com', 'https://newsite.com');
-- เปลี่ยน URL ใน post meta (เช่น ลิงก์รูปใน Featured Image)
UPDATE wp_postmeta
SET meta_value = REPLACE(meta_value, 'http://oldsite.com', 'https://newsite.com');
-- เปลี่ยน URL ใน wp_options ทั่วไป
UPDATE wp_options
SET option_value = REPLACE(option_value, 'http://oldsite.com', 'https://newsite.com')
WHERE option_value LIKE '%http://oldsite.com%';
wp_ ให้เปลี่ยนเป็น Prefix ที่ถูกต้อง เช่น mysite_options ดูได้ใน wp-config.php บรรทัด $table_prefixข้อควรระวัง: Serialized Data คืออะไร?
WordPress บางครั้งเก็บข้อมูลในรูปแบบ Serialized Data ซึ่งมีการนับจำนวนตัวอักษรฝังอยู่ เช่น:
a:2:{s:4:"home";s:22:"http://oldsite.com/th/";}
ถ้าคุณใช้คำสั่ง SQL REPLACE แบบธรรมดาจะทำให้ตัวเลขนับตัวอักษรผิด (s:22 แต่ URL ใหม่ยาวกว่า) ส่งผลให้ข้อมูลเสียหาย นี่คือเหตุผลหลักที่แนะนำให้ใช้ Better Search Replace Plugin เพราะมันจัดการ Serialized Data ให้อัตโนมัติ
วิธีที่ 3: ใช้ WP-CLI ผ่าน cPanel Terminal
สำหรับ Hosting ที่เปิดให้ใช้ cPanel Terminal (ไม่ต้องการ SSH แยก) สามารถใช้คำสั่ง WP-CLI ซึ่งเป็นวิธีที่เร็วและปลอดภัยที่สุด
# เปลี่ยน URL พร้อมจัดการ Serialized Data อัตโนมัติ
wp search-replace 'http://oldsite.com' 'https://newsite.com' --all-tables
# ดูตัวอย่างก่อนโดยไม่แก้จริง (dry-run)
wp search-replace 'http://oldsite.com' 'https://newsite.com' --all-tables --dry-run
# แก้เฉพาะตารางที่ต้องการ
wp search-replace 'http://oldsite.com' 'https://newsite.com' wp_posts wp_options
cd ไปยัง Directory ของ WordPress ก่อนรันคำสั่งกรณีใช้งานพิเศษ: เปลี่ยน http เป็น https
นี่เป็นสถานการณ์ที่พบบ่อยที่สุด เมื่อคุณติดตั้ง SSL Certificate แล้วแต่เว็บยังขึ้น Mixed Content Warning
- ตรวจสอบว่า SSL Certificate ใช้งานได้แล้วผ่านเบราว์เซอร์
- ไปที่ Settings → General เปลี่ยน WordPress Address และ Site Address เป็น
https:// - ใช้ Better Search Replace เปลี่ยน
http://yoursite.com→https://yoursite.com - ล้าง Cache ทั้งหมด (Cache Plugin + Browser Cache)
- ตรวจสอบด้วย WhyNoPadlock.com
ตรวจสอบว่า Search & Replace ทำงานถูกต้อง
หลังจากทำ Search & Replace เสร็จ ให้ตรวจสอบดังนี้:
-- ตรวจสอบ URL หลักใน wp_options
SELECT option_name, option_value
FROM wp_options
WHERE option_name IN ('siteurl', 'home');
-- ค้นหา URL เก่าที่อาจยังค้างอยู่ใน wp_posts
SELECT ID, post_title, post_status
FROM wp_posts
WHERE post_content LIKE '%http://oldsite.com%'
LIMIT 10;
-- ตรวจสอบ wp_postmeta
SELECT meta_key, meta_value
FROM wp_postmeta
WHERE meta_value LIKE '%http://oldsite.com%'
LIMIT 10;
แก้ปัญหาที่พบบ่อย
Error: "Table prefix is incorrect"
เกิดขึ้นเมื่อ Table Prefix ในฐานข้อมูลไม่ตรงกับที่ Plugin คาดไว้ แก้โดยเปิดไฟล์ wp-config.php ดูค่า $table_prefix แล้วแก้ใน phpMyAdmin ให้ตรงกัน
Error: "Maximum execution time exceeded" ใน phpMyAdmin
ฐานข้อมูลใหญ่เกินไปสำหรับ PHP timeout ให้แก้โดยไปที่ cPanel → Select PHP Version → PHP Options เพิ่มค่า max_execution_time เป็น 300 แล้วลองใหม่ หรือรันหลายตารางแยกกัน
Error: รูปภาพยังหายอยู่หลัง Search & Replace
ตรวจสอบใน phpMyAdmin ว่ายังมี URL เก่าในตาราง wp_postmeta (meta_key เช่น _wp_attached_file และ _wp_attachment_metadata) แล้วรัน Search & Replace อีกครั้งโดยเลือกทุกตาราง
Error: เว็บ Redirect วนไม่หยุด (Redirect Loop)
มักเกิดเมื่อ Settings → General ยังเป็น http แต่ .htaccess มี force https อยู่ แก้โดยเปลี่ยน WordPress Address เป็น https ใน Settings → General ให้ตรงกัน หรือลบ .htaccess แล้วให้ WordPress สร้างใหม่ผ่าน Settings → Permalinks
Error: หน้าเว็บแสดงข้อความ "Error establishing a database connection"
อาจเกิดจาก SQL ที่รันมีข้อผิดพลาด หรือ Serialized Data เสียหาย ให้ Restore ฐานข้อมูลจาก Backup ที่ทำไว้ก่อนหน้า แล้วใช้ Better Search Replace Plugin แทน phpMyAdmin SQL
คำถามที่พบบ่อย (FAQ)
Q: ต้องทำ Search & Replace กี่ครั้ง?
A: โดยปกติครั้งเดียวก็พอ แต่ถ้าเว็บมี Plugin หลายตัวที่เก็บ URL ไว้ในตารางของตัวเอง อาจต้องรันใหม่และเลือกทุกตาราง แนะนำให้ใช้ Better Search Replace เพราะสแกนทุกตารางในครั้งเดียว
Q: ทำ Search & Replace แล้ว WordPress ล็อกอินไม่ได้ ต้องทำอย่างไร?
A: ตรวจสอบ wp_options ว่า siteurl และ home ถูกต้องไหม ถ้า URL ผิด เข้า phpMyAdmin แล้วแก้ค่าเหล่านี้ตรง ๆ ให้ถูกต้อง หรือ Restore จาก Backup
Q: ต่างกันอย่างไรระหว่าง Better Search Replace และ Velvet Blues Update URLs?
A: ทั้งสองทำงานคล้ายกัน แต่ Better Search Replace รองรับ Serialized Data ได้ดีกว่า และ UI ใช้งานง่ายกว่า ถ้าต้องเลือกแนะนำ Better Search Replace เพราะ Active Installations มากกว่าและ Support ดีกว่า