В процессе эксплуатации сайта на WordPress накапливается много устаревшего контента — старые посты, страницы, ревизии, черновики и даже комментарии, которые уже неактуальны. Это может замедлять работу сайта, усложнять администрирование и негативно влиять на SEO. В этой статье разберём, как автоматизировать удаление такого контента с помощью кода и плагинов, чтобы держать сайт в чистоте без ручной работы.
Почему важно своевременно удалять старый контент
Неактуальный контент на сайте — это не только лишний вес базы данных, но и снижение общей производительности. Чем больше записей и ревизий — тем дольше выполняются запросы к базе, медленнее работает админка. Кроме того, поисковые системы могут оценивать переизбыток устаревшей информации как негативный фактор.
Если регулярно не чистить черновики, спам-комментарии и старые ревизии, то база данных раздувается, что увеличивает нагрузку на сервер и время отклика сайта.
Автоматизация удаления контента позволяет экономить время и поддерживать сайт в оптимальном состоянии без постоянного ручного контроля.
Автоматическое удаление старых постов по дате публикации
Один из самых распространённых сценариев — удалять посты старше определённого срока, например, полугода или года. Это актуально для сайтов с быстро устаревающей информацией, новостных порталов или блогов с ограниченным сроком актуальности материалов.
Для этого можно использовать WP Cron и написать собственную функцию, которая будет запускаться по расписанию и удалять старые записи.
Пример кода для удаления постов старше 180 дней
function wpcodes_delete_old_posts() {
// Устанавливаем дату для удаления
$date_threshold = date('Y-m-d H:i:s', strtotime('-180 days'));
// Получаем ID постов старше 180 дней
$old_posts = get_posts([
'date_query' => [
[
'column' => 'post_date',
'before' => $date_threshold,
],
],
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1,
]);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true для полного удаления
}
}
}
// Регистрируем крон задачу
add_action('wpcodes_daily_cleanup', 'wpcodes_delete_old_posts');
// Планируем ежедневный запуск, если не запланирован
if (!wp_next_scheduled('wpcodes_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpcodes_daily_cleanup');
}Этот код регистрирует ежедневное задание, которое удаляет все опубликованные посты старше 180 дней без возможности восстановления.
Автоматическое удаление ревизий и черновиков
Другой важный аспект — это накопление ревизий и большого количества черновиков. Ревизии полезны, но слишком много их создаёт излишнюю нагрузку. Аналогично, черновики, которые не используются, занимают место.
Можно настроить удаление ревизий старше определённого времени и черновиков, которые не обновлялись долго.
Пример кода для удаления ревизий старше 7 дней
function wpcodes_delete_old_revisions() {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-7 days'));
$query = $wpdb->prepare(
"DELETE FROM $wpdb->posts WHERE post_type = 'revision' AND post_date < %s",
$date_threshold
);
$wpdb->query($query);
}
add_action('wpcodes_daily_cleanup', 'wpcodes_delete_old_revisions');Удаление черновиков старше 30 дней
function wpcodes_delete_old_drafts() {
$date_threshold = date('Y-m-d H:i:s', strtotime('-30 days'));
$old_drafts = get_posts([
'post_status' => 'draft',
'post_type' => 'post',
'date_query' => [
[
'column' => 'post_modified',
'before' => $date_threshold,
],
],
'fields' => 'ids',
'posts_per_page' => -1,
]);
if (!empty($old_drafts)) {
foreach ($old_drafts as $post_id) {
wp_delete_post($post_id, true);
}
}
}
add_action('wpcodes_daily_cleanup', 'wpcodes_delete_old_drafts');Эти функции вызываются в рамках того же ежедневного задания, что и удаление старых постов.
Использование плагинов для автоматизации очистки
Если вы не хотите писать код вручную, можно воспользоваться готовыми плагинами. Они позволяют настроить удаление старого контента через интерфейс и часто включают дополнительные возможности.
Плагин WP-Optimize
WP-Optimize — популярный плагин, который позволяет очищать базу данных от ревизий, спам-комментариев, черновиков и других ненужных данных. В настройках можно включить автоматическую очистку по расписанию.
Подробности и установка: WP-Optimize на WPSHOP
Плагин Advanced Database Cleaner
Этот плагин позволяет гибко управлять очисткой базы: удалять устаревшие данные, ревизии, транзиенты. Можно настроить удаление по расписанию и выбрать, что именно нужно удалять.
Подробнее: Advanced Database Cleaner на WPSHOP
Удаление старых комментариев и спама
Важный аспект — очистка базы от спам-комментариев и старых неактивных комментариев. Их накопление также увеличивает размер БД и замедляет сайт.
Можно использовать следующий код для удаления спам-комментариев старше 14 дней:
function wpcodes_delete_old_spam_comments() {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-14 days'));
$query = $wpdb->prepare(
"DELETE FROM $wpdb->comments WHERE comment_approved = 'spam' AND comment_date < %s",
$date_threshold
);
$wpdb->query($query);
}
add_action('wpcodes_daily_cleanup', 'wpcodes_delete_old_spam_comments');Так же можно очищать комментарии с определённым статусом или без активности.
Советы по безопасности и тестированию
Перед внедрением автоматической очистки обязательно сделайте резервную копию базы данных — чтобы избежать потери важных данных. Также рекомендуем сначала запускать функции в тестовом режиме — например, выводить список записей, которые будут удалены, вместо непосредственного удаления.
Для этого можно добавить флаг и условие, например:
$dry_run = true; // true - только просмотр, false - удаление
if (!$dry_run) {
wp_delete_post($post_id, true);
} else {
error_log('Будет удалён пост ID: ' . $post_id);
}Это поможет избежать ошибок и случайного удаления нужного контента.
Выводы
Автоматизация удаления старого контента — простой и эффективный способ поддерживать производительность и чистоту сайта на WordPress. Можно использовать собственный код с WP Cron или готовые плагины, такие как WP-Optimize и Advanced Database Cleaner. Важно тщательно тестировать и иметь резервные копии.
Такое решение особенно актуально для сайтов с большим количеством записей, новостных порталов и блогов, где устаревшая информация быстро теряет актуальность и должна своевременно удаляться.