Wordpress cron wp_schedule_single_event - действие не всегда работает - PullRequest
7 голосов
/ 24 февраля 2020

Я регистрирую событие как:

wp_schedule_single_event( time(), 'do_custom_hook', array( $body ) );

Кроме того, я добавил следующее действие:

add_action('do_custom_hook', 'process_custom_hook', 10);

function process_custom_hook($body){
    // custom code here
}

Однако иногда срабатывает функция process_custom_hook, а в другое время просто не работает (хотя чаще всего срабатывает. Пропускается около 10% -20% времени)

Событие всегда возвращает true, что означает, что оно должно быть зарегистрировано.

Кроме того, во время тестирования я убедился, что аргументы (тело) всегда разные.

Любая причина, по которой это может произойти?

Ответы [ 3 ]

0 голосов
/ 05 марта 2020

Согласно официальной документации для этого экземпляра,

Планирование события, которое должно произойти в течение 10 минут после существующего события с тем же хуком действия, будет игнорироваться, если вы не передадите уникальные значения $ args для каждого запланированного события. что вы заявили, что сделали, но, возможно, двойная проверка поможет.

Это зависит от того, когда пользователь заходит на сайт, поэтому действие сработает, когда кто-то заходит на ваш сайт WordPress, если прошло запланированное время.

В документации также сказано, что вы можете использовать wp_next_scheduled() для предотвращайте повторяющиеся события и используйте wp_schedule_event() для планирования повторяющегося события.

Расписание может возвращать значение true в определенных случаях, когда оно выполняется, но игнорируется. поэтому он работал, но его игнорировали.

Я бы предложил подробный журнал всего, что отправлено и получено, чтобы вы сами могли убедиться, что происходящее совпадает с тем, в чем вы уверены.

вот несколько ссылок с похожими проблемами и документацией, на которые вы можете посмотреть.

Надеюсь, это поможет. если нет, давайте разберемся вместе.

0 голосов
/ 05 марта 2020

С кодекс :

Обратите внимание, что планирование события, которое произойдет до 10 минут после существующего события с тем же именем, будет игнорироваться, если вы не передадите уникальные значения для $ args для каждого запланированного события.

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

Если вам не требуется, чтобы ваша работа выполнялась немедленно, тогда вы можете посмотреть на использование wp_next_scheduled(), чтобы определить, когда задание будет запущено в следующий раз, и настроить задание на запуск после следующего запланированного задания.

Стоит также отметить, что если эта задача имеет вид, который, по-видимому, имеет непротиворечивая логика c за ней (как, кажется, имеет место) - почему бы не сохранить информацию о задании в базе данных и запускать задание cron каждые 5–10 минут, чтобы получать новые задания из базы данных и обрабатывать их как таковые ? Это позволит избежать необходимости иметь дело с поведением wp_schedule_single_event().

0 голосов
/ 01 марта 2020

Вы используете cron из Wordpress, но некоторые плагины отключают или мешают работе CRON. В этом случае я рекомендую либо создать это расписание с помощью Server Cron, либо установить плагин для подтверждения вашего расписания.

У меня была такая же проблема, что ее было даже немного трудно найти ... А так как вы увидим, что у него нет текущего обновления, но для меня это работает. https://wordpress.org/plugins/wp-crontrol & https://br.wordpress.org/plugins/advanced-cron-manager/

вы можете определить, какой Cron вы хотите редактировать, и, следовательно, иметь большую точность в своем издании. Есть другие плагины, которые могут и должны быть связаны с этим. Вы упомянули о расписании cron. Вот почему я указал это. Итак, вы можете узнать конфигурацию Chrome в календаре. WP Cron вы можете редактировать расписание Cron

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...