Intereting Posts
Создание страницы лечения, что я использую? Включить администраторов в раскрывающийся список автора на экране редактирования сообщений Есть ли каталог, в который мой плагин может записывать файлы, которые нельзя просмотреть через браузер / url? пользовательские элементы wp_dropdown_categories в wordpress Как я могу использовать order_by для заказа двумя мета-ключами без исключения сообщений, которые не имеют эти ключи инициализированы? Как скрыть заголовок на «основных моментах» – функция Themify Woocommerce получает родительскую категорию высшего уровня и делает все подкатегории одинаковыми шаблонами и меню Как получить последние 5 сообщений в My Title Bar? Если тег x показывает y + имя тега (ов) Отображение произвольного HTML или содержимого на боковой панели Плагин для приложения / входной формы Показать предварительный просмотр изменений сообщений на странице Пользовательское поле, добавленное в форме комментария, не отображается в редакторе Хотите, чтобы файлы rss2 подавали сообщения от и до настоящего времени, также хотите добавить дополнительные сообщения с конкретными идентификаторами Использование фильтра дает ошибку «резервное копирование этого сообщения в вашем браузере отличается от версии ниже»

Задача 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' ); }