Планирование задачи с использованием методов класса
Мне нужно реализовать запланированную задачу в моем плагине, и я попытался следовать примерам в документации, передав один из методов класса в качестве целевого. Я установил плагин Cron Manager, и я вижу, что мой хук был запланирован, но первое расписание появилось несколько секунд назад. Я думаю, это потому, что WP устанавливает самое первое расписание на "сейчас", которое, предположительно, должно сразу же вызвать крючок.
Проблема в том, что метод, который я прикрепил к крючку, является не вызывается, и диспетчер Cron отображает " осталось секунд: -X" (где X - количество секунд, прошедших с момента, когда я запланировал задачу).
Я пропущу материал wp_schedule
, так как знаю, что он работает (крючок находится в списке запланированных, хотя и с отметкой времени в прошлом), поэтому вот соответствующий код:
// Cron hook is called myclass_cron
class MyClass {
public function __construct() {
add_action('init', array($this, 'wordpress_loaded'));
}
public function wordpress_loaded() {
add_action('myclass_cron', array($this, 'cron_tasks'));
}
public function cron_tasks() {
// Cron stuff. I tried adding a "sleep()" command to see if page load was slower, but it clearly doesn't go through this method
}
}
Если я добавлю do_action('myclass_cron')
, cron_tasks()
работает, как и ожидалось. Мне было интересно, не слишком ли поздно я вызывал add_action()
(т.Е. Когда WP загружен), но я попытался переместить его в конструктор класса, и проблема сохранялась.
Заранее благодарю за ответы.
1 answers
Я действительно обнаружил, что Cron работает, просто не так, как я ожидал. Я обновил страницы и пару раз вызвал wp-cron.php
(используя wget
), и я продолжал видеть свое расписание задач cron с "-X секунд ". Затем я остановился на минуту или две и обновил внешнюю страницу сайта, и моя задача Cron была вызвана.
Когда пришло время для второго запланированного выполнения, через час, я повторил тест. Задание должно было быть выполнено через пару секунд, поэтому я подождал около 10 секунд и загрузил случайную страницу: ничего не произошло. Я подождал еще полминуты или около того, снова загрузил случайную страницу, и задача была вызвана.
Похоже, что в WordPress есть "расслабленный" способ вызова заданий Cron, который я еще не до конца понимаю. Во всяком случае, мой подход был правильным, мои ожидания - нет. :)