Зачем нужно автоматически удалять старый контент в WordPress
Ведение сайта на WordPress со временем приводит к накоплению большого количества устаревших или неактуальных записей, страниц и пользовательских типов записей (custom post types). Ручное удаление такого контента — трудоемкий и небезопасный процесс, который может привести к ошибкам и потере важной информации. Автоматизация удаления старого контента помогает поддерживать базу данных в чистоте, улучшает производительность сайта и облегчает управление контентом.
К тому же некоторые сайты, например новостные порталы, блоги с временными акциями или каталоги, предполагают регулярное обновление ассортимента, и удаление старых записей становится необходимостью для поддержания актуальности.
В этой статье мы разберем, как реализовать автоматическое удаление постов по дате создания с помощью WP-Cron и пользовательских функций, а также рассмотрим полезные плагины для упрощения задачи.
Использование WP-Cron для автоматического удаления старого контента
Что такое WP-Cron и как он работает
WP-Cron — встроенная в WordPress система планировщика задач, которая позволяет запускать определенные функции по расписанию. В отличие от системных cron-задач на сервере, WP-Cron запускается при посещении сайта, что важно учитывать при настройке периодичности и производительности.
Для автоматического удаления старого контента мы создадим кастомное событие, которое будет запускаться раз в сутки и удалять записи, старше заданного количества дней.
Пример кода для автоматического удаления постов старше 30 дней
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
function wpupgrade_schedule_old_posts_deletion() {
if ( ! wp_next_scheduled( 'wpupgrade_delete_old_posts_hook' ) ) {
wp_schedule_event( time(), 'daily', 'wpupgrade_delete_old_posts_hook' );
}
}
add_action( 'wp', 'wpupgrade_schedule_old_posts_deletion' );
function wpupgrade_delete_old_posts() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'column' => 'post_date',
'before' => '30 days ago',
),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts( $args );
if ( ! empty( $old_posts ) ) {
foreach ( $old_posts as $post_id ) {
wp_delete_post( $post_id, true ); // true - безвозвратное удаление
}
}
}
add_action( 'wpupgrade_delete_old_posts_hook', 'wpupgrade_delete_old_posts' );В этом примере функция wpupgrade_schedule_old_posts_deletion проверяет, запланировано ли уже событие удаления, и если нет — создает его. Функция wpupgrade_delete_old_posts ищет все опубликованные посты старше 30 дней и удаляет их без возможности восстановления.
Настройка удаления для других типов записей и статусов
Если на вашем сайте используются кастомные типы записей, например «акции» или «мероприятия», вы можете расширить запрос в get_posts, добавив нужные типы:
'post_type' => array( 'post', 'event', 'sale' ),Также можно удалять черновики или записи в корзине, изменив параметр post_status. Будьте осторожны — удаление опубликованного контента без резервного копирования может привести к потере данных.
Использование плагинов для автоматического удаления старого контента
Плагин "Auto Post Delete"
Среди популярных готовых решений — плагин Auto Post Delete, который позволяет настроить удаление записей по возрасту через интерфейс администратора.
Плагин поддерживает разные типы записей и статусы, позволяет исключать категории и метки, а также выполнять удаление по расписанию без программирования.
Плагин Clearfy Pro для расширенного управления контентом
Если у вас установлен Clearfy Pro, этот плагин предлагает функции оптимизации и управления, включая автоматическую очистку базы данных и удаление неактуального контента. Используйте его инструменты для комплексного обслуживания сайта.
Как обезопасить процесс автоматического удаления
Резервное копирование и тестирование
Перед внедрением автоматического удаления убедитесь, что у вас настроено регулярное резервное копирование базы данных и файлов сайта. Это позволит восстановить контент в случае ошибки или удаления нужных записей.
Рекомендуется сначала протестировать работу функции на тестовом сайте или с ограниченным набором данных, чтобы убедиться в правильности работы кода.
Логи и уведомления
Для отслеживания удаляемого контента можно добавить логирование и отправку уведомлений на почту администратора. Например, расширим функцию удаления:
function wpupgrade_delete_old_posts() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'column' => 'post_date',
'before' => '30 days ago',
),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts( $args );
$deleted_posts = array();
if ( ! empty( $old_posts ) ) {
foreach ( $old_posts as $post_id ) {
if ( wp_delete_post( $post_id, true ) ) {
$deleted_posts[] = $post_id;
}
}
}
if ( ! empty( $deleted_posts ) ) {
wp_mail( get_option('admin_email'), 'Удаление старых постов', 'Удалены посты с ID: ' . implode(', ', $deleted_posts) );
}
}Это даст вам дополнительную уверенность и контроль над процессом.
Заключение по теме автоматического удаления старого контента
Автоматизация удаления устаревших записей — важная часть технического обслуживания WordPress-сайта, которая помогает поддерживать актуальность данных, снижать нагрузку на базу и улучшать пользовательский опыт. Используйте WP-Cron для гибкого программного решения или готовые плагины для быстрого старта. Обязательно тестируйте и делайте резервные копии перед активацией автоматического удаления.