Это какой-то глупый вопрос…
Я запланировал выполнение действия каждый час:
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 может работать в фоновом режиме? потому что, по-видимому, это то, что происходит, если я не вижу выхода…
-
похоже, это не работает в контексте объекта; Зачем?
Хорошо, я узнал, что wp-cron.php выполняется с расширением
wp_remote_post()
. это все объясняет…Под «контекстом объекта» вы подразумеваете, что ваш обратный вызов похож на
array( &$this, 'my_method_name' )
? Это действительно не сработает, потому что имя функции хранится в базе данных для последующего выполнения.&$this
относится к конкретному объекту, а не к имени класса, и этот объект не будет существовать при следующем запросе при выполнении задания cron. Статическая функция класса должна работать.да, мне пришлось сделать свою функцию статической. Я не думал, что wp будет удаленно запускать локальный скрипт как «cron».
Регистрирует ли HTTP Access Logger все запросы или только те, которые сделаны с помощью HTTP API WP? Это отлично подходит для поиска запросов, которые делают плагины, и почему ваша страница загружается медленно 🙂
@One Trick Pony не уверен, но было бы разумно предположить, что это только API
Мой любимый плагин для этого — Core Control, у которого есть очень хороший модуль для отображения того, что происходит в cron — какие события настроены, когда они будут запускаться в следующий раз и т. д.
На уровне грязных рук см.
_get_cron_array()
, который возвращает внутренние сохраненные данные для событий cron (верхний уровень ключей — это временные метки).wp-cli — это еще один способ:
Список событий
Запланировать событие
Затем вы можете посетить внешний интерфейс сайта и обновить пару раз, чтобы убедиться, что он активирован. Затем запустите
list
снова, чтобы увидеть, что это больше не запланировано.Запустить прямо в терминале
Одна особенность, о которой следует помнить, заключается в том, что wp-cli работает в контексте wp-admin, а WP Cron работает во внешнем интерфейсе. Обычно это не проблема, но когда вы пишете задания, убедитесь, что вы загрузили
require()
всеwp-admin/includes
файлы, которые ваш код ожидает загрузить.Если вы этого не сделаете, то задание будет нормально работать в wp-cli, но при нормальном запуске выдаст фатальную ошибку.
Другие команды
Бегите
wp help cron
за подробностями.