Как тестировать wp_cron?
Это вроде бы глупый вопрос...
Я запланировал действие для выполнения каждый час:
if(!wp_next_scheduled('my_hourly_events'))
wp_schedule_event(time(), 'hourly', 'my_hourly_events');
add_action('my_hourly_events', 'the_function_to_run');
function the_function_to_run(){
echo 'it works!';
}
Как я могу протестировать, что это работает, не ожидая час? :)
Я пробовал добавить wp_clear_scheduled_hook('my_hourly_events');
перед этим кодом и добавить wp_cron()
после, но я не вижу, чтобы моя функция выполнялась...
редактирование:
ок, я добавил trigger_error()
внутрь моей функции, проверил лог ошибок apache, и там это есть :)
Теперь я еще больше в замешательстве:
Как может wp-cron работать в фоновом режиме? потому что очевидно это происходит, если я не вижу вывода...
это, похоже, не работает в контексте объекта; почему?
Мой любимый плагин для этого — Core Control, который имеет отличный модуль для отображения информации о кроне: какие события настроены, когда они будут выполнены в следующий раз и т.д.
Если хотите разобраться на более глубоком уровне, посмотрите функцию _get_cron_array()
, которая возвращает внутренние данные о событиях крона (верхний уровень ключей содержит временные метки).

логирует ли HTTP Access Logger все запросы или только те, которые сделаны через HTTP API WordPress? Это отлично подходит для поиска запросов, которые делают плагины, и понимания, почему ваша страница грузится медленно :)

wp-cli — это еще один способ:
Список событий
> wp cron event list
+-------------------+---------------------+-----------------------+---------------+
| hook | next_run_gmt | next_run_relative | recurrence |
+-------------------+---------------------+-----------------------+---------------+
| wp_update_plugins | 2020-04-14 08:11:38 | 7 часов 24 минуты | 12 часов |
| wp_update_themes | 2020-04-14 08:11:38 | 7 часов 24 минуты | 12 часов |
| wcsc_prime_sites | 2020-04-14 17:00:55 | 16 часов 13 минут | 1 день |
+-------------------+---------------------+-----------------------+---------------+
Запланировать событие
> wp cron event schedule wp_update_plugins "now +5 seconds"
Успех: Событие с хуком 'wp_update_plugins' запланировано на 2020-04-14 00:43:54 GMT.
Затем вы можете перейти на фронтенд сайта и обновить страницу несколько раз, чтобы убедиться, что событие сработало. После этого снова выполните команду list
, чтобы проверить, что событие больше не запланировано.
Запуск напрямую в терминале
> wp cron event run wcsc_prime_sites
Событие крона 'wcsc_prime_sites' выполнено за 0.805s.
Успех: Выполнено всего 1 событие крона.
Важно учитывать, что wp-cli работает в контексте wp-admin, а WP Cron запускается на фронтенде. Обычно это не проблема, но при написании задач убедитесь, что вы подключаете (require()
) любые файлы из wp-admin/includes
, которые ожидает ваш код.
Если этого не сделать, задача будет работать корректно в wp-cli, но при обычном запуске вызовет фатальную ошибку.
Другие команды
Выполните wp help cron
для получения дополнительной информации.
