วิธีการทำงานของ 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 เกี่ยวกับเวลาการเยี่ยมชมของผู้ใช้ เป็นไปได้ว่าเรามีผลกระทบด้านลบต่อเว็บไซต์ ไม่ว่าขนาดจะใหญ่หรือเป็นที่นิยมเพียงใด

โฮสต์เว็บไซต์ของคุณด้วย Pressidium

รับประกันคืนเงิน 60 วัน

ดูแผนของเรา

ในกรณีของเว็บไซต์ยอดนิยม คุณจะพบกับปริมาณการใช้งานจำนวนมากเนื่องจากการทำงานจำนวนมากพร้อมกัน ซึ่งอาจใช้ทรัพยากรของเซิร์ฟเวอร์ของคุณและส่งผลกระทบต่อประสิทธิภาพการทำงาน หรือแม้กระทั่งทำให้เว็บไซต์ของคุณหยุดทำงาน

ในกรณีของเว็บไซต์ขนาดเล็ก ซึ่งหมายความว่ามีผู้เข้าชมไม่กี่คน 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 เพียงพอสำหรับความต้องการของคุณหรือไม่ ก่อนเลือกโซลูชันฝั่งเซิร์ฟเวอร์อื่นๆ