วิธีใช้ Search & Replace ใน WordPress เปลี่ยน URL และแก้ไขฐานข้อมูล

เครื่องมือที่ต้องรู้เมื่อย้ายโดเมน, เปลี่ยนจาก http เป็น https หรือย้ายโฮสต์ใหม่

วิธีใช้ Search & Replace ใน WordPress

หนึ่งในปัญหายอดฮิตที่มือใหม่เจอหลังจาก ย้ายโดเมน, เปลี่ยน 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:

⚠️ สำคัญมาก: ก่อนทำ Search & Replace ทุกครั้ง สำรองข้อมูลฐานข้อมูลก่อนเสมอ! เพราะการแก้ไขผิดพลาดอาจทำให้เว็บพังได้ ใช้ phpMyAdmin Export หรือ Plugin Backup

วิธีที่ 1: ใช้ Plugin Better Search Replace (แนะนำสำหรับมือใหม่)

Better Search Replace เป็น Plugin ฟรีที่ได้รับความนิยมสูงสุด ใช้งานง่าย และรองรับ Serialized Data ซึ่งเป็นรูปแบบข้อมูลพิเศษที่ WordPress ใช้เก็บค่าบางอย่าง

ขั้นตอนติดตั้งและใช้งาน

  1. เข้า WordPress Admin → Plugins → Add New
  2. ค้นหา "Better Search Replace"
  3. กด Install Now แล้ว Activate
  4. ไปที่เมนู Tools → Better Search Replace
  5. กรอกช่อง Search for: ใส่ URL เก่า เช่น http://oldsite.com
  6. กรอกช่อง Replace with: ใส่ URL ใหม่ เช่น https://newsite.com
  7. เลือกตารางที่ต้องการ (แนะนำให้เลือกทั้งหมด)
  8. ติ๊ก "Run as dry run?" ก่อนเพื่อดูตัวอย่างว่าจะมีกี่รายการที่เปลี่ยน
  9. เมื่อพอใจแล้ว ยกเลิก dry run แล้วกด Run Search/Replace
Tip: ติ๊ก "Run as dry run?" ก่อนทุกครั้ง เพื่อดูจำนวน records ที่จะถูกแก้ไข ถ้าตัวเลขสมเหตุสมผลค่อยรันจริง

วิธีที่ 2: ใช้ phpMyAdmin ใน cPanel (แบบ Manual)

สำหรับคนที่ไม่อยากติดตั้ง Plugin เพิ่ม สามารถใช้ phpMyAdmin ซึ่งมีอยู่แล้วใน cPanel ได้

ขั้นตอนการใช้งาน

  1. เข้า cPanel → Databases → phpMyAdmin
  2. คลิกที่ชื่อฐานข้อมูล WordPress ของคุณด้านซ้าย
  3. คลิกแท็บ SQL ด้านบน
  4. พิมพ์คำสั่ง 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%';
หมายเหตุ: ถ้า Table Prefix ของคุณไม่ใช่ 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
วิธีเข้า Terminal: ใน cPanel → Advanced → Terminal แล้ว cd ไปยัง Directory ของ WordPress ก่อนรันคำสั่ง

กรณีใช้งานพิเศษ: เปลี่ยน http เป็น https

นี่เป็นสถานการณ์ที่พบบ่อยที่สุด เมื่อคุณติดตั้ง SSL Certificate แล้วแต่เว็บยังขึ้น Mixed Content Warning

  1. ตรวจสอบว่า SSL Certificate ใช้งานได้แล้วผ่านเบราว์เซอร์
  2. ไปที่ Settings → General เปลี่ยน WordPress Address และ Site Address เป็น https://
  3. ใช้ Better Search Replace เปลี่ยน http://yoursite.com → https://yoursite.com
  4. ล้าง Cache ทั้งหมด (Cache Plugin + Browser Cache)
  5. ตรวจสอบด้วย 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;
Tip: ถ้าผลลัพธ์ว่างเปล่าหมายความว่า Search & Replace สำเร็จแล้ว ถ้ายังมีผลลัพธ์ให้รัน Search & Replace อีกครั้ง

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

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 ดีกว่า