В WordPress встроена система планирования задач WP-Cron, которая позволяет выполнять определённые действия по расписанию. Однако, стандартные интервалы — час, день, неделя — не охватывают все возможные сценарии. В этой статье разберём, как добавить и использовать собственный интервал, например, ежемесячный, а также как создавать задачи, которые будут выполняться раз в месяц.
Что такое WP-Cron и почему его нужно настраивать
WP-Cron — это имитация системного планировщика задач, реализованная внутри WordPress. По умолчанию, события WP-Cron запускаются при посещении сайта, что не всегда гарантирует точное время выполнения. Кроме того, стандартные интервалы ограничены, и для решения многих задач нужен кастомный интервал.
Например, если вам нужно отправлять ежемесячные отчёты, очищать временные данные или обновлять информацию, ежемесячная задача — оптимальное решение.
Для расширения функционала WP-Cron можно регистрировать собственные интервалы и задачи, чтобы обеспечить выполнение нужных действий.
Добавление ежемесячного интервала в расписание WP-Cron
По умолчанию WordPress не имеет интервала для ежемесячных задач, поэтому его нужно добавить самостоятельно. Для этого используется фильтр cron_schedules. Добавим функцию, которая определит интервал в 30 дней.
function wpboard_cron_add_monthly_interval($schedules) {
if (!isset($schedules['monthly'])) {
$schedules['monthly'] = array(
'interval' => 30 * 24 * 60 * 60, // 30 дней в секундах
'display' => __('Ежемесячно')
);
}
return $schedules;
}
add_filter('cron_schedules', 'wpboard_cron_add_monthly_interval');Эта функция добавляет новый интервал с ключом monthly и описанием «Ежемесячно». Теперь можно использовать его для планирования задач.
Регистрация и запуск ежемесячной задачи
После добавления интервала нужно зарегистрировать задачу, которая будет выполняться с этим интервалом. Для примера создадим функцию, которая будет запускаться раз в месяц и, например, отправлять письмо администратору с отчётом.
function wpboard_monthly_report() {
$admin_email = get_option('admin_email');
$subject = 'Ежемесячный отчет сайта';
$message = 'Это автоматическое письмо с ежемесячным отчетом вашего сайта.';
wp_mail($admin_email, $subject, $message);
}
// Регистрация события
function wpboard_schedule_monthly_event() {
if (!wp_next_scheduled('wpboard_monthly_event_hook')) {
wp_schedule_event(time(), 'monthly', 'wpboard_monthly_event_hook');
}
}
add_action('wp', 'wpboard_schedule_monthly_event');
// Привязка функции к событию
add_action('wpboard_monthly_event_hook', 'wpboard_monthly_report');Разберём код подробно:
wpboard_monthly_report— функция, которая выполняет задачу. В примере — отправка письма.wpboard_schedule_monthly_event— проверяет, не запланировано ли уже событие, и если нет — планирует его с интерваломmonthly.- Хук
wpboard_monthly_event_hookсвязывает событие с функцией.
Для активации задачи достаточно добавить этот код в файл functions.php вашей темы или в отдельный плагин.
Тестирование и отладка ежемесячных задач в WP-Cron
WP-Cron запускается при посещении сайта, поэтому для тестирования можно вручную вызвать событие. Для этого используйте функцию:
wpboard_run_monthly_event_now() {
do_action('wpboard_monthly_event_hook');
}И вызовите её один раз, например, через админ-панель или временно добавьте вызов в functions.php:
add_action('init', 'wpboard_run_monthly_event_now');После успешного теста удалите этот вызов, чтобы не запускать задачу каждый раз при загрузке страницы.
Для более удобного управления WP-Cron можно использовать плагин WP Crontrol. Он позволяет просматривать, запускать и удалять запланированные события прямо из админки.
Практические советы по работе с WP-Cron и ежемесячными задачами
1. Используйте системный Cron для стабильности
WP-Cron зависит от посещений сайта, что не всегда удобно для регулярных задач. Если нужна высокая точность, лучше настроить системный Cron на сервере, который будет вызывать скрипт wp-cron.php по расписанию.
Пример команды для Linux:
wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1Или с помощью curl:
curl -s https://ваш-сайт.ru/wp-cron.php?doing_wp_cron > /dev/null 2>&12. Избегайте тяжелых операций в WP-Cron
Если ваша ежемесячная задача выполняет сложные вычисления или работает с большим объёмом данных, лучше разбить её на несколько частей или запускать в фоне с помощью WP Background Processing.
3. Логирование и уведомления
Добавляйте логирование выполнения задач, чтобы отслеживать ошибки. Для этого можно использовать плагины типа Clearfy Pro с функцией логирования или реализовать собственный механизм через запись в файл.
Заключение
Настройка ежемесячных задач в WordPress с помощью WP-Cron — мощный инструмент для автоматизации рутинных действий. Добавление собственного интервала и правильная регистрация событий позволит гибко управлять расписанием и выполнять задачи точно в срок. Не забывайте о тестировании и мониторинге выполнения задач, а при необходимости используйте системный Cron для стабильной работы.