Как работать с WP-CRON в WordPress
Сегодня я собираюсь рассказать о том, о чем пишут только в английском интернете, на русском языке информации особо нет. Я хочу рассказать о таком отличном изобретении в CMS как псевдо крон. Сразу отвечу, что этот крон отлично подойдет для плагинов, так как не требует никаких дополнительных настроек на сервере, а то значит что вы можете разрабатывать свои плагины и те, кто купят ваш плагин не будут делать никаких лишних телодвижений.
Немного о демоне CRON
Для чего используют CRON — демон cron используют чаще всего для повторной обработки некоторых команд на сайте, я использовал для проверки внешнего API, из которого мой плагин вытаскивал данные. Данные мне необходимо было проверят раз в час, а если найдены новые данные, то добавлять их к себе на сайт.
Простой пример работы CRON на WordPress
Итак, вот небольшой код, который делает проверку времени и если время вышло, то срабатывает специальный Хук.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
add_filter( 'cron_schedules', 'myprefix_add_weekly_cron_schedule' ); function myprefix_add_weekly_cron_schedule( $schedules ) { $schedules['weekly'] = array( 'interval' => 120, // каждые 2 сикунды 'display' => __( 'Once Weekly' ), ); return $schedules; } if ( ! wp_next_scheduled( 'myprefix_my_cron_action' ) ) { wp_schedule_event( time(), 'weekly', 'myprefix_my_cron_action' ); } add_action( 'myprefix_my_cron_action', 'myprefix_function_to_run' ); function myprefix_function_to_run() { mail('ваш-email@wp-admin.com.ua', 'My Subject', 'test send mail'); } |
Этот код может срабатывать как в файле functions.php вашей темы, так и в созданном вами плагине.
То что находиться в функции myprefix_function_to_run() будет повторяться каждые 2 минуты, или точнее каждые 120 секунд, в нашем случаи это отправка тестового письма. Для проверки не забудьте сменить текст ваш-email@wp-admin.com.ua на тот, на котором вы будете получать письма каждые 2 минуты.
Для тех, кто ленивый есть вариант попроще и похуже, похуже потому, что при разработке премиум тем или плагинов вам придется дополнительно делать автоматическую установку при помощи плагина TGM Plugin Activation.
Мы немного отступили от темы разговора, для того чтобы не прописывать код для срабатывания автоматического выполнения ваших функций (код wp-cron, который мы разобрали выше). Чтобы не разбираться в коде который я показал выше, могу посоветовать плагин WP Crontrol (WP-Cron Events), для работы которого вам будет необходимо только добавить функцию и хук в коде плагина или файле functions.php.
1 2 3 4 5 |
add_action( 'myprefix_my_cron_action', 'myprefix_function_to_run' ); function myprefix_function_to_run() { // тут код который надо запускать время от времени mail('maxix@ukr.net', 'My Subject', 'test2'); } |
После добавления хука и установки плагина, активируем его, далее переходим в панели администратора в пункт Инструменты -> Control.
После перехода вы увидите окно со всеми работающими процессами и даже темы, которые вы не создавали, теми которые уже запущены другими плагинами. Ниже вы сможете добавить новый процесс.
Для добавления нашего процесса (хука myprefix_my_cron_action), нам нужно будет заполнить поля, как показано на картинке ниже.
Рассмотрим порядок действий
- Hook name — указываем название экшена, который был создан ранее myprefix_my_cron_action.
- Next run — указываем, когда нужно запустить выполнение cron.
- Event schedule — указываем, как часто нужно запускать событие cron.
- После заполнения формы добавляем событие.
После добавления, ваше событие появится в списке всех событий.
Вот собственно и все, я бы советовал вам меньше пользоваться плагинами и больше использовать первый способ, так как он правильнее и при разработке плагина вам не придется учить пользователей тому, что нужно еще один плагин установить и без него невозможна работа того плагина, который вы продаете.
Удачи в разработке плагинов и в использовании CRON, а я буду стараться и дальше радовать вас новыми уроками.

/*

- Базовый курс по веб-дизайну;
- Верстка сайтов;
- Общий курс по CMS WordPress и продолжение курса по разработке шаблонов;
- Разработка сайтов на PHP.