คุณสามารถสร้างตารางเวลาใหม่ผ่าน cron_schedules:
function my_cron_schedules($schedules){
if(!isset($schedules["5min"])){
$schedules["5min"] = array(
'interval' => 5*60,
'display' => __('Once every 5 minutes'));
}
if(!isset($schedules["30min"])){
$schedules["30min"] = array(
'interval' => 30*60,
'display' => __('Once every 30 minutes'));
}
return $schedules;
}
add_filter('cron_schedules','my_cron_schedules');
ตอนนี้คุณสามารถกำหนดเวลาการทำงานของคุณ:
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
หากต้องการกำหนดเวลาเพียงครั้งเดียวให้ห่อในฟังก์ชันและตรวจสอบก่อนเรียกใช้:
$args = array(false);
function schedule_my_cron(){
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
}
if(!wp_next_scheduled('my_schedule_hook',$args)){
add_action('init', 'schedule_my_cron');
}
บันทึกพารามิเตอร์ $ args! ไม่ได้ระบุพารามิเตอร์ $ args ใน wp_next_scheduled แต่การมี $ args สำหรับ wp_schedule_event จะทำให้จำนวนเหตุการณ์ที่เกือบจะไม่สิ้นสุดของเหตุการณ์เดียวกัน (แทนที่จะเป็นเพียงหนึ่ง)
สุดท้ายสร้างฟังก์ชั่นจริงที่คุณต้องการเรียกใช้:
function my_schedule_hook(){
// codes go here
}
ฉันคิดว่ามันเป็นสิ่งสำคัญที่จะกล่าวถึงว่า wp-cron กำลังตรวจสอบตารางเวลาและดำเนินงานตามกำหนดเวลาในแต่ละครั้งที่โหลดหน้าเว็บ
ดังนั้นหากคุณมีเว็บไซต์ที่มีปริมาณการใช้งานต่ำซึ่งมีผู้เยี่ยมชมเพียง 1 ชั่วโมงต่อชั่วโมง wp-cron จะทำงานเฉพาะเมื่อผู้เยี่ยมชมนั้นเรียกดูไซต์ของคุณ (หนึ่งครั้งต่อชั่วโมง) หากเว็บไซต์ของคุณมีผู้เข้าชมจำนวนมากที่มีผู้เข้าชมร้องขอหน้าเว็บทุกวินาที wp-cron จะถูกเรียกใช้ทุกวินาทีทำให้เกิดการโหลดเพิ่มขึ้นบนเซิร์ฟเวอร์
ทางออกคือปิดการทำงานของ wp-cron และทริกเกอร์มันผ่านงาน cron จริงในช่วงเวลาที่คุณทำซ้ำงาน wp-cron ที่กำหนดเวลาที่เร็วที่สุด (5 นาทีในกรณีของคุณ)
Lucas Rolffอธิบายปัญหาและให้รายละเอียดวิธีแก้ปัญหา
คุณสามารถใช้บริการบุคคลที่สามฟรีเช่นUptimeRobotเพื่อสืบค้นเว็บไซต์ของคุณ (และเรียกใช้ wp-cron) ทุก ๆ 5 นาทีหากคุณไม่ต้องการปิดใช้งาน wp-cron และเรียกใช้ผ่านงาน cron จริง