ป้ายกำกับ: กู้คืนจากข้อผิดพลาด

WordPress: เปลี่ยนเวลา post ทั้งหมดให้สม่ำเสมอWordPress: เปลี่ยนเวลา post ทั้งหมดให้สม่ำเสมอ

ในฐานะ System Specialist ที่ต้องดูแลระบบขนาดใหญ่ การจัดการข้อมูลจำนวนมากอย่าง WordPress Post หลายร้อยหรือหลายพันโพสต์ให้มีเวลาเผยแพร่ (Post Time) ที่สม่ำเสมอเป็นสิ่งจำเป็นอย่างยิ่ง ไม่ว่าจะเป็นการจัดตารางการเผยแพร่เนื้อหาล่วงหน้า (Scheduling) หรือการแก้ไขข้อมูลย้อนหลังเพื่อความถูกต้องของระบบ

หากคุณจำเป็นต้องเปลี่ยนเวลาของโพสต์ทั้งหมดให้เป็นเวลาเดียวกัน (เช่น 07:00:00 น.) การแก้ไขด้วยหน้า Dashboard ทีละโพสต์นั้นเป็นไปไม่ได้และใช้เวลานานเกินไป วิธีที่รวดเร็วและมีประสิทธิภาพที่สุดคือการใช้คำสั่ง SQL โดยเฉพาะอย่างยิ่งเมื่อเราใช้ฐานข้อมูล PostgreSQL

⚠️ ข้อควรระวัง: การสำรองข้อมูล (Backup) คือสิ่งสำคัญที่สุด

ก่อนที่จะรันคำสั่ง UPDATE ใด ๆ บนฐานข้อมูลจริง คุณต้องทำการสำรองข้อมูล (Backup) ตาราง wp_posts ทั้งหมดก่อนเสมอ การแก้ไขข้อมูลด้วย SQL เป็นการดำเนินการที่ทรงพลังและไม่สามารถย้อนกลับได้หากไม่มีการสำรองข้อมูล

ขั้นตอนที่ 1: การตรวจสอบข้อมูล (SELECT Query)

ก่อนการเปลี่ยนแปลงใด ๆ เราต้องเขียน Test Script เพื่อตรวจสอบว่าคำสั่งที่เรากำลังจะรันนั้นจะส่งผลลัพธ์ตามที่เราต้องการจริงหรือไม่ เราจะใช้ฟังก์ชันของ PostgreSQL เพื่อกำหนดให้เวลาใหม่เป็น 07:00:00 น. โดยยังคงวันที่เดิมไว้

คำสั่งนี้จะดึงข้อมูล 100 รายการแรกมาแสดงผล โดยเปรียบเทียบวันที่เดิม (original_date) กับวันที่ที่คำนวณใหม่ (new_date) เพื่อยืนยันความถูกต้องของตรรกะ:

SQL

SELECT id, post_title, post_date AS original_date, DATE_TRUNC('day', post_date) + interval '7 hours' AS new_date, post_date_gmt AS original_gmt, DATE_TRUNC('day', post_date_gmt) + interval '7 hours' AS new_gmt FROM wp_posts WHERE post_date IS NOT NULL LIMIT 100;

ขั้นตอนที่ 2: การแก้ไขข้อมูลจริง (UPDATE Query)

เมื่อคุณตรวจสอบผลลัพธ์จากขั้นตอนที่ 1 แล้วและมั่นใจว่า new_date ถูกต้องตามที่ต้องการ คุณสามารถรันคำสั่ง UPDATE นี้เพื่อแก้ไขข้อมูลทั้งหมดในตาราง wp_posts ได้เลย คำสั่งนี้จะอัปเดตทั้ง post_date และ post_date_gmt พร้อมกัน:

SQL

UPDATE wp_posts SET post_date = DATE_TRUNC('day', post_date) + interval '7 hours', post_date_gmt = DATE_TRUNC('day', post_date_gmt) + interval '7 hours' WHERE post_date IS NOT NULL;

ขั้นตอนที่ 3: การยืนยันผลลัพธ์ (Verification Query)

หลังจากรันคำสั่ง UPDATE แล้ว ควรมีการรันคำสั่ง SELECT อีกครั้งเพื่อยืนยันว่าข้อมูลในฐานข้อมูลถูกแก้ไขเรียบร้อยแล้ว และไม่มีแถวใดที่ผิดพลาด:

SQL

SELECT id, post_title, post_date, post_date_gmt FROM wp_posts WHERE post_date IS NOT NULL LIMIT 10;

สรุปและข้อแนะนำจาก Senior Architect

การใช้ SQL ในการจัดการข้อมูลจำนวนมากเป็นวิธีที่ทรงพลังและประหยัดเวลาที่สุด อย่างไรก็ตาม การจัดการฐานข้อมูลจำเป็นต้องอาศัยความเข้าใจในโครงสร้างข้อมูล (Schema) และการทดสอบอย่างรอบคอบเสมอ

หากคุณต้องการความยืดหยุ่นในการกำหนดเวลาที่แตกต่างกันสำหรับโพสต์แต่ละโพสต์ การใช้ Custom Plugin หรือ Action Hook ใน WordPress จะเป็นทางเลือกที่ปลอดภัยกว่าการรัน SQL แบบ Mass Update แต่สำหรับการแก้ไขข้อมูลครั้งใหญ่เพื่อความสม่ำเสมอของเวลา การใช้ PostgreSQL Query ตามที่แนะนำนี้คือมาตรฐานปฏิบัติที่เหมาะสมที่สุด