Ведение сайта на WordPress часто требует не только добавления нового контента, но и регулярного удаления устаревших или неактуальных записей. Ручное удаление занимает много времени, особенно если контента много. В этой статье рассмотрим, как настроить автоматическое удаление старого контента на сайте WordPress с помощью готовых плагинов и собственного кода. Это поможет поддерживать базу данных в чистоте, улучшит производительность сайта и SEO.
Зачем нужно автоматическое удаление старого контента в WordPress
Удаление устаревших записей важно по нескольким причинам:
- Оптимизация базы данных. Много неактуальных записей замедляют запросы к базе и увеличивают её размер.
- Улучшение пользовательского опыта. Посетители не видят устаревшую или нерелевантную информацию.
- SEO-аспекты. Поисковики ценят актуальный и свежий контент, а устаревшие страницы могут негативно влиять на позиции.
Автоматизация этого процесса позволяет забыть о необходимости периодически проверять и удалять старые записи вручную.
Использование плагинов для автоматического удаления записей
На рынке есть несколько плагинов, которые помогают настроить автоматическое удаление старого контента. Рассмотрим самые популярные и удобные.
1. WP Auto Delete Posts
WP Auto Delete Posts позволяет настроить автоматическое удаление записей по дате или другим параметрам. Можно задать период хранения записи и включить автоматическую очистку.
- Поддержка настройки для разных типов записей.
- Возможность исключить определённые категории или метки.
- Отчёты о проведённых очистках.
Плагин доступен на официальном репозитории WordPress.
2. Post Expirator
Post Expirator — плагин, который позволяет назначать дату истечения срока для каждой записи. По достижении даты запись можно удалить, изменить статус или перенести в черновики.
- Гибкая настройка действий после истечения срока.
- Можно автоматически удалять записи, что идеально подходит для новостных сайтов.
- Поддержка пользовательских типов записей.
Подробнее на странице плагина.
Реализация автоматического удаления старых записей с помощью собственного кода
Если вы предпочитаете контролировать процесс без привлечения плагинов, можно написать собственный код на PHP. Это позволит интегрировать решение именно под ваши нужды.
Пример функции для удаления записей старше 180 дней
function wpinfo_delete_old_posts() {
global $wpdb;
$days = 180; // Количество дней для хранения записи
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
// Получаем ID записей старше $days дней
$old_posts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' AND post_date < %s",
$date_threshold
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true - удаление без помещения в корзину
}
}
}
// Запускаем функцию ежедневно через WP Cron
add_action('wpinfo_daily_delete_old_posts', 'wpinfo_delete_old_posts');
if (!wp_next_scheduled('wpinfo_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpinfo_daily_delete_old_posts');
}
Этот код создаёт задачу, которая ежедневно удаляет все опубликованные записи старше 180 дней. Вы можете изменить тип записей или период хранения, адаптируя под свои задачи.
Добавление исключений и условий
Часто нужно удалить не все старые записи, а только определённые, например, исключив категории или теги. Добавим фильтрацию по категории:
function wpinfo_delete_old_posts_with_exceptions() {
global $wpdb;
$days = 180;
$excluded_category_id = 5; // ID категории, записи из которой не удаляем
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$old_posts = $wpdb->get_col($wpdb->prepare(
"SELECT p.ID FROM $wpdb->posts p
LEFT JOIN $wpdb->term_relationships tr ON (p.ID = tr.object_id)
LEFT JOIN $wpdb->term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id)
WHERE p.post_type = 'post'
AND p.post_status = 'publish'
AND p.post_date < %s
AND (tt.taxonomy != 'category' OR tt.term_id != %d)",
$date_threshold, $excluded_category_id
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
}
}
}
add_action('wpinfo_daily_delete_old_posts', 'wpinfo_delete_old_posts_with_exceptions');
Такой подход позволяет более гибко управлять удалением, не затрагивая важные категории.
Настройка автоматического удаления для кастомных типов записей
Если на сайте используются пользовательские типы записей (custom post types), можно расширить логику удаления и для них. Например, для типа «event» удалять записи старше 90 дней:
function wpinfo_delete_old_custom_posts() {
global $wpdb;
$days = 90;
$post_type = 'event';
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$old_posts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_type = %s AND post_status = 'publish' AND post_date < %s",
$post_type, $date_threshold
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
}
}
}
add_action('wpinfo_daily_delete_old_posts', 'wpinfo_delete_old_custom_posts');
Так можно автоматически очищать базу от устаревших событий, акций и других типов записей.
Дополнительные рекомендации и безопасность
При автоматическом удалении важно:
- Резервное копирование. Перед внедрением функций автоматического удаления обязательно настройте регулярное резервное копирование сайта и базы данных.
- Тестирование. Протестируйте функции на тестовом сайте, чтобы избежать случайных удалений нужного контента.
- Логи работы. Для контроля полезно вести логи для функций удаления, записывая ID удалённых записей и время выполнения.
- Ограничение прав. Код должен запускаться только с правами администратора сервера и WordPress, чтобы избежать уязвимостей.
Выводы и полезные инструменты
Автоматическое удаление старого контента — важная задача для поддержания производительности и актуальности сайта на WordPress. Используйте готовые плагины, если важна простота и быстрый старт, или пишите собственные функции для максимальной гибкости.
Для удобной работы с WordPress-кодом и автоматизацией рекомендуем обратить внимание на плагин Expert Review от WPShop — он поможет анализировать и оптимизировать ваш код и процессы.