Wp_Schedule_Event каждый день в определенное время

27 февр. 2015 г., 23:24:55
Просмотры: 72K
Голосов: 13

Я написал следующий код для запуска моей функции каждый день в 16:20..

Но, похоже, есть проблема в коде..

не работает

Временная метка Epoch: 1427488800

28.03.2015 1:10:00

if( !wp_next_scheduled( 'import_into_db' ) ) {
wp_schedule_event( time('1427488800'), 'daily', 'import_into_db' );

function import_into_db(){

////Мой код

}
add_action('wp', 'import_into_db');
}
1
Комментарии

Функция time() не принимает входных аргументов, попробуйте использовать функцию strtotime() или strftime() для создания пользовательских временных меток из строки. Но если у вас уже есть временная метка, они вам не понадобятся.

birgire birgire
28 февр. 2015 г. 01:06:52
Все ответы на вопрос 4
0
32

Вместо функции time() используйте strtotime(), так вы сможете указать конкретное время дня - функция использует сегодняшнюю дату с указанным вами временем. В вашем случае это будет выглядеть так:

strtotime('16:20:00'); // 16:20 (4:20 PM)

Использование в функции wp_schedule_event будет следующим:

wp_schedule_event( strtotime('16:20:00'), 'daily', 'import_into_db' );
31 авг. 2015 г. 12:31:30
0
31

WP Cron запускается, когда кто-то посещает ваш сайт. Таким образом, если никто не заходит, крон никогда не выполнится.

Есть 2 решения:

  1. Отключить WP Cron и использовать настоящий cron job с его настройкой.

https://support.hostgator.com/articles/specialized-help/technical/wordpress/how-to-replace-wordpress-cron-with-a-real-cron-job

  1. Использовать пользовательский интервал в wp_schedule_event():

    function myprefix_custom_cron_schedule( $schedules ) {  
        $schedules['every_six_hours'] = array(  
            'interval' => 21600, // Каждые 6 часов  
            'display'  => __( 'Каждые 6 часов' ),  
        );  
        return $schedules;  
    }  
    add_filter( 'cron_schedules', 'myprefix_custom_cron_schedule' );  
    
    // Запланировать действие, если оно еще не запланировано  
    if ( ! wp_next_scheduled( 'myprefix_cron_hook' ) ) {  
        wp_schedule_event( time(), 'every_six_hours', 'myprefix_cron_hook' );  
    }  
    
    // Подключиться к действию, которое будет выполняться каждые 6 часов  
    add_action( 'myprefix_cron_hook', 'myprefix_cron_function' );  
    
    // Создать функцию, которая выполняется по cron  
    function myprefix_cron_function() {  
        // Ваш код...  
    }  
    

Также можно посмотреть эти руководства:

http://www.nextscripts.com/tutorials/wp-cron-scheduling-tasks-in-wordpress/

http://www.iceablethemes.com/optimize-wordpress-replace-wp_cron-real-cron-job/

http://www.smashingmagazine.com/2013/10/16/schedule-events-using-wordpress-cron/

Пользовательский WP cron:

http://codex.wordpress.org/Plugin_API/Filter_Reference/cron_schedules

http://www.smashingmagazine.com/2013/10/16/schedule-events-using-wordpress-cron/

http://www.viper007bond.com/2011/12/14/how-to-create-custom-wordpress-cron-intervals/

http://www.sitepoint.com/mastering-wordpress-cron/

https://tommcfarlin.com/wordpress-cron-jobs/

http://www.paulund.co.uk/create-cron-jobs-in-wordpress

Cron в Linux:

http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

http://www.thesitewizard.com/general/set-cron-job.shtml

http://code.tutsplus.com/tutorials/scheduling-tasks-with-cron-jobs--net-8800

поиск в Google

28 февр. 2015 г. 22:24:07
1

1427488800 соответствует 27 марта 2015 года, так что ваше событие даже ещё не должно начаться.

Также учтите, что запланированные события WordPress сработают только если кто-то посетит сайт в указанное время.

28 февр. 2015 г. 00:20:40
Комментарии

Теперь, как это исправить? @vancoder

Mortzea Mortzea
28 февр. 2015 г. 11:10:27
0

Этот код работает для меня, я считаю, что он ближе к исходному вопросу. Вам нужно получить UNIX-время с учетом временной зоны для момента, когда вы хотите выполнить задачу. Как только cron выполнится и будет удален из WordPress, он создаст себя заново в указанное вами время.

В следующем примере у меня настроено выполнение для AEST (GMT+10) в 6 утра каждый день. Поэтому я планирую его на GMT 20:00 каждый день.

if (!wp_next_scheduled('cron_name')) {
    $time = strtotime('today'); //возвращает полночь текущего дня
    $time = $time + 72000; //добавляем смещение для времени суток, учитывая, что это в GMT.
    wp_schedule_event($time, 'daily', 'cron_name');
}
5 апр. 2018 г. 10:00:15