Intereting Posts
И / Или запрос категории Создайте пользовательский wp_query из определенного пользовательского типа сообщения с конкретной таксономией Как поместить метафайл в поле после редактирования после заголовка? Как реализовать временный фильтр, чтобы показывать случайную запись 1 месяц для одной категории и 3 месяца для других категорий Правильный способ хранения большого количества настраиваемых почтовых полей Объединение нескольких категорий в один URL-адрес Slug Автор сообщения изменен на admin после того, как его сообщение изменено администратором Как выполнить плагин только на одной странице? Измените пользователя с роли, которая позволяет создавать сообщения Обрезать изображение с полной шириной Как я могу просматривать свои сообщения в порядке возрастания по количеству просмотров Как отобразить статистику BBPS? WP_QUERY Получать сообщения по категориям и похожим названиям (Like) Отключение несвязанных изображений Сортировать по: 2 colums

Работа wp cron срабатывает каждую секунду или около того, если обратный вызов завернут DOING_CRON, он никогда не срабатывает вообще

Я немного потерял, имея дело с плагином с открытым исходным кодом, реализующим wp cron.

Вы можете прочитать о проблеме на github https://github.com/nekojira/wp-currencies/issues/6#issuecomment-116735909 – я также опишу ее здесь. К сожалению, есть немного кода, чтобы вставить его в Stack.

У меня есть метод в одном классе, который делает удаленный запрос и обновляет некоторые строки при вызове: https://github.com/nekojira/wp-currencies/blob/master/includes/rates.php#L64

Вкратце:

// Rates class public function update() { // do wp_remote_get(), do stuff in db, return response results } 

Этот метод вызывается только методом «update_currencies» в классе моего плагина, который имеет дело с Cron: https://github.com/nekojira/wp-currencies/blob/master/includes/cron.php#L41

Вкратце:

 // Cron class public function update_currencies() { if ( defined( 'DOING_CRON' ) ) { do_action( 'wp_currencies_before_update', time() ); $rates = new Rates(); $rates->update(); } } 

Как вы можете видеть, это завернуто с проверкой DOING_CRON … Но, похоже, это не срабатывает, никогда. Если я удалю DOING_CRON, он будет срабатывать каждую секунду или около того.

Этот последний метод update_currencies используется только как обратный вызов действия wp cron: https://github.com/nekojira/wp-currencies/blob/master/includes/cron.php#L29

Вкратце:

 // Cron class public function __construct() { add_filter( 'cron_schedules', array( $this, 'cron_schedules' ), 10, 1 ) ; add_action( 'wp_currencies_update', array( $this, 'update_currencies' ) ); } 

Действие представляет собой запланированное событие wp cron, которое изменяется только в двух случаях: 1) при установке и активации плагинов: https://github.com/nekojira/wp-currencies/blob/master/includes/cron.php#L56 2 ) Когда сохраняются параметры для моего конкретного плагина: https://github.com/nekojira/wp-currencies/blob/master/includes/settings.php#L211 https://github.com/nekojira/wp-currencies/blob /master/includes/settings.php#L40

Короче говоря, это действие, установленное плагином на init:

  add_action( 'update_option_wp_currencies_settings', array( $this, 'updated_option' ), 10, 2 ); 

и это обратный вызов, который запускается при обновлении опции 'update_option_wp_currencies_settings' :

 public function updated_option( $old_value, $new_value ) { // Is there an update? if ( $old_value != $new_value ) { wp_clear_scheduled_hook( 'wp_currencies_update' ); // Makes sure there's an API key (won't be able to tell if valid, but at least is not empty). $api_key = isset( $new_value['api_key'] ) ? $new_value['api_key'] : ( isset( $old_value['api_key'] ) ? $old_value['api_key'] : '' ); if ( ! empty( $api_key ) ) { wp_schedule_event( time(), esc_attr( $new_value['update_interval'] ), 'wp_currencies_update' ); do_action( 'wp_currencies_rescheduled_update', time(), esc_attr( $new_value['update_interval'] ) ); } } } 

Интервалы обновления устанавливаются пользователем с помощью опции – но я дважды проверял их, а самый частый интервал – 3600 секунд.

Я прочитал документацию WordPress и посмотрел в самом ядре, и я немного потерялся, так как не могу найти, что вызывает проблему … Это бесплатный плагин, который я сделал, и хотел бы найти решение.

Solutions Collecting From Web of "Работа wp cron срабатывает каждую секунду или около того, если обратный вызов завернут DOING_CRON, он никогда не срабатывает вообще"