Что такое удалённые задачи в WordPress и зачем их автоматизировать
В WordPress часто возникает необходимость запускать определённые задачи через заданные интервалы времени. Это может быть очистка базы данных, отправка email-рассылок, обновление кэша, синхронизация с внешними сервисами и многое другое. Все эти задачи принято называть «отложенными» или «крон-задачами» (cron jobs).
Автоматизация таких задач позволяет значительно упростить управление сайтом и улучшить производительность, обеспечивая выполнение рутинных операций без ручного вмешательства.
В этой статье мы рассмотрим, как настроить удалённые задачи без использования сторонних плагинов, используя только встроенные возможности WordPress и PHP, что особенно полезно при ограничениях на установку плагинов или желании держать сайт лёгким.
Использование WP-Cron для автоматизации задач
WP-Cron — встроенный инструмент WordPress для планирования задач. В отличие от системного cron, WP-Cron запускается при обращении пользователя к сайту, что может вызвать задержки или пропуски задач при низкой посещаемости.
Тем не менее, WP-Cron подходит для большинства задач и легко расширяется. Для создания собственной задачи понадобятся два элемента: регистрация события и функция-обработчик.
Регистрация пользовательского события
Для начала добавим событие в расписание с помощью функции wpreset_schedule_my_task:
function wpreset_schedule_my_task() {
if ( ! wp_next_scheduled( 'wpreset_my_custom_cron_event' ) ) {
wp_schedule_event( time(), 'hourly', 'wpreset_my_custom_cron_event' );
}
}
add_action( 'wp', 'wpreset_schedule_my_task' );Здесь мы проверяем, не запланировано ли уже событие с именем wpreset_my_custom_cron_event, и если нет — создаём его с интервалом в один час.
Создание обработчика задачи
Теперь нужно определить, какую функцию будет выполнять это событие. Привязываем её к событию:
function wpreset_my_custom_cron_function() {
// Здесь разместите код задачи
error_log('WPReset: Выполняется задача wpreset_my_custom_cron_event');
// Например, очистка временных данных
}
add_action( 'wpreset_my_custom_cron_event', 'wpreset_my_custom_cron_function' );Внутри функции можно поместить любой PHP-код, который должен выполняться по расписанию.
Добавление собственных интервалов расписания
По умолчанию WordPress поддерживает интервалы: hourly (часовой), twicedaily (два раза в день), daily (ежедневный). Чтобы добавить свои, например, 15 минут, используйте фильтр cron_schedules:
function wpreset_add_cron_interval( $schedules ) {
$schedules['every_fifteen_minutes'] = array(
'interval' => 900, // 15 минут в секундах
'display' => 'Каждые 15 минут'
);
return $schedules;
}
add_filter( 'cron_schedules', 'wpreset_add_cron_interval' );После этого можно использовать новый интервал при планировании задачи:
wp_schedule_event( time(), 'every_fifteen_minutes', 'wpreset_my_custom_cron_event' );Вызов WP-Cron через системный cron для надёжности
Проблема WP-Cron в том, что он срабатывает только при посещении сайта. Для сайтов с низкой посещаемостью или критичными задачами рекомендуется отключить WP-Cron и настроить системный cron для вызова WP-Cron вручную.
Чтобы отключить WP-Cron, добавьте в wp-config.php строку:
define('DISABLE_WP_CRON', true);А затем создайте системный cron на сервере, который будет вызывать WP-Cron через URL с помощью curl или wget каждые 15 минут:
*/15 * * * * curl -s https://ваш_сайт.ru/wp-cron.php?doing_wp_cron > /dev/null 2>&1Это обеспечит регулярное выполнение запланированных задач без зависимости от трафика.
Пример: автоматическая очистка устаревших записей в базе данных
Допустим, нам нужно регулярно удалять записи из таблицы wp_reset_logs, старше 30 дней. Создадим функцию и зададим её выполнение по расписанию:
function wpreset_clean_old_logs() {
global $wpdb;
$table = $wpdb->prefix . 'reset_logs';
$days = 30;
$result = $wpdb->query( $wpdb->prepare(
"DELETE FROM $table WHERE created_at < DATE_SUB(NOW(), INTERVAL %d DAY)",
$days
) );
error_log("WPReset: Удалено $result устаревших записей из $table");
}
add_action( 'wpreset_clean_logs_cron', 'wpreset_clean_old_logs' );
// Планируем задачу
function wpreset_schedule_clean_logs() {
if ( ! wp_next_scheduled( 'wpreset_clean_logs_cron' ) ) {
wp_schedule_event( time(), 'daily', 'wpreset_clean_logs_cron' );
}
}
add_action( 'wp', 'wpreset_schedule_clean_logs' );Такая реализация позволит автоматически поддерживать базу в порядке без плагинов.
Отладка и мониторинг задач WP-Cron
Для контроля за выполнением задач удобно использовать логи, как в примерах выше с error_log. Логирование помогает понять, когда и с каким результатом выполняется код.
Если задача не выполняется, стоит проверить:
- Активность WP-Cron (отключён ли он в
wp-config.php); - Наличие запланированных событий с помощью плагина «WP Crontrol» (если можно его установить);
- Ошибки PHP или ограничения хостинга.
При необходимости можно реализовать дополнительную проверку в админке или отправку уведомлений на email.
Заключение
Автоматизация удалённых задач в WordPress без плагинов — эффективный и гибкий способ поддерживать сайт в актуальном состоянии и выполнять регулярные операции. Использование WP-Cron с пользовательскими событиями и обработчиками позволяет создавать широкие сценарии автоматизации.
При правильной настройке и мониторинге такие решения работают надёжно и не требуют лишних зависимостей, что особенно важно для разработчиков, стремящихся к оптимизации и контролю.
Для расширения возможностей можно посмотреть плагины из WPShop.ru, например, Clearfy Pro, который содержит инструменты для оптимизации и автоматизации, но если хотите минимализм — описанный способ оптимален.