В некоторых проектах на WordPress возникает необходимость автоматически создавать или удалять записи по расписанию. Это может быть полезно для временных акций, ограниченных по времени публикаций, автогенерации контента или уборки устаревшего материала. В этой статье рассмотрим, как реализовать такую автоматизацию программно с использованием WP Cron, а также приведём примеры практических задач и рекомендуемые плагины.
Что такое WP Cron и как он работает
WP Cron — встроенная система планировщика задач WordPress, которая позволяет запускать определённые функции по расписанию. В отличие от системных cron, WP Cron не работает по реальному времени сервера, а запускается при посещении сайта, проверяя, есть ли запланированные задачи.
Это означает, что для сайтов с низкой посещаемостью срабатывание задач может задерживаться. Для таких случаев рекомендуется настроить системный cron на сервере, который будет вызывать wp-cron.php с нужной периодичностью.
Основные функции для работы с WP Cron:
wp_schedule_event()— добавить событие по расписанию;wp_clear_scheduled_hook()— удалить запланированное событие;add_action()— назначить функцию на запуск по событию.
Автоматическое создание записей по расписанию: пример реализации
Рассмотрим пример, как автоматически создавать кастомные записи (например, новости с временными данными) ежедневно в определённое время.
function wpaddons_schedule_daily_post_creation() {
if ( ! wp_next_scheduled( 'wpaddons_create_daily_post_event' ) ) {
wp_schedule_event( strtotime('01:00:00'), 'daily', 'wpaddons_create_daily_post_event' );
}
}
add_action( 'wp', 'wpaddons_schedule_daily_post_creation' );
function wpaddons_create_daily_post() {
$post_data = array(
'post_title' => 'Автоматическая новость ' . date('Y-m-d'),
'post_content' => 'Это автоматически созданная новость.',
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'post'
);
wp_insert_post( $post_data );
}
add_action( 'wpaddons_create_daily_post_event', 'wpaddons_create_daily_post' );
В этом коде мы создаём событие wpaddons_create_daily_post_event, которое запускается каждый день в 1:00 и создаёт новую запись типа post. Обратите внимание, что функция wpaddons_schedule_daily_post_creation проверяет, есть ли уже запланированное событие, чтобы не создавать дубликаты.
Расширение: создание записей с пользовательскими полями
Если нужно создавать записи с метаданными или кастомными полями, используйте функции update_post_meta() внутри обработчика:
function wpaddons_create_daily_post() {
$post_id = wp_insert_post(array(
'post_title' => 'Автоматическая новость ' . date('Y-m-d'),
'post_content'=> 'Контент с дополнительными данными.',
'post_status' => 'publish',
'post_author' => 1
));
if ( $post_id ) {
update_post_meta( $post_id, '_wpaddons_meta_key', 'Значение мета');
}
}
Автоматическое удаление записей по расписанию
Для удаления устаревших записей можно также воспользоваться WP Cron. Например, удалять записи старше 30 дней ежедневно.
function wpaddons_schedule_daily_post_deletion() {
if ( ! wp_next_scheduled( 'wpaddons_delete_old_posts_event' ) ) {
wp_schedule_event( strtotime('02:00:00'), 'daily', 'wpaddons_delete_old_posts_event' );
}
}
add_action( 'wp', 'wpaddons_schedule_daily_post_deletion' );
function wpaddons_delete_old_posts() {
$args = array(
'date_query' => array(
array(
'column' => 'post_date',
'before' => '30 days ago'
),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1
);
$old_posts = get_posts( $args );
foreach ( $old_posts as $post_id ) {
wp_delete_post( $post_id, true ); // true — удалять без возможности восстановления
}
}
add_action( 'wpaddons_delete_old_posts_event', 'wpaddons_delete_old_posts' );
Данный код настроит удаление всех опубликованных постов старше 30 дней в 2:00 ночи. Если нужно удалять записи другого типа, поменяйте параметр post_type.
Полезные плагины для автоматизации создания и удаления записей
Если вы не хотите писать код, можно использовать готовые решения:
- WP Scheduled Posts — расширяет стандартный календарь WP Cron, позволяет управлять временем публикации и удалять запланированные записи.
- Auto Post Scheduler — автоматически публикует черновики и может удалять устаревшие записи.
- Clearfy Pro (https://wpshop.ru/clearfy-pro?utm_source=wpaddons.ru&utm_medium=article&utm_campaign=kak-avtomaticheski-sozdat-i-udaljat-resheniya-v-wordpress-po-raspisaniyu) — плагин для оптимизации и автоматизации разных процессов, включая управление записями.
Рекомендации по безопасности и производительности
При автоматическом создании и удалении записей важно учитывать нагрузку на сервер и безопасность:
- Всегда проверяйте права доступа и корректность данных перед созданием или удалением.
- Используйте
wp_delete_post( $post_id, true )с осторожностью — удаление без возможности восстановления. - Для сайтов с высокой нагрузкой лучше запускать WP Cron через системный cron, чтобы задачи срабатывали точно по расписанию.
- Проверяйте, что задачи не создают дубликаты и не конфликтуют с другими процессами.
Как отключить автоматические задачи WP Cron и настроить системный cron
Для повышения точности рекомендуется отключить стандартный WP Cron и настроить вызов wp-cron.php по расписанию серверным cron:
define('DISABLE_WP_CRON', true);
Добавьте эту строку в wp-config.php, а затем создайте cron-задачу на сервере, например на каждый час:
0 * * * * wget -q -O - https://your-site.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Это позволит выполнять запланированные задачи в точное время без зависимости от посещаемости сайта.
Выводы
Автоматизация создания и удаления записей в WordPress — мощный инструмент для управления содержимым сайта по расписанию. Используя WP Cron и собственные функции, вы можете реализовать гибкие сценарии публикации и очистки контента. Для упрощения работы можно применять плагины, например, Clearfy Pro, которые расширяют возможности WordPress в этой области.
Подробности и дополнительные инструменты для автоматизации вы найдёте на WPGShop.