วิธีการทำงานของ WordPress Cron
เผยแพร่แล้ว: 2021-12-03คุณเคยสงสัยหรือไม่ว่า WP-Cron คืออะไร? ถ้าใช่ นี่คือบทความที่สมบูรณ์แบบสำหรับคุณในการเรียนรู้ทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับงานตามกำหนดเวลาของ WordPress
Cron (Command Run On) เป็นยูทิลิตี้ที่เริ่มต้นในระบบ UNIX และต่อมาได้พัฒนาบน LINUX distributions ที่ได้รับการเสนอให้เป็นตัวกำหนดตารางเวลางานตามเวลา
งาน cron เป็นงานที่ทำซ้ำหรือเป็นงานครั้งเดียว หลายปีที่ผ่านมา ส่วนใหญ่ถูกใช้เป็นเครื่องมือในการดูแลระบบสำหรับงานต่างๆ โดยอัตโนมัติ
WordPress Cron
ขณะใช้งานเว็บไซต์ WordPress งานบางอย่างจะดำเนินการในพื้นหลังซึ่งจำเป็นต้องดำเนินการเป็นระยะ เช่น การตรวจสอบการอัปเดตธีมและปลั๊กอิน โพสต์ตามกำหนดเวลา ช่วงเวลาที่ต้องการลบ และอื่นๆ อีกมากมาย งานตามกำหนดเวลาตามเวลาเหล่านี้ได้รับการจัดการโดย WP-Cron
ในการติดตั้ง WordPress ไฟล์ที่เกี่ยวข้องกับงาน cron คือ wp-cron.php
ซึ่งอยู่ในโฟลเดอร์รูทของการติดตั้งของคุณ
ไฟล์ wp-cron.php มีโค้ดสำหรับงานอัตโนมัติที่เกี่ยวข้องกับการอัปเดตและโพสต์
มันทำงานอย่างไร
WP-Cron ตรวจสอบรายการงานในการโหลดหน้าเว็บทุกครั้งและดำเนินการตามนั้น
ถ้าในขณะที่โหลดเพจ งานจะครบกำหนด งานจะถูกเพิ่มในคิว ด้วยวิธีนี้ WordPress ช่วยให้มั่นใจได้ว่าแม้เหตุการณ์ที่ครบกำหนดจะถูกไล่ออกและไม่ถูกข้าม และในที่สุดงานทั้งหมดจะถูกดำเนินการในการโหลดหน้าเว็บนั้น
เป็นเรื่องปกติหากสิ่งนี้ดูไม่สมเหตุสมผลสำหรับคุณ แต่ให้คิดถึงทางเลือกอื่น ในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกัน คุณควรมีสิทธิ์เข้าถึงคำสั่งเซิร์ฟเวอร์เพื่อควบคุมงานเหล่านี้ตามที่เห็นสมควร แต่นั่นจะไม่เสี่ยงสำหรับเซิร์ฟเวอร์ใช่หรือไม่
ดังนั้น ให้พิจารณาสิ่งที่ WordPress ใช้เป็นวิธีแก้ปัญหาในสถานการณ์นี้ อย่างไรก็ตาม มีข้อเสียบางประการที่เราจะตรวจสอบในอีกสักครู่
ปลั๊กอิน WP-Crontrol
วิธีที่ยอดเยี่ยมและง่ายในการดูรายการงาน cron ในเว็บไซต์ WordPress คือการติดตั้งปลั๊กอิน WP-Crontrol
หลังจากเปิดใช้งาน คุณสามารถดูหน้าผู้ดูแลระบบของปลั๊กอินได้ภายใต้รายการเมนูเครื่องมือ -> เหตุการณ์ Cron ในการติดตั้งวานิลลาคุณจะเห็นสิ่งนี้:

หากคุณวางเมาส์เหนือแต่ละแถว คุณจะสังเกตเห็นว่ามีการดำเนินการให้คุณแก้ไขหรือเรียกใช้กิจกรรมใดๆ

ในหน้าจอแก้ไขของเหตุการณ์ wp_update_themes ตัวอย่างเช่น คุณสามารถแก้ไขการตั้งค่าได้

ภายใต้รายการเมนูการตั้งค่า -> กำหนดการ Cron คุณสามารถดูกำหนดการเริ่มต้นและหากต้องการ ให้เพิ่มรายการของคุณเองและตั้งชื่อเพื่อดูในรายการ

วิธีสร้างงาน Cron
หากต้องการเพิ่มงาน cron ด้วยตนเอง สิ่งที่คุณต้องทำคือแก้ไขไฟล์ functions.php
ของธีม เพื่อสาธิตตัวอย่างง่ายๆ ให้เปิดด้วยโปรแกรมแก้ไขที่คุณชื่นชอบและเพิ่มโค้ดต่อไปนี้:
add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); }
โดยที่ 'my_cronjob' คือชื่อของ hook ของคุณ และ 'my_cronjob_function' คือชื่อฟังก์ชันของคุณที่จะส่งอีเมลไปยังที่อยู่ที่คุณกำหนดไว้โดยแทนที่ EMAIL_ADDRESS ด้วยที่อยู่ที่ต้องการ
ต่อไป เราต้องกำหนดเวลาให้เบ็ดนี้ทำงานตามเวลาที่เราต้องการ
วิธีเรียกใช้งานเมื่อ
ในการดำเนินการเป็นงาน WP-Cron แบบครั้งเดียว เราต้องใช้ wp_schedule_single_event() ฟังก์ชัน WordPress ในตัวที่ออกแบบมาเพื่อทริกเกอร์ hook ในเวลาที่กำหนด โครงสร้างมันเป็นดังนี้:
wp_schedule_single_event( $timestamp, $hook, $args, $wp_error )
โดยที่ $timestamp เป็นการประทับเวลา Unix สำหรับเวลาที่จะเรียกใช้เหตุการณ์ครั้งต่อไปและ $hook เป็น hook การดำเนินการที่จะดำเนินการเมื่อมีการเรียกใช้เหตุการณ์
จำเป็นต้องมีพารามิเตอร์ทั้งสองนี้ ทีนี้มาพูดถึงพารามิเตอร์ทางเลือกกัน
ด้วยพารามิเตอร์ $args คุณสามารถใช้อาร์เรย์ที่มีอาร์กิวเมนต์ เพื่อส่งผ่านไปยังฟังก์ชันเรียกกลับของ hook แต่ละค่าในอาร์เรย์จะถูกส่งไปยังการเรียกกลับเป็นพารามิเตอร์แต่ละรายการ คีย์อาร์เรย์จะถูกละเว้น
พารามิเตอร์ $wp_error สามารถใช้เพื่อส่งคืน WP_Error เมื่อเกิดความล้มเหลว ค่าเริ่มต้นเป็นเท็จ
โค้ดที่เกี่ยวข้องในไฟล์ functions.php
ของเราจะเป็นดังนี้:
add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } wp_schedule_single_event( time() + 3600, 'my_cronjob' );
ณ จุดนี้ คุณควรจะสามารถเห็นงานที่คุณกำหนดเองได้ในรายการ

วิธีเรียกใช้งานเป็นกิจกรรมที่เกิดซ้ำ
สิ่งที่ WordPress จัดเตรียมไว้สำหรับสถานการณ์นี้คือฟังก์ชัน wp_schedule_event() ซึ่งมีโครงสร้างแบบนี้

wp_schedule_event( $timestamp, $recurrence, $hook, $args, $wp_error)
พารามิเตอร์ $timestamp เป็นการประทับเวลา Unix ที่จำเป็นสำหรับการเรียกใช้เหตุการณ์ครั้งถัดไป $recurrence เป็นสตริงที่จำเป็นสำหรับความถี่ที่เหตุการณ์จะเกิดขึ้นอีกในภายหลัง และ $hook เป็น hook การดำเนินการเพื่อดำเนินการเมื่อมีการเรียกใช้เหตุการณ์
พารามิเตอร์ทางเลือก $args และ $wp_error เหมือนเดิม
รหัสที่รันงานด้วยการเกิดซ้ำของ สมมุติว่า 1 ชั่วโมงคือ:
add_action('my_hourly_cronjob', 'hourly_action'); function hourly_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_hourly_cronjob' )) { wp_schedule_event(time(), 'hourly', 'my_hourly_cronjob'); }
เราใช้ฟังก์ชัน wp_next_scheduled() ในคำสั่ง 'if' ดังที่คุณเห็นด้านบน เพื่อหลีกเลี่ยงเหตุการณ์ที่ซ้ำซ้อน และตรวจสอบให้แน่ใจว่างานไม่ได้ถูกจัดกำหนดการไว้ก่อนที่จะดำเนินการและรัน
เรายังใช้ป้ายกำกับ 'รายชั่วโมง' จากตารางที่กำหนดเวลาไว้ภายใต้การตั้งค่า -> กำหนดการ Cron หากเราต้องการเหตุการณ์ที่แตกต่างออกไป สมมติว่าทุกๆ 45 นาที เราควรสร้างกำหนดการ Cron แบบกำหนดเองที่ชื่อว่า “45_minutes” ก่อน แล้วจึงใช้ในโค้ด
add_action('my_45_cronjob', 'my_45_action'); function my_45_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_45_cronjob' )) { wp_schedule_event(time(), '45_minutes', 'my_45_cronjob'); }
ณ จุดนี้ คุณควรจะเห็นงานที่คุณกำหนดเองในรายการที่มีการเปลี่ยนแปลงที่คาดไว้:

ข้อเสียของ WP-Cron
วิธีที่ WordPress จัดการกับงาน cron ช่วยให้มั่นใจได้ว่างานจะทำงาน แต่ไม่อนุญาตให้คุณระบุว่าเมื่อใด เนื่องจากการตรวจสอบจะเสร็จสิ้นเมื่อผู้เยี่ยมชมโหลดหน้าเว็บไซต์ของคุณ
หากเราถ่ายทอดการควบคุมงาน cron เกี่ยวกับเวลาการเยี่ยมชมของผู้ใช้ เป็นไปได้ว่าเรามีผลกระทบด้านลบต่อเว็บไซต์ ไม่ว่าขนาดจะใหญ่หรือเป็นที่นิยมเพียงใด
ในกรณีของเว็บไซต์ยอดนิยม คุณจะพบกับปริมาณการใช้งานจำนวนมากเนื่องจากการทำงานจำนวนมากพร้อมกัน ซึ่งอาจใช้ทรัพยากรของเซิร์ฟเวอร์ของคุณและส่งผลกระทบต่อประสิทธิภาพการทำงาน หรือแม้กระทั่งทำให้เว็บไซต์ของคุณหยุดทำงาน
ในกรณีของเว็บไซต์ขนาดเล็ก ซึ่งหมายความว่ามีผู้เข้าชมไม่กี่คน wp-cron จะไม่ถูกเรียกใช้บ่อยนัก ดังนั้นงาน cron ที่สำคัญบางอย่างอาจถูกเลื่อนออกไปเป็นเวลาเพียงพอที่จะสร้างผลข้างเคียง เช่น สำรองข้อมูลไม่เพียงพอ หรืออัปเดตบางรายการล่าช้า ข้อมูลที่นับในงาน cron
ปิดการใช้งาน WP-Cron
หากวิธีที่ WP-Cron จัดการกับงาน cron ไม่เป็นไปตามข้อกำหนดของคุณ และคุณต้องการงานที่ดำเนินการตรงเวลา คุณควรปิดใช้งาน WP-Cron และใช้บริการ cron ฝั่งเซิร์ฟเวอร์
หากการปิดใช้งาน WP-Cron ไม่ใช่ตัวเลือกที่ผู้ให้บริการโฮสต์ของคุณให้ไว้ นี่คือวิธีที่คุณสามารถดำเนินการได้ด้วยตนเอง
เปิด wp-config.php
ซึ่งอยู่ใต้โฟลเดอร์รูทของการติดตั้งของคุณด้วยโปรแกรมแก้ไขที่คุณชอบ และค้นหาบรรทัดที่เกี่ยวข้องกับคำนำหน้าตารางฐานข้อมูล หลังจากนั้นให้แทรกบรรทัดนี้:
// /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each * a unique prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wN0b9WQk_'; define('DISABLE_WP_CRON', 'true');
นี่เป็นข้อบังคับหากคุณต้องการใช้ตัวกำหนดเวลาที่เสถียรกว่า เช่น บริการ Linux cron เพื่อเรียกใช้ wp-cron.php เมื่อใดก็ตามที่เหมาะสมกับคุณมากกว่า
โซลูชันฝั่งเซิร์ฟเวอร์: บริการ Linux Cron
ที่ Pressidium เราใช้ Linux Crontab เพื่อทริกเกอร์ WP-Cron ทุกๆ 5 นาที เป็นช่วงเวลาที่เหมาะสมเพื่อให้แน่ใจว่างานตามกำหนดเวลาของคุณจะดำเนินการตรงเวลาและในขณะเดียวกันก็หลีกเลี่ยงไม่ให้เว็บไซต์ WordPress ของคุณทำงานหนักเกินไป สิ่งนี้ไม่รบกวนตัวกำหนดตารางเวลา WP-Cron แต่เฉพาะกลไกการทริกเกอร์เท่านั้น
บทสรุป
หวังว่าบทความนี้จะช่วยให้คุณทำความคุ้นเคยกับ WordPress Cron มันคืออะไรและทำงานอย่างไร และวิธีสร้างตารางเวลาและงานของคุณเอง คิดให้รอบคอบว่า WP-Cron เพียงพอสำหรับความต้องการของคุณหรือไม่ ก่อนเลือกโซลูชันฝั่งเซิร์ฟเวอร์อื่นๆ