Планирование задачи с использованием методов класса


Мне нужно реализовать запланированную задачу в моем плагине, и я попытался следовать примерам в документации, передав один из методов класса в качестве целевого. Я установил плагин 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 загружен), но я попытался переместить его в конструктор класса, и проблема сохранялась.

Заранее благодарю за ответы.

Author: Diego, 2013-05-14

1 answers

Я действительно обнаружил, что Cron работает, просто не так, как я ожидал. Я обновил страницы и пару раз вызвал wp-cron.php (используя wget), и я продолжал видеть свое расписание задач cron с "-X секунд ". Затем я остановился на минуту или две и обновил внешнюю страницу сайта, и моя задача Cron была вызвана.

Когда пришло время для второго запланированного выполнения, через час, я повторил тест. Задание должно было быть выполнено через пару секунд, поэтому я подождал около 10 секунд и загрузил случайную страницу: ничего не произошло. Я подождал еще полминуты или около того, снова загрузил случайную страницу, и задача была вызвана.

Похоже, что в WordPress есть "расслабленный" способ вызова заданий Cron, который я еще не до конца понимаю. Во всяком случае, мой подход был правильным, мои ожидания - нет. :)

 0
Author: Diego, 2013-05-15 02:14:25