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.

Панель отладки 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

Как я могу перепланировать свой запрос/функцию на определенное время каждый день (редактирование моего текущего расписания)?

 4
Author: Mayeenul Islam, 2016-04-11

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 не гарантируется для запуска в точное время, поскольку он запускается при посещении сайта. Я не уверен, что повторяющиеся пробежки будут "прилипать" в полночь или будут медленно соскальзывать оттуда, возможно, вам придется периодически перенастраиваться.

 12
Author: Rarst, 2016-04-12 04:32:43