Bạn có thể tạo thời gian lịch biểu mới thông qua 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');
Bây giờ bạn có thể lên lịch cho chức năng của mình:
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
Để chỉ lên lịch một lần, hãy bọc nó trong một chức năng và kiểm tra trước khi chạy nó:
$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');
}
Lưu ý tham số $ args! Không chỉ định tham số $ args trong wp_next_schediated, nhưng việc có $ args cho wp_schedule_event, sẽ khiến một số lượng gần như vô hạn của cùng một sự kiện được lên lịch (thay vì chỉ một).
Cuối cùng, tạo chức năng thực tế mà bạn muốn chạy:
function my_schedule_hook(){
// codes go here
}
Tôi nghĩ điều quan trọng là phải đề cập rằng wp-cron đang kiểm tra lịch trình và chạy các công việc theo lịch trình mỗi khi một trang được tải.
Vì vậy, nếu bạn có một trang web có lưu lượng truy cập thấp chỉ có 1 khách truy cập một giờ, wp-cron sẽ chỉ chạy khi khách truy cập đó duyệt trang web của bạn (mỗi giờ một lần). Nếu bạn có một trang web có lưu lượng truy cập cao với khách truy cập yêu cầu một trang mỗi giây, wp-cron sẽ được kích hoạt mỗi giây gây thêm tải cho máy chủ.
Giải pháp là hủy kích hoạt wp-cron và kích hoạt nó thông qua một công việc cron thực trong khoảng thời gian bạn lặp lại nhanh nhất công việc wp-cron theo lịch trình (5 phút trong trường hợp của bạn).
Lucas Rolff giải thích vấn đề và đưa ra giải pháp chi tiết.
Cách khác, bạn có thể sử dụng dịch vụ bên thứ 3 miễn phí như UptimeRobot để truy vấn trang web của mình (và kích hoạt wp-cron) cứ sau 5 phút, nếu bạn không muốn hủy kích hoạt wp-cron và kích hoạt nó thông qua công việc định kỳ thực.