Ведение сайта на WordPress часто сопровождается накоплением большого объема устаревшего или неактуального контента. Это может негативно влиять на SEO и производительность сайта. В этой статье мы подробно рассмотрим, как реализовать автоматическое удаление старых записей и страниц в WordPress с помощью кода и плагинов. Такой подход позволит поддерживать базу данных в актуальном состоянии и снизить нагрузку на сервер.
Почему важно удалять старый контент в WordPress
Удаление устаревших записей помогает:
- Избежать снижения позиций в поисковых системах из-за «мусорных» страниц;
- Снизить нагрузку на базу данных, что ускоряет работу сайта;
- Упростить навигацию для пользователей, оставив только актуальную информацию;
- Поддерживать высокий уровень безопасности, так как старые страницы могут содержать уязвимости.
Но вручную удалять записи неудобно и рискованно, особенно если их много. Поэтому автоматизация — лучший вариант.
Реализация автоматического удаления старого контента через код
Для начала рассмотрим, как создать функцию, которая будет удалять записи старше определенного количества дней. Мы напишем функцию с префиксом wpbloger_, чтобы избежать конфликтов.
Пример функции для удаления записей старше 30 дней
function wpbloger_delete_old_posts() {
$days = 30; // количество дней, после которого записи удаляются
$date_query = array(
'column' => 'post_date',
'before' => date('Y-m-d', strtotime("-{$days} days")),
'inclusive' => true,
);
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array($date_query),
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($args);
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true - удаление без корзины
}
}Эта функция найдет все опубликованные записи старше 30 дней и удалит их без помещения в корзину.
Автоматизация задачи с помощью WP-Cron
Чтобы функция запускалась автоматически, добавим событие в расписание WordPress. Например, еженедельно.
function wpbloger_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wpbloger_weekly_old_posts_deletion')) {
wp_schedule_event(time(), 'weekly', 'wpbloger_weekly_old_posts_deletion');
}
}
add_action('wp', 'wpbloger_schedule_old_posts_deletion');
add_action('wpbloger_weekly_old_posts_deletion', 'wpbloger_delete_old_posts');Этот код добавляет еженедельное событие, которое запускает функцию удаления.
Удаление старого контента с учетом типов записей и пользовательских условий
В реальных проектах часто нужно удалять не только стандартные записи, но и кастомные типы, например, отзывы, товары или кастомные посты.
Для этого измените параметр post_type в запросе:
$args['post_type'] = array('post', 'custom_post_type');Также можно добавить фильтры по таксономиям или метаполям, например, удалять только неактивные товары.
Пример с метаполем "активность"
$args['meta_query'] = array(
array(
'key' => 'active',
'value' => '0',
'compare' => '=',
),
);Такой запрос удалит только записи с метаполем active=0 и старше 30 дней.
Использование плагинов для автоматического удаления старого контента
Если код не ваш конек или хочется готовое решение, можно использовать плагины. Вот несколько проверенных вариантов:
- Auto Post Scheduler — плагин, который может автоматически удалять и переопубликовывать записи по расписанию;
- WP Bulk Delete — мощный инструмент для массового удаления постов по различным критериям, включая дату, категории, метаполя;
- Clearfy Pro (ссылка: https://wpshop.ru/clearfy-pro) — не только оптимизатор, но и содержит функции для очистки базы от мусорных данных.
Все эти решения позволяют настроить удаление контента без написания кода, что удобно для новичков.
Безопасность и резервное копирование перед удалением
Любое автоматическое удаление несет риск потери важных данных. Обязательно настройте регулярное резервное копирование сайта. Для этого подойдут плагины:
- UpdraftPlus
- WPBackItUp
- All-in-One WP Migration
Можно автоматизировать резервное копирование перед запуском удаления. Например, вызвать функцию создания резервной копии в хуке перед wpbloger_delete_old_posts.
Как отменить или просмотреть удаляемый контент
Рекомендуется сначала не удалять записи сразу, а переводить их в статус trash — корзина WordPress. Тогда можно будет восстановить удаленный контент, если что-то пошло не так.
wp_trash_post($post_id);Измените в функции wpbloger_delete_old_posts вызов wp_delete_post на wp_trash_post для безопасного удаления.
Итоги и рекомендации
Автоматическое удаление старого контента в WordPress позволяет поддерживать сайт в актуальном состоянии, улучшать производительность и SEO. Используйте приведенный код и примеры настройки WP-Cron для надежной автоматизации. Для упрощения можно применять плагины, особенно если не хочется программировать.
Не забывайте про резервное копирование и тестируйте скрипты на тестовом сайте до внедрения в рабочий проект.