Как создать автоматические записи в WordPress с помощью Cron

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

Что такое WP-Cron и почему его нужно использовать правильно

WP-Cron — это виртуальный планировщик задач WordPress, который запускается при посещении сайта. Он проверяет, есть ли запланированные задачи, и выполняет их. Это удобно, но есть недостатки:

  • Задачи могут запускаться с задержкой, если на сайт долго не заходят.
  • При высоких нагрузках WP-Cron может нагружать сервер.
  • Некорректная работа WP-Cron может привести к пропуску задач.

Для решения этих проблем лучше отключить WP-Cron от запуска при каждом запросе и настроить системный cron на сервере.

Отключение автоматического запуска WP-Cron

Добавьте в wp-config.php строку:

define('DISABLE_WP_CRON', true);

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

Создание автоматической записи с помощью WP-Cron

Для примера создадим функцию, которая будет автоматически создавать запись с определённым заголовком и контентом.

Регистрация задачи в WP-Cron

Сначала регистрируем событие, если оно ещё не запланировано:

function wpfactory_schedule_auto_post() {
    if ( ! wp_next_scheduled( 'wpfactory_auto_post_event' ) ) {
        wp_schedule_event( time(), 'hourly', 'wpfactory_auto_post_event' );
    }
}
add_action( 'wp', 'wpfactory_schedule_auto_post' );

Этот код запускает событие wpfactory_auto_post_event ежечасно.

Обработка события — создание записи

Добавим функцию, которая создаёт запись:

function wpfactory_create_auto_post() {
    $post_data = array(
        'post_title'    => 'Автоматическая запись ' . date('Y-m-d H:i:s'),
        'post_content'  => 'Это контент автоматически созданной записи.',
        'post_status'   => 'publish',
        'post_author'   => 1,
        'post_category' => array(1),
    );

    wp_insert_post( $post_data );
}
add_action( 'wpfactory_auto_post_event', 'wpfactory_create_auto_post' );

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

Настройка системного cron на сервере для надежной работы

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

  1. Отключите WP-Cron в wp-config.php (как было показано выше).
  2. Добавьте в системный cron следующую команду, выполняющуюся, например, каждую пятую минуту:
*/5 * * * * wget -q -O - https://wpfactory.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Или используйте curl:

*/5 * * * * curl -s https://wpfactory.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
<

Это гарантирует, что задачи WP-Cron будут запускаться регулярно и своевременно.

Использование плагинов для управления планировщиком задач

Если хотите упростить управление cron-задачами, можно использовать плагины:

  • WP Crontrol — позволяет просматривать, редактировать и создавать задачи WP-Cron через админку.
  • Clearfy Pro — оптимизирует работу WordPress, в том числе управляет WP-Cron и позволяет отключать ненужные задачи.

Советы по безопасности и оптимизации автоматических записей

Проверка дублирования и лимиты создания записей

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

function wpfactory_create_auto_post() {
    $title = 'Автоматическая запись ' . date('Y-m-d H:i:s');
    $existing = get_page_by_title( $title, OBJECT, 'post' );
    if ( $existing ) {
        return; // Запись уже есть
    }
    $post_data = array(
        'post_title'    => $title,
        'post_content'  => 'Это контент автоматически созданной записи.',
        'post_status'   => 'publish',
        'post_author'   => 1,
        'post_category' => array(1),
    );
    wp_insert_post( $post_data );
}

Использование транзиентов для контроля частоты

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

function wpfactory_create_auto_post() {
    if ( get_transient( 'wpfactory_auto_post_created' ) ) {
        return; // Еще не прошло 30 минут
    }
    $post_data = array(
        'post_title'    => 'Автоматическая запись ' . date('Y-m-d H:i:s'),
        'post_content'  => 'Это контент автоматически созданной записи.',
        'post_status'   => 'publish',
        'post_author'   => 1,
        'post_category' => array(1),
    );
    wp_insert_post( $post_data );
    set_transient( 'wpfactory_auto_post_created', true, 30 * MINUTE_IN_SECONDS );
}

Заключение

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

Как добавить динамические параметры в шорткод WordPress
11.12.2025
Как сделать автоматические отзывы с оценками в WordPress
17.01.2026
Как отключить Emoji в WordPress для ускорения сайта и улучшения производительности
06.12.2025
Как отключить AJAX в WooCommerce для избежания проблем с кэшированием
06.05.2026
Автоматическое удаление старых записей в WordPress
22.03.2026