Автоматизация рутинных задач на сайте WordPress — важный аспект для эффективного управления контентом. В этой статье мы разберём, как с помощью встроенного механизма WP-Cron можно настроить автоматическое создание и удаление записей по расписанию. Это полезно для сайтов с временными акциями, новостями, автопубликациями или очисткой устаревшего контента.
Что такое WP-Cron и почему он важен для автоматизации
WP-Cron — внутренний планировщик задач WordPress, который запускает определённые функции в заданное время или с заданным интервалом. В отличие от системного CRON на сервере, WP-Cron активируется при заходе посетителя на сайт, что может быть как плюсом, так и минусом. Тем не менее, он идеально подходит для автоматизации задач без доступа к серверу.
Основные преимущества WP-Cron:
- Простая интеграция с WordPress без дополнительных настроек сервера.
- Позволяет запускать PHP-функции по расписанию.
- Гибкость в настройках интервалов и времени запуска.
Однако при большом трафике или на сайтах с низкой посещаемостью могут возникать задержки, поэтому при необходимости критичных задач лучше использовать системный CRON.
Как создать и зарегистрировать CRON-задачу для автоматического создания записей
Пример с задачей, которая создаёт новую запись в блоге каждый день в определённое время. Сначала зарегистрируем пользовательское событие и зададим расписание.
1. Добавляем пользовательский интервал
function wptricks_cron_add_custom_interval( $schedules ) {
if ( ! isset( $schedules['daily_at_3am'] ) ) {
$schedules['daily_at_3am'] = array(
'interval' => 86400, // 24 часа
'display' => 'Каждый день в 3 часа ночи',
);
}
return $schedules;
}
add_filter( 'cron_schedules', 'wptricks_cron_add_custom_interval' );Этот фильтр добавит новый интервал с названием daily_at_3am с периодом 86400 секунд (сутки).
2. Регистрируем событие при активации темы или плагина
function wptricks_cron_activation() {
if ( ! wp_next_scheduled( 'wptricks_create_daily_post' ) ) {
wp_schedule_event( strtotime('03:00:00'), 'daily_at_3am', 'wptricks_create_daily_post' );
}
}
add_action( 'wp', 'wptricks_cron_activation' );Эта функция проверяет, не запланировано ли уже событие, и если нет — создаёт новое с запуском в 3 часа ночи.
3. Обработчик события — функция создания записи
function wptricks_create_daily_post() {
$post_data = array(
'post_title' => 'Автоматическая запись от ' . date('d.m.Y'),
'post_content' => 'Это автоматически созданный пост.',
'post_status' => 'publish',
'post_author' => 1,
'post_category' => array(1),
);
wp_insert_post( $post_data );
}
add_action( 'wptricks_create_daily_post', 'wptricks_create_daily_post' );Эта функция создаёт публикацию с текущей датой в заголовке и фиксированным текстом.
Как автоматически удалять устаревшие записи по расписанию
Нередко возникает необходимость удалять записи, которым больше определённого времени. Например, через 30 дней после публикации. Сделаем задачу аналогично — создадим CRON-задачу для удаления таких постов.
1. Регистрируем событие удаления
function wptricks_cron_activation_delete() {
if ( ! wp_next_scheduled( 'wptricks_delete_old_posts' ) ) {
wp_schedule_event( time(), 'daily', 'wptricks_delete_old_posts' );
}
}
add_action( 'wp', 'wptricks_cron_activation_delete' );Здесь используем стандартный интервал daily (каждые 24 часа).
2. Функция удаления старых постов
function wptricks_delete_old_posts() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'column' => 'post_date',
'before' => '30 days ago',
),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts( $args );
foreach ( $old_posts as $post_id ) {
wp_trash_post( $post_id ); // Можно заменить на wp_delete_post($post_id, true) для удаления без корзины
}
}
add_action( 'wptricks_delete_old_posts', 'wptricks_delete_old_posts' );Функция найдет все публикации старше 30 дней и переместит их в корзину.
Настройка системного CRON для надёжности и производительности
Для сайтов с низкой посещаемостью WP-Cron может работать с задержками, так как запускается при заходе посетителя. Чтобы этого избежать, можно отключить WP-Cron и настроить системный CRON на сервере.
Для отключения WP-Cron добавьте в wp-config.php:
define('DISABLE_WP_CRON', true);Далее в панели управления хостингом (например, cPanel) или через SSH настройте системный CRON с командой:
wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1или
curl https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1Замените https://example.com на адрес вашего сайта.
Полезные плагины для управления CRON-задачами в WordPress
Для удобства мониторинга и управления запланированными задачами рекомендуем использовать плагины:
- WP Crontrol — позволяет просматривать, редактировать, удалять и создавать CRON-задачи через админку.
- Advanced Cron Manager — расширенный функционал с удобным интерфейсом.
Установка плагина WP Crontrol:
- Перейдите в админку WordPress → Плагины → Добавить новый.
- В поиске введите «WP Crontrol».
- Установите и активируйте плагин.
После установки вы сможете управлять всеми задачами в разделе «Инструменты → Cron Events».
Пример интеграции с плагином WPRemark для уведомлений о созданных или удалённых записях
Если на вашем сайте установлен плагин WPRemark, можно добавить отправку уведомлений при создании или удалении записей.
function wptricks_notify_on_post_create( $post_id ) {
if ( function_exists('wpremark_send_notification') ) {
$post = get_post( $post_id );
$message = 'Создан новый пост: ' . $post->post_title;
wpremark_send_notification( $message );
}
}
add_action( 'wptricks_create_daily_post', 'wptricks_notify_on_post_create' );
function wptricks_notify_on_post_delete( $post_id ) {
if ( function_exists('wpremark_send_notification') ) {
$message = 'Удалён пост с ID: ' . $post_id;
wpremark_send_notification( $message );
}
}
add_action( 'wptricks_delete_old_posts', function() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array('before' => '30 days ago'),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
$posts = get_posts( $args );
foreach ( $posts as $post_id ) {
wptricks_notify_on_post_delete( $post_id );
}
});Так вы будете получать уведомления в удобном формате.
Итоги и рекомендации по автоматизации через CRON в WordPress
Автоматизация создания и удаления записей через WP-Cron — мощный инструмент, позволяющий значительно сэкономить время и избежать ошибок ручного управления контентом. Главное — грамотно настроить расписание, протестировать задачи и при необходимости переключиться на системный CRON для стабильности.
Используйте плагины для контроля задач, пишите функции с префиксом wptricks_ для удобства поддержки и предотвращения конфликтов, а также всегда делайте резервные копии перед внедрением новых автоматизаций.