Автоматизация повторяющихся задач — обязательный элемент эффективного управления сайтом на WordPress. WP-Cron — встроенная система планирования событий, которая позволяет запускать функции по расписанию без необходимости использовать системные cron на сервере. В этой статье подробно разберем, как использовать WP-Cron для автоматизации задач, рассмотрим типичные сценарии и приведем практические примеры с кодом.
Что такое WP-Cron и зачем он нужен в WordPress
WP-Cron — это имитация системного cron, работающая внутри WordPress. В отличие от классического cron, который запускается на уровне операционной системы, WP-Cron срабатывает при посещении сайта. Это значит, что если никто не посещает сайт, запланированные задачи могут задерживаться.
Основные преимущества WP-Cron:
- Не требует доступа к серверным настройкам.
- Легко создавать и управлять событиями через код.
- Подходит для большинства задач автоматизации на WordPress.
Но есть и недостаток — при низкой посещаемости сайта задачи могут срабатывать с задержкой. Для решения этой проблемы можно настроить системный cron, который будет вызывать wp-cron.php регулярно, но это тема для отдельного материала.
Типичные задачи для автоматизации с помощью WP-Cron
WP-Cron отлично подходит для следующих сценариев:
- Отправка регулярных email-рассылок.
- Автоматическое обновление контента или данных.
- Очистка базы данных от устаревших записей.
- Создание резервных копий.
- Публикация отложенных записей.
Рассмотрим на практике, как создавать и управлять такими задачами.
Как добавить собственное запланированное событие в WP-Cron
Для начала нужно зарегистрировать новое событие и функцию, которая будет выполняться при его запуске.
Пример кода для регистрации ежечасного события, которое выполняет функцию wpone_hourly_task:
function wpone_register_cron_event() {
if ( ! wp_next_scheduled( 'wpone_hourly_event' ) ) {
wp_schedule_event( time(), 'hourly', 'wpone_hourly_event' );
}
}
add_action( 'wp', 'wpone_register_cron_event' );
function wpone_hourly_task() {
// Ваш код, который должен выполняться каждый час
error_log('WPOne: Ежечасная задача выполнена');
}
add_action( 'wpone_hourly_event', 'wpone_hourly_task' );Ключевые моменты:
wp_schedule_event— регистрирует новое событие, если оно еще не запланировано.wp_next_scheduled— проверяет, есть ли уже запланированное событие.add_action— связывает событие и функцию, которая будет выполняться.
Этот код нужно добавить в файл functions.php вашей темы или в плагин.
Добавление пользовательских интервалов для WP-Cron
По умолчанию в WordPress есть несколько интервалов: hourly (час), twicedaily (два раза в день), daily (раз в день). Если нужна другая периодичность, например, каждые 10 минут, нужно добавить свой интервал.
Пример добавления интервала в 10 минут:
function wpone_custom_cron_schedules( $schedules ) {
$schedules['every_ten_minutes'] = array(
'interval' => 600, // 600 секунд = 10 минут
'display' => __( 'Каждые 10 минут' ),
);
return $schedules;
}
add_filter( 'cron_schedules', 'wpone_custom_cron_schedules' );После этого можно использовать 'every_ten_minutes' при планировании событий:
wp_schedule_event( time(), 'every_ten_minutes', 'wpone_ten_minute_event' );Пример: Автоматическая очистка таблиц постов с меткой "черновик" старше 30 дней
Задача: автоматически удалять записи со статусом "черновик", которые не обновлялись более месяца.
function wpone_cleanup_old_drafts() {
global $wpdb;
$threshold = date('Y-m-d H:i:s', strtotime('-30 days'));
$deleted = $wpdb->query(
$wpdb->prepare(
"DELETE FROM $wpdb->posts WHERE post_status = %s AND post_modified < %s",
'draft',
$threshold
)
);
error_log('WPOne: Удалено старых черновиков: ' . $deleted);
}
// Планируем запуск один раз в сутки
function wpone_setup_cleanup_cron() {
if ( ! wp_next_scheduled( 'wpone_cleanup_drafts_event' ) ) {
wp_schedule_event( time(), 'daily', 'wpone_cleanup_drafts_event' );
}
}
add_action( 'wp', 'wpone_setup_cleanup_cron' );
add_action( 'wpone_cleanup_drafts_event', 'wpone_cleanup_old_drafts' );Этот код позволяет поддерживать базу данных в чистоте без ручного вмешательства.
Полезные плагины для управления WP-Cron
Если хочется удобного интерфейса для работы с WP-Cron, рекомендую несколько плагинов:
- WP Crontrol — позволяет просматривать, добавлять, удалять и запускать запланированные события прямо из админки.
- Crony Cronjob Manager — простой менеджер для создания и контроля cron-задач.
- Advanced Cron Manager — расширенный интерфейс с возможностью экспорта и импорта задач.
Эти инструменты полезны для отладки и мониторинга работы автоматизации.
Советы по работе с WP-Cron на реальных проектах
1. Учитывайте нагрузку на сервер. Частые cron-задачи могут замедлять сайт, особенно если они тяжелые — старайтесь оптимизировать функции.
2. Используйте системный cron при больших нагрузках. Если сайт посещают редко, WP-Cron может не срабатывать вовремя. В этом случае настройте системный cron, который будет вызывать wp-cron.php.
3. Обрабатывайте ошибки внутри задач. Используйте логирование и обработку исключений, чтобы понимать, почему задачи могут не выполняться.
4. Удаляйте ненужные cron-события. Если вы удаляете плагин или функцию, не забывайте очищать планировщик.
Как удалить запланированное событие
function wpone_clear_cron_event() {
$timestamp = wp_next_scheduled( 'wpone_hourly_event' );
if ( $timestamp ) {
wp_unschedule_event( $timestamp, 'wpone_hourly_event' );
}
}
// Вызовите эту функцию при деактивации плагина или по необходимости