В этой статье мы подробно разберём, как с помощью встроенной системы планировщика заданий WP-Cron в WordPress автоматизировать создание и удаление записей. Автоматизация таких задач помогает оптимизировать управление контентом, особенно когда нужно регулярно добавлять или чистить записи без вашего непосредственного участия.
Что такое WP-Cron и зачем его использовать для автоматизации
WP-Cron — это встроенный механизм планировщика событий в WordPress. В отличие от системных cron-задач на сервере, WP-Cron запускается при посещении сайта и проверяет, есть ли задачи, которые нужно выполнить.
Использование WP-Cron позволяет:
- Автоматически создавать новые записи по расписанию (например, новости, акции, отзывы).
- Удалять устаревший или неактуальный контент без ручного вмешательства.
- Оптимизировать работу сайта, снизив нагрузку на администраторов.
Обратите внимание, что WP-Cron зависит от посещаемости сайта — если трафик низкий, задачи могут запускаться с задержкой. Для критичных задач рекомендуется настроить системный cron и выключить WP-Cron (через define('DISABLE_WP_CRON', true); в wp-config.php).
Как создать задачу для автоматического создания записей
Рассмотрим пример, как автоматически создавать новую запись типа post раз в день.
Регистрация расписания и задачи
Сначала добавим кастомный интервал в расписание WP-Cron, если нужно, или используем стандартные. В нашем случае используем стандартный интервал 'daily'.
Далее регистрируем событие при активации темы или плагина:
function wpteam_activate_cron() {
if ( ! wp_next_scheduled( 'wpteam_daily_create_post' ) ) {
wp_schedule_event( time(), 'daily', 'wpteam_daily_create_post' );
}
}
register_activation_hook( __FILE__, 'wpteam_activate_cron' );
function wpteam_deactivate_cron() {
wp_clear_scheduled_hook( 'wpteam_daily_create_post' );
}
register_deactivation_hook( __FILE__, 'wpteam_deactivate_cron' );Этот код гарантирует, что задача будет запущена ежедневно и отменена при деактивации плагина.
Реализация функции создания записи
Теперь определим функцию, которая создаёт новый пост:
add_action( 'wpteam_daily_create_post', 'wpteam_create_daily_post' );
function wpteam_create_daily_post() {
$new_post = array(
'post_title' => 'Автоматически созданная запись ' . date('Y-m-d'),
'post_content' => 'Это содержание создано автоматически через WP-Cron.',
'post_status' => 'publish',
'post_author' => 1,
'post_category' => array(1),
);
wp_insert_post( $new_post );
}Как видите, функция формирует массив с параметрами записи и вставляет её в базу через wp_insert_post.
Автоматическое удаление записей по условию
Теперь рассмотрим, как удалять записи автоматически, например, все записи старше 30 дней.
Создание задачи удаления
Аналогично создаём cron-задачу при активации:
function wpteam_activate_delete_cron() {
if ( ! wp_next_scheduled( 'wpteam_daily_delete_old_posts' ) ) {
wp_schedule_event( time(), 'daily', 'wpteam_daily_delete_old_posts' );
}
}
register_activation_hook( __FILE__, 'wpteam_activate_delete_cron' );
function wpteam_deactivate_delete_cron() {
wp_clear_scheduled_hook( 'wpteam_daily_delete_old_posts' );
}
register_deactivation_hook( __FILE__, 'wpteam_deactivate_delete_cron' );Реализация функции удаления
Функция для удаления записей старше 30 дней может выглядеть так:
add_action( 'wpteam_daily_delete_old_posts', 'wpteam_delete_old_posts' );
function wpteam_delete_old_posts() {
$args = array(
'date_query' => array(
array(
'before' => '30 days ago',
),
),
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids',
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
foreach ( $query->posts as $post_id ) {
wp_delete_post( $post_id, true ); // true — удаление без корзины
}
}
}Таким образом, мы проверяем посты, которые были опубликованы более 30 дней назад, и удаляем их принудительно.
Рекомендации по использованию плагинов для WP-Cron
Хотя код выше поможет реализовать нужный функционал, для управления расписанием и отладки WP-Cron можно использовать плагины:
- WP Crontrol — позволяет просматривать, редактировать и запускать cron-задачи вручную.
- Clearfy Pro — оптимизирует работу WP и имеет расширенные настройки для WP-Cron.
Использование таких инструментов помогает избежать ошибок и контролировать автоматизацию.
Советы по отладке и производительности WP-Cron
Если задачи не выполняются вовремя, проверьте:
- Посещаемость сайта — WP-Cron срабатывает при заходе на сайт.
- Не конфликтуют ли другие плагины с WP-Cron.
- Логируйте выполнение задач, добавляя в функции запись в файл через
error_logили собственный лог.
Для повышения стабильности лучше настроить системный cron на сервере и отключить WP-Cron, чтобы задачи выполнялись точно по расписанию.