Ведение сайта на WordPress часто сопровождается накоплением большого объема контента, который со временем становится неактуальным или устаревшим. Ручное удаление таких материалов — трудоемкий процесс, особенно если их сотни или тысячи. В этой статье мы рассмотрим, как можно автоматизировать удаление старого контента в WordPress с помощью кода и специализированных плагинов.
Почему важно удалять старый контент в WordPress
Удаление устаревших постов и страниц помогает:
- Поддерживать актуальность сайта и улучшать пользовательский опыт.
- Снижать нагрузку на базу данных и ускорять работу сайта.
- Избегать дублирующего и нерелевантного контента, что положительно влияет на SEO.
Однако важно подходить к этому процессу аккуратно, чтобы не потерять важную информацию.
Автоматизация удаления контента с помощью WP Cron и пользовательского кода
WordPress имеет встроенную систему планировщика задач — WP Cron. С её помощью можно запланировать регулярное выполнение функций, например, удаления постов старше определенного возраста.
Создаем функцию для удаления постов старше 1 года
Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин:
function wpexperts_delete_old_posts() {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-1 year'));
$query = $wpdb->prepare(
"DELETE p, tr, pm FROM {$wpdb->posts} p
LEFT JOIN {$wpdb->term_relationships} tr ON (p.ID = tr.object_id)
LEFT JOIN {$wpdb->postmeta} pm ON (p.ID = pm.post_id)
WHERE p.post_type = 'post' AND p.post_date < %s",
$date_threshold
);
$wpdb->query($query);
}
// Планируем событие, если оно не запланировано
if (!wp_next_scheduled('wpexperts_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpexperts_daily_cleanup');
}
// Добавляем хук для выполнения
add_action('wpexperts_daily_cleanup', 'wpexperts_delete_old_posts');Этот код удаляет все записи типа post, которые старше года, включая связанные таксономии и метаданные. Мы используем SQL-запрос для более эффективной очистки.
Как отключить автоматическое удаление
Если нужно остановить автоматическое удаление, удалите запланированное событие:
function wpexperts_deactivate_cleanup() {
$timestamp = wp_next_scheduled('wpexperts_daily_cleanup');
wp_unschedule_event($timestamp, 'wpexperts_daily_cleanup');
}
register_deactivation_hook(__FILE__, 'wpexperts_deactivate_cleanup');Использование плагинов для автоматического удаления старого контента
Если вы не хотите писать код, можно воспользоваться готовыми плагинами. Рассмотрим несколько популярных:
1. Auto Delete Posts
Плагин позволяет настроить удаление постов по различным правилам, включая возраст публикации, категории и статусы. Можно настроить расписание и фильтры через удобный интерфейс.
Плюсы:
- Простая настройка без знаний кода.
- Гибкие условия удаления.
- Поддержка удаления страниц и кастомных типов записей.
Минусы:
- Может конфликтовать с другими плагинами, управляющими постами.
2. Post Expirator
Этот плагин позволяет ставить дату истечения на отдельные записи и автоматически их удалять или менять статус.
Плюсы:
- Подходит для постов с заранее известным сроком жизни.
- Можно менять статус на черновик, удалять или переносить в архив.
Минусы:
- Не подходит для массового удаления старого контента без даты истечения.
3. Clearfy Pro — инструмент для оптимизации и очистки
В состав Clearfy Pro входит функция очистки базы данных и удаления старых ревизий, черновиков и спама, что косвенно помогает очистить сайт от ненужного контента.
Плюсы:
- Комплексное решение для оптимизации.
- Встроенные инструменты безопасности и производительности.
Безопасность и резервное копирование перед удалением
Перед автоматическим удалением контента обязательно настройте регулярное резервное копирование сайта. Это позволит восстановить данные в случае ошибки или удаления важных материалов.
Рекомендуемые плагины для бэкапа:
Как расширить функциональность удаления по своим правилам
Можно адаптировать функцию удаления под свои задачи, например:
- Удалять посты только из определенных категорий.
- Исключать важные записи по ID или меткам.
- Удалять старые страницы, кастомные типы записей или вложения.
Пример фильтрации по категории и исключению по ID
function wpexperts_delete_old_posts_filtered() {
$date_threshold = date('Y-m-d H:i:s', strtotime('-6 months'));
$excluded_ids = array(12, 34); // ID постов, которые не удалять
$args = array(
'post_type' => 'post',
'date_query' => array(
array('before' => $date_threshold),
),
'category_name' => 'news',
'post__not_in' => $excluded_ids,
'posts_per_page' => -1,
'fields' => 'ids',
'post_status' => 'publish',
);
$old_posts = get_posts($args);
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true для полного удаления
}
}
add_action('wpexperts_daily_cleanup', 'wpexperts_delete_old_posts_filtered');Этот код удалит все опубликованные посты из категории news, старше 6 месяцев, кроме тех, которые указаны в исключениях.
Обзор и рекомендации
Автоматизация удаления старого контента в WordPress — мощный инструмент для поддержания чистоты и производительности сайта. Если вы готовы работать с кодом, WP Cron и кастомные функции дадут гибкость и контроль. Если нет — используйте проверенные плагины, например, Auto Delete Posts или Post Expirator.
Не забывайте о резервном копировании и тестировании на тестовом стенде перед запуском на живом сайте.
Также рассмотрите возможность использования тем Reboot для оптимизации работы сайта после удаления большого количества контента.