wp запланируйте мероприятие() на определенное время, ежедневно
Я не очень хорошо знаком с WP Cron, но я использовал их на одном из своих сайтов со знанием дела. Я задаю пользовательский запрос на каждый час:
add_action( 'init', function () {
if( ! wp_next_scheduled( 'expire_cpt' ) ) {
wp_schedule_event( time(), 'hourly', 'expire_cpt' );
}
add_action( 'expire_cpt', 'pre_expire_the_offers' );
});
function pre_expire_the_offers() {
//...
}
Теперь наша процедура для функции изменилась, и мы подумали перейти на ежедневное расписание. Поэтому я устроил все таким образом:
add_action( 'init', function () {
//Used once to delete all the schedule
//wp_clear_scheduled_hook('expire_cpt');
//I assumed, by clearing, I no-longer need this
//$timestamp = wp_next_scheduled( 'expire_cpt' );
//wp_unschedule_event( $timestamp, 'expire_cpt' );
if( ! wp_next_scheduled( 'expire_cpt' ) ) {
//Need to run this at 24:00:00 everyday, not 24 hours from now
wp_schedule_event( time('00:00:00'), 'daily', 'expire_cpt' );
}
add_action( 'expire_cpt', 'pre_expire_the_offers' );
});
Я делаю это на локальном сервере WAMP на компьютере с Windows. Мое местное компьютерное время, как я понял, повторяя echo date( 'Y-m-d H:i:s', current_time( 'timestamp' ) )
, составляет 2016-04-11 17:18:58.
Шестичасовой разницей может быть время по Гринвичу и мой часовой пояс (+6) - это разумно.
Но проблема в Следующем запланированном времени.
Я использую:
- Панель отладки Cron - Плагин WordPress, а затем попробовал
- Расширенный менеджер Cron - отладка и управление - Плагин WordPress
Для отладки заданий Cron.
Панель отладки Cron показывает текущее время: 11:52:54, в то время как моя метка времени показывает: 17:52:52. Проблема в том, что следующее время появления не 00:00:00, но
2016-04-12 11:33:56
1460460836
24 hours
ACM показывает:
In 24 hours
12.04.2016 17:33:56
Как я могу перепланировать свой запрос/функцию на определенное время каждый день (редактирование моего текущего расписания)?
1 answers
time()
возвращает только текущее время, он не принимает никаких входных данных.
$time = time(); // works out to 2016-04-11T12:11:34+00:00
Чего ты хочешь, так это завтра в полночь:
$tomorrow = strtotime( 'tomorrow' ); // works out to 2016-04-12T00:00:00+00:00
Обратите внимание, что это функции PHP, и они игнорируют часовой пояс WP, так как он сбрасывает часовой пояс PHP в UTC. Поэтому, если вы используете их, вы устанавливаете его на полночь в часовом поясе UTC.
Чтобы сделать это правильно в WP, это беспорядок (это может не работать в некоторых конфигурациях, в которых нет набора timezone_string
, см. мой пост о дате и времени в WP для получения дополнительной информации подробности):
$date = new DateTime( 'tomorrow', new DateTimeZone( get_option( 'timezone_string' ) ) );
// works out to 2016-04-12T00:00:00+03:00
$timestamp = $date->getTimestamp();
Примечание: WP Cron не гарантируется для запуска в точное время, поскольку он запускается при посещении сайта. Я не уверен, что повторяющиеся пробежки будут "прилипать" в полночь или будут медленно соскальзывать оттуда, возможно, вам придется периодически перенастраиваться.