ป้ายกำกับ: CMS Workflow

WordPress: เตรียมบทความรอไว้ทุก ๆ วันเสาร์WordPress: เตรียมบทความรอไว้ทุก ๆ วันเสาร์

เอาจริง ๆ แล้วช่วงนี้เขียนบทความทิ้งไว้ล่วงหน้าหลาย ๆ เรื่อง อย่างวันนี้จริง ๆ ก็เขียนไว้ตั้งแต่เมษาแต่เห็นว่าเวลาที่เผยแพร่เป็น 24 เลย พอต้องมาเลือกวันที่ล่วงหน้าบ่อย ๆ ก็คิดได้ว่าทำไม่ ไม่เตรียมวันเวลากับบทความไว้ล่วงหน้าเลย โดยจะ reindex ไปในตัวให้ เอา id เก่า ๆ ที่ผ่านมาแล้ว ไม่มีแล้วในตารางมาใช้ใหม่

SET @start_date = '2026-10-24 07:00:00'; -- วันเสาร์แรกหลังจาก 17 ต.ค. 2026 INSERT INTO `wp_posts` (ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_content_filtered, post_parent, guid, menu_order, post_type, post_mime_type, comment_count) SELECT n.id_seq, 1, -- post_author (สมมติว่าเป็น Admin ID: 1) DATE_ADD (@start_date, INTERVAL (ROW_NUMBER () OVER (ORDER BY n.id_seq) - 1) * 7 DAY) , DATE_ADD (@start_date, INTERVAL (ROW_NUMBER () OVER (ORDER BY n.id_seq) - 1) * 7 DAY) , '', -- post_content n.id_seq, -- post_title '', -- post_excerpt 'future', -- post_status 'open', 'open', n.id_seq, -- post_name (slug) '', '', NOW () , NOW () , '', 0, '', 0, 'post', '', 0
FROM (-- สร้างลำดับตัวเลข 1 ถึง 11876 SELECT (t4.n*1000 + t3.n*100 + t2.n*10 + t1.n) AS id_seq FROM (SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t1 CROSS JOIN (SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t2 CROSS JOIN (SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t3 CROSS JOIN (SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 AS n UNION SELECT 10 UNION SELECT 11) AS t4) AS n
LEFT JOIN `wp_posts` p ON n.id_seq = p.ID
WHERE n.id_seq BETWEEN 1 AND 11876 AND p.ID IS NULL; -- เงื่อนไข: เฉพาะ ID ที่ไม่มีอยู่ในตารางเท่านั้น SET @start_date = NULL;

อธิบายการทำงานของ Script นี้

  1. การสร้าง ID (Sequence Generation)
    ผมใช้การ CROSS JOIN ตารางชั่วคราวเพื่อสร้างเลขลำดับตั้งแต่ 0 ถึงประมาณ 111876 เพื่อให้ครอบคลุมช่วง 1 – 11876 (มันคือเลข AUTO_INCREMENT ของตารางตอนนี้)
  2. เงื่อนไขการ Insert (LEFT JOIN ... IS NULL)
    ระบบจะตรวจสอบว่า ID นั้นมีอยู่ในตาราง wp_posts หรือยัง ถ้ามีอยู่แล้วจะไม่ทำอะไร แต่ถ้ายังไม่มี (p.ID IS NULL) จะทำการ Insert ข้อมูลใหม่เข้าไป
  3. การคำนวณวันที่
    * ใช้ ROW_NUMBER () OVER (...) เพื่อหาลำดับเฉพาะของรายการที่จะถูก Insert ใหม่จริง ๆ
  4. นำลำดับนั้นมาคูณ 7 วัน เพื่อให้ทุกรายการลงวันเสาร์ถัดไปเรื่อย ๆ เริ่มจาก 2026-10-24 07:00:00 (วันที่เขียนบทความล่วงหน้าไว้)
  5. ใส่ค่า Default ที่จำเป็นสำหรับ WordPress ไว้ให้ (เช่น post_status = 'future', post_type = 'post') เพื่อให้ระบบทำงานได้ไม่เออร์เรอร์

เท่านี้ก็ไม่ต้องมาเลือกวันที่แผยแพร่ไปอีกนานเลย


อ่านเพิ่มเติม