Автоматизация создания и удаления записей в WordPress через CRON

Автоматизация рутинных задач на сайте 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:

  1. Перейдите в админку WordPress → Плагины → Добавить новый.
  2. В поиске введите «WP Crontrol».
  3. Установите и активируйте плагин.

После установки вы сможете управлять всеми задачами в разделе «Инструменты → 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_ для удобства поддержки и предотвращения конфликтов, а также всегда делайте резервные копии перед внедрением новых автоматизаций.

WooCommerce: автоматическое возврат средств и смена статуса заказа через код
18.06.2026
Как создать автоматический редактор для WordPress с помощью AJAX
15.01.2026
Автоматизация создания и удаления записей в WordPress через CRON
22.01.2026
Как создать автоматические уведомления в WordPress
29.11.2025
Как добавить автоматическое удаление нерабочих скриптов в WordPress
11.02.2026