Ведение сайта на WordPress часто приводит к накоплению большого количества устаревшего контента — старых записей, которые давно потеряли актуальность. Это может замедлять работу сайта, загромождать админку и мешать поисковой оптимизации. В этой статье мы рассмотрим, как автоматизировать процесс удаления таких записей, используя плагины и собственные PHP-скрипты.
Почему важно удалять старые записи в WordPress
Удаление устаревших публикаций помогает не только освободить место в базе данных, но и улучшить производительность сайта. Чем меньше объем базы данных и запросов к ней, тем быстрее работает WordPress. К тому же, поддержание чистоты контента положительно влияет на SEO — поисковые системы оценивают актуальность и качество сайта.
Кроме того, удаление старых записей упрощает работу редакторов и администраторов, снижая риск ошибок при обновлении контента и облегчая навигацию в панели управления.
Автоматическое удаление через плагины
Плагин WP Auto Delete Posts
Один из самых простых и удобных плагинов для автоматизации удаления записей — WP Auto Delete Posts. Он позволяет настроить удаление записей по возрасту, категориям, тегам и другим параметрам.
Основные возможности:
- Удаление записей старше заданного количества дней;
- Фильтрация по категориям и тегам;
- Возможность исключения важных записей;
- Поддержка удаления черновиков и записей в корзине;
- Настройка расписания удаления.
После установки и активации плагина перейдите в его настройки и укажите параметры для автоматического удаления. Например, можно настроить удаление всех записей старше 365 дней из категории «Новости».
Использование плагина Clearfy Pro для оптимизации
Если вы используете Clearfy Pro, в нем есть инструменты для очистки и оптимизации базы данных, включая удаление устаревших ревизий и черновиков. Однако для точного удаления старых записей потребуется кастомизация, о которой расскажем ниже.
Автоматическое удаление старых записей через код
Если вы хотите более гибко контролировать процесс удаления, можно добавить собственный PHP-скрипт в файл functions.php вашей темы (желательно дочерней) или создать небольшой плагин.
Пример функции, которая удалит все записи старше 180 дней:
function wpkit_delete_old_posts() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'before' => '180 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 — удаляет без перемещения в корзину
}
}
}
// Запускаем функцию раз в сутки через WP-Cron
if (!wp_next_scheduled('wpkit_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpkit_daily_delete_old_posts');
}
add_action('wpkit_daily_delete_old_posts', 'wpkit_delete_old_posts');Данный код:
- Выбирает все опубликованные записи старше 180 дней;
- Удаляет их без перемещения в корзину;
- Запускает эту процедуру один раз в сутки с помощью WP-Cron.
Такое решение удобно для сайтов с большим количеством контента, где нужно регулярно очищать устаревшие материалы.
Расширенные варианты удаления с фильтрацией
Удаление по категории или метке
Если нужно удалять записи не просто по дате, а учитывать категории или теги, модифицируем запрос следующим образом:
function wpkit_delete_old_posts_by_category() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array('before' => '365 days ago'),
),
'category_name' => 'news', // категория для удаления
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($args);
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
}
}
add_action('wpkit_weekly_delete_old_news', 'wpkit_delete_old_posts_by_category');
if (!wp_next_scheduled('wpkit_weekly_delete_old_news')) {
wp_schedule_event(time(), 'weekly', 'wpkit_weekly_delete_old_news');
}В этом примере удаляются только записи из категории news, которым больше года. Запуск настроен раз в неделю.
Исключение определённых записей
Чтобы избежать удаления важных публикаций, можно добавить аргумент post__not_in с ID таких записей или проверить наличие определённого пользовательского поля:
function wpkit_delete_old_posts_exclude() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array('before' => '180 days ago'),
),
'meta_query' => array(
array(
'key' => '_wpkit_protect',
'compare' => 'NOT EXISTS',
),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($args);
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
}
}
add_action('wpkit_daily_delete_old_posts_exclude', 'wpkit_delete_old_posts_exclude');
if (!wp_next_scheduled('wpkit_daily_delete_old_posts_exclude')) {
wp_schedule_event(time(), 'daily', 'wpkit_daily_delete_old_posts_exclude');
}Здесь записи с метаполем _wpkit_protect не будут удаляться, что позволяет вручную защитить важный контент.
Интеграция с WPRemark для управления контентом
Если на вашем сайте установлен WPRemark, можно использовать его систему оценок и комментариев для определения актуальности записей. Например, удалять записи, которые получили низкие оценки или не имеют комментариев более 6 месяцев.
Это позволит автоматически отсеивать неинтересный или неактивный контент, повышая качество сайта.
Советы по безопасному удалению
Перед автоматическим удалением важно делать резервные копии базы данных. Рекомендуется использовать плагины для резервного копирования или создавать их вручную.
Также лучше сначала переводить записи в статус черновика или перемещать в корзину, а не удалять сразу, чтобы избежать потери важной информации.
Используйте логи для отслеживания удалённых записей — это поможет быстро восстановить ошибочно удалённый материал.
Заключение
Автоматизация удаления старых записей в WordPress — эффективный способ поддерживать сайт в чистоте и порядке. Используйте готовые плагины для простых задач и кастомный код для более тонких настроек. Интеграция с инструментами оптимизации, такими как Clearfy Pro и WPRemark, позволит сделать процесс умнее и безопаснее.
Экспериментируйте с кодом и настройками, чтобы подобрать оптимальный режим для вашего проекта.