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 매개 변수에 유의하십시오! wp_next_scheduled에 $ args 매개 변수를 지정하지 않고 wp_schedule_event에 $ args를 지정하면 거의 동일한 수의 동일한 이벤트가 스케줄됩니다 (하나가 아닌).
마지막으로 실행할 실제 함수를 작성하십시오.
function my_schedule_hook(){
// codes go here
}
wp-cron이 일정을 확인하고 페이지가로드 될 때마다 예정된 작업을 실행한다고 언급하는 것이 중요하다고 생각합니다.
따라서 한 시간에 방문자가 1 명인 트래픽이 적은 웹 사이트가있는 경우 방문자가 사이트를 탐색 할 때 (1 시간에 한 번) wp-cron 만 실행됩니다. 방문자가 초당 페이지를 요청하는 트래픽이 많은 사이트 인 경우 wp-cron이 1 초마다 트리거되어 서버에 추가로드가 발생합니다.
해결책은 wp-cron을 비활성화하고 예약 된 wp-cron 작업을 가장 빠르게 반복하는 시간 간격 (실제 5 분)으로 실제 cron 작업을 통해 트리거하는 것입니다.
Lucas Rolff 는 문제를 설명하고 솔루션을 자세하게 제공합니다.
대안으로, wp-cron을 비활성화하고 실제 cron 작업을 통해 트리거하지 않으려는 경우 UptimeRobot 과 같은 무료 타사 서비스 를 사용하여 5 분마다 사이트를 쿼리하고 wp-cron을 트리거 할 수 있습니다.