Автоматическое создание и удаление черновиков в WordPress через CRON

|

Ведение бизнеса на WordPress подразумевает регулярное создание и управление контентом. Иногда возникает необходимость автоматизировать задачи, связанные с черновиками: создавать их по расписанию или удалять старые, чтобы не захламлять базу данных. В этой статье разберём, как с помощью CRON-задач в WordPress автоматизировать создание и удаление черновиков, рассмотрим примеры кода и полезные плагины для упрощения процесса.

Почему нужна автоматизация черновиков в WordPress

Ведение большого сайта или бизнес-проекта часто сопровождается необходимостью быстро создавать новые материалы или, наоборот, чистить базу от устаревших или ненужных черновиков. Ручное управление черновиками занимает время, увеличивает риск ошибок и снижает производительность. Автоматизация с помощью CRON-задач позволяет:

Давайте рассмотрим, как это реализовать на практике.

Создание черновиков по расписанию: пример кода с использованием CRON WordPress

WordPress имеет собственный механизм планировщика задач — WP-Cron, который позволяет запускать функции по расписанию. Рассмотрим пример, как автоматически создавать черновик с заранее заданным заголовком и содержимым.

Регистрация и запуск CRON задачи

add_action('wpbusiness_create_draft_cron', 'wpbusiness_create_scheduled_draft');

function wpbusiness_create_scheduled_draft() {
    $new_post = array(
        'post_title'    => 'Шаблон для публикации '.date('Y-m-d'),
        'post_content'  => 'Это автоматически созданный черновик для дальнейшего редактирования.',
        'post_status'   => 'draft',
        'post_author'   => 1, // ID автора
        'post_type'     => 'post'
    );

    // Проверяем, нет ли уже такого черновика на сегодня
    $existing = get_posts(array(
        'title' => $new_post['post_title'],
        'post_status' => 'draft',
        'post_type' => 'post'
    ));

    if(empty($existing)) {
        wp_insert_post($new_post);
    }
}

// Планируем CRON задачу при активации темы или плагина
if (!wp_next_scheduled('wpbusiness_create_draft_cron')) {
    wp_schedule_event(time(), 'daily', 'wpbusiness_create_draft_cron');
}

// Очистка при деактивации
register_deactivation_hook(__FILE__, function() {
    wp_clear_scheduled_hook('wpbusiness_create_draft_cron');
});

В данном примере задача wpbusiness_create_draft_cron запускается ежедневно и создаёт черновик с уникальным заголовком на текущую дату, если такой ещё не существует.

Как настроить расписание CRON для нестандартных интервалов

В WordPress можно добавить собственные интервалы для CRON, если стандартных (hourly, daily, twicedaily) недостаточно.

add_filter('cron_schedules', 'wpbusiness_custom_cron_schedules');
function wpbusiness_custom_cron_schedules($schedules) {
    $schedules['weekly'] = array(
        'interval' => 604800, // 7 дней в секундах
        'display' => __('Еженедельно')
    );
    return $schedules;
}

Далее в wp_schedule_event можно указать ваш новый интервал 'weekly'.

Автоматическое удаление старых черновиков: как очистить базу

Если на сайте скапливается множество черновиков, которые не планируется публиковать, это может негативно сказаться на производительности. Удалять их вручную неудобно, поэтому автоматизация удаления — отличный выход.

Пример функции удаления черновиков старше 30 дней

add_action('wpbusiness_delete_old_drafts_cron', 'wpbusiness_delete_old_drafts');

function wpbusiness_delete_old_drafts() {
    global $wpdb;

    $days = 30;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-'. $days .' days'));

    $drafts = $wpdb->get_results($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_status = 'draft' AND post_date < %s",
        $date_threshold
    ));

    if(!empty($drafts)) {
        foreach($drafts as $draft) {
            wp_delete_post($draft->ID, true); // true — удаление без возможности восстановления
        }
    }
}

// Планируем задачу для удаления
if (!wp_next_scheduled('wpbusiness_delete_old_drafts_cron')) {
    wp_schedule_event(time(), 'daily', 'wpbusiness_delete_old_drafts_cron');
}

// Очистка при деактивации
register_deactivation_hook(__FILE__, function() {
    wp_clear_scheduled_hook('wpbusiness_delete_old_drafts_cron');
});

Данный код ежедневно удаляет черновики, которым более 30 дней, что помогает поддерживать базу в чистоте.

Важные моменты при автоматическом удалении

Перед внедрением автоматического удаления убедитесь, что:

Полезные плагины для автоматизации управления черновиками

Если не хочется писать код самостоятельно, можно использовать готовые плагины. Например:

Использование плагинов удобно для тех, кто не хочет углубляться в код, но при этом нуждается в гибких настройках.

Советы по отладке и мониторингу CRON-задач в WordPress

WP-Cron работает не как системный CRON, а запускается при посещении сайта, что иногда приводит к пропуску задач. Чтобы избежать этого:

Заключительный пример: комбинированный плагин для wpbusiness.ru

Пример минимального плагина, который объединяет создание и удаление черновиков, который можно адаптировать под свои задачи:

/**
 * Plugin Name: WPBusiness Draft Manager
 * Description: Автоматическое создание и удаление черновиков по расписанию.
 * Version: 1.0
 * Author: WPBusiness
 */

// Создание черновика
add_action('wpbusiness_create_draft_cron', 'wpbusiness_create_scheduled_draft');
function wpbusiness_create_scheduled_draft() {
    $title = 'Авто-черновик '.date('Y-m-d');
    $exists = get_posts(['title' => $title, 'post_status' => 'draft']);
    if(empty($exists)) {
        wp_insert_post([
            'post_title' => $title,
            'post_content' => 'Содержание автоматически созданного черновика.',
            'post_status' => 'draft',
            'post_author' => 1,
            'post_type' => 'post'
        ]);
    }
}

// Удаление черновиков старше 30 дней
add_action('wpbusiness_delete_old_drafts_cron', 'wpbusiness_delete_old_drafts');
function wpbusiness_delete_old_drafts() {
    global $wpdb;
    $threshold = date('Y-m-d H:i:s', strtotime('-30 days'));
    $drafts = $wpdb->get_results($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_status = 'draft' AND post_date < %s",
        $threshold
    ));
    foreach($drafts as $draft) {
        wp_delete_post($draft->ID, true);
    }
}

// Планируем задачи
register_activation_hook(__FILE__, function() {
    if (!wp_next_scheduled('wpbusiness_create_draft_cron')) {
        wp_schedule_event(time(), 'daily', 'wpbusiness_create_draft_cron');
    }
    if (!wp_next_scheduled('wpbusiness_delete_old_drafts_cron')) {
        wp_schedule_event(time(), 'daily', 'wpbusiness_delete_old_drafts_cron');
    }
});

// Убираем задачи при деактивации
register_deactivation_hook(__FILE__, function() {
    wp_clear_scheduled_hook('wpbusiness_create_draft_cron');
    wp_clear_scheduled_hook('wpbusiness_delete_old_drafts_cron');
});

Этот пример можно расширить, добавив интерфейс в админке, настройки интервалов и фильтры по типам записей или авторам.

Как отключить AJAX-загрузку товаров в WooCommerce для улучшения совместимости
01.06.2026
Как автоматизировать управление виджетами в WordPress: практические решения
04.02.2026
Как автоматизировать создание отчёта о продавцах в WordPress с примерами кода
30.12.2025
Автоматическое изменение стоимости товаров в WooCommerce по условиям
23.04.2026
Как автоматизировать управление пользователями в WordPress с помощью кода
12.02.2026
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙