Intereting Posts
Как динамически загружать контент в тело модального окна Bootstrap? При утере на настройке плагинов для корректировки страницы Создание структуры папок Как настроить поддомен для изображений на Debian Apache VPS? Получите первое видео с сообщения (как встраиваемые, так и короткие видеокоды) Использование полосы пропускания в WordPress 3.5 Как показать 'login error' и 'lost password' на моей странице шаблона? Добавьте выбранный вариант коротких кодов, таких как выпадающее меню в тиниме Breadcrumbs – исключить категории детей WordPress pods io – Rest API для получения информации о полях для пользовательских типов сообщений Идентификаторы запросов и хранилища запросов в массиве Как сделать глобальную работу почты с пользовательским типом сообщения? Как связать многоязычные продукты с WP All Import (+ Polylang)? Пользовательский запрос для поиска по категориям Могу ли я использовать параметры тем, чтобы сразу изменить две вещи?

Задача Cron запускаться один раз в день с использованием внешней службы cron

У меня есть конкретная задача, которая должна выполняться один раз (и только один раз) в день. Из-за неопределенности работы wp-cron каждый день я использую setcronjob.com для активации скрипта.

Вызов URL setcronjob.com:

http://mydomain.co.uk/wp-cron.php?doing_wp_cron

И Daily Exec в настройках setcronjob.com устанавливается в 1.

В wp-config.php я добавил строку:

define('DISABLE_WP_CRON', true); 

Сам скрипт является плагином, код (минус плагины) находится ниже:

 <?php add_action('init','kl_create_single_schedule'); add_action('kl_single_cron_job','kl_single_cron_function'); function kl_single_cron_function(){ $todayis = date("Ymd"); $thenwas = date('Ymd H:i:s', strtotime($todayis . '-360 day')); global $wpdb; $renewals = $wpdb->get_results("SELECT * FROM {$wpdb->users} WHERE date({$wpdb->users}.user_registered) = '" . $thenwas ."'"); foreach ( $renewals as $renewal ) { $thename = $renewal->display_name; $theemail = $renewal->user_email; $to = $theemail; $subject = 'Important information about your Subscription'; $message = 'Hi ' . $thename . ",\n\r\n\rIn five days your subscription will renew and another year's subscription (£45) will be taken from your PayPal account.\r\n\r\nIf you want to stay with us you don't need to do anything, it will happen automatically. If you want to cancel your subscription you can do this via your PayPal account, or if you prefer simply reply to this email or send a new email to us at info@mydomain.co.uk requesting for your subscription to be cancelled. \r\n\r\nRegards,\r\n\r\Kev from Domain Name."; $headers = 'From: info@mydomain.co.uk' . "\r\n" . 'Reply-To: info@mydomain.co.uk' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers); } } function kl_create_single_schedule(){ //check if event scheduled before if(!wp_next_scheduled('kl_single_cron_job')) //schedule event to run after 1 day wp_schedule_single_event (time()+0001, 'kl_single_cron_job'); } ?> 

Однако, происходит то, что плагин работает несколько раз в день.

Правильно ли я считаю, что линия:

 wp_schedule_single_event (time()+0001, 'kl_single_cron_job'); 

Должно быть:

 wp_schedule_single_event (strtotime('+1 day'), 'kl_single_cron_job'); 

Solutions Collecting From Web of "Задача Cron запускаться один раз в день с использованием внешней службы cron"

wp_schedule_single_event $timestamp wp_schedule_single_event – это время, когда вы хотите, чтобы событие произошло. Это должно быть в формате временной метки UNIX. WP cron использует время UTC / GMT, а не местное время. Используйте time() , которое всегда является GMT в WordPress.

time() количество секунд с момента Unix Epoch

Если вы хотите добавить день, вам нужно добавить секунды:

 time() + (24 * 60 * 60) 

Поэтому вы хотели бы использовать:

 if ( ! wp_next_scheduled( 'kl_single_cron_job' ) ) { wp_schedule_single_event( time() + 86400, 'kl_single_cron_job' ); } 

или 'daily' с помощью wp_schedule_event :

 if ( ! wp_next_scheduled( 'kl_single_cron_job' ) ) { wp_schedule_event( time(), 'daily', 'kl_single_cron_job' ); }