Как я могу изменить частоту запланированного события?
Я объявил запланированное событие в плагине, подобном этому:
function shedule_email_alerts() {
if ( !wp_next_scheduled( 'send_email_alerts_hook' ) ) {
wp_schedule_event(time(), 'hourly', 'send_email_alerts_hook');
}
}
Затем я хотел изменить частоту на "ежедневно", сделав это, заменив исходную функцию на:
function shedule_email_alerts() {
if ( !wp_next_scheduled( 'send_email_alerts_hook' ) ) {
wp_schedule_event(time(), 'daily', 'send_email_alerts_hook');
}
}
Но, похоже, мое событие все еще запускается каждый час. Я использую плагин Core control для мониторинга задач CRON, и он по-прежнему отображается как "один раз в час"
3 answers
Мне кажется, что вы добавляете это событие только тогда, когда еще не запланировано такое событие "send_email_alerts_hook". Попробуйте что-нибудь подобное и дайте мне знать, сработает ли это.
function shedule_email_alerts() {
if ( !wp_next_scheduled( 'send_email_alerts_hook' ) ) {
wp_schedule_event(time(), 'daily', 'send_email_alerts_hook');
} else {
wp_reschedule_event(time(), 'daily', 'send_email_alerts_hook');
}
}
Дело в том, что вы будете "переписывать" это событие все время, поэтому было бы неплохо отключить эту функцию при ее первом запуске.
Лучшим решением было бы проверить, как собираются эти задания, и проверить, добавлено ли уже это событие. Если да, то проверьте, является ли повторение другой - если так, перенесите. Вы можете найти эту функцию в wp-includes/cron.php строка ~63
function wp_schedule_event( $timestamp, $recurrence, $hook, $args = array()) {
$crons = _get_cron_array();
$schedules = wp_get_schedules();
if ( !isset( $schedules[$recurrence] ) )
return false;
$event = (object) array( 'hook' => $hook, 'timestamp' => $timestamp, 'schedule' => $recurrence, 'args' => $args, 'interval' => $schedules[$recurrence]['interval'] );
$event = apply_filters('schedule_event', $event);
// A plugin disallowed this event
if ( ! $event )
return false;
$key = md5(serialize($event->args));
$crons[$event->timestamp][$event->hook][$key] = array( 'schedule' => $event->schedule, 'args' => $event->args, 'interval' => $event->interval );
uksort( $crons, "strnatcasecmp" );
_set_cron_array( $crons );
}
Удачи!
Хорошо, я мог бы решить проблему с помощью wp_clear_scheduled_hook()
Я прокомментировал свое объявление расписания и добавил wp_clear_scheduled_hook('send_email_alerts_hook')
в конце. Затем деактивируйте - повторно активируйте мой плагин, который удалил мой запланированный крюк. Затем удалил wp_clear_scheduled_hook()
и раскомментировал мой код, теперь расписание было настроено правильно.
Нашел подсказку здесь.
Попробуйте выполнить отладку с помощью этого плагина, который я написал: Ссылка на Github/Gist. Это немного халтурно, но это служит своей цели.
Обратите внимание, что крючок wp_footer()
должен присутствовать в вашей теме. Иначе вам придется зацепить его где-нибудь в другом месте.