В 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. Для этого:
- Отключите WP-Cron в
wp-config.php(как было показано выше). - Добавьте в системный 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, чтобы задачи запускались своевременно и без сбоев. Для удобства управления используйте плагины, а также обязательно внедряйте проверки и ограничения, чтобы не создавать лишний шум в базе данных.