Ведение сайта на WordPress часто приводит к накоплению большого объема устаревшего контента — старых записей, которые больше не актуальны, и могут мешать SEO или перегружать базу данных. В этой статье мы подробно разберем, как автоматизировать процесс удаления такого контента, используя кастомные решения и популярные плагины. Мы покажем примеры кода и объясним, как безопасно настроить удаление без риска потери важных данных.
Почему важно удалять старый контент в WordPress
С течением времени на сайте накапливаются записи, которые уже не несут ценности для посетителей. Это может быть:
- Старые новости и объявления;
- Акции и предложения, которые давно закончились;
- Записи с неактуальной информацией;
- Технический или тестовый контент, забытый после разработки.
Удаление такого контента помогает:
- Улучшить SEO, избавившись от дублированных и нерелевантных страниц;
- Снизить нагрузку на базу данных и сервер;
- Сделать админпанель чище и удобнее для навигации.
Однако ручное удаление — это долго и неудобно, особенно если старого контента много. Поэтому логично автоматизировать этот процесс.
Автоматическое удаление старых записей с помощью WP-Cron и кастомного кода
Самый гибкий способ — написать свой код, который будет удалять записи старше определенного количества дней. Для этого используем возможности WP-Cron — встроенного планировщика задач в WordPress.
Создаем функцию удаления старых записей
Ниже пример функции, которая удаляет все записи типа post, опубликованные более 180 дней назад:
function wpboot_delete_old_posts() {
global $wpdb;
$days = 180; // число дней для хранения
$date = date('Y-m-d H:i:s', strtotime("-" . $days . " days"));
// Получаем ID постов, старше указанной даты
$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
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true - удаление без корзины
}
}
}Эта функция напрямую выполняет запрос к базе, чтобы найти устаревшие посты, а затем удаляет их без возможности восстановления из корзины.
Регистрируем задачу в WP-Cron
Чтобы функция выполнялась автоматически, нужно зарегистрировать событие в планировщике:
function wpboot_schedule_old_posts_cleanup() {
if (!wp_next_scheduled('wpboot_cleanup_old_posts_event')) {
wp_schedule_event(time(), 'daily', 'wpboot_cleanup_old_posts_event');
}
}
add_action('wp', 'wpboot_schedule_old_posts_cleanup');
add_action('wpboot_cleanup_old_posts_event', 'wpboot_delete_old_posts');Здесь мы планируем запуск функции wpboot_delete_old_posts один раз в день.
Отмена задачи при деактивации плагина или темы
Если код добавлен в плагин или тему, важно корректно очистить запланированное событие, чтобы не оставлять мусор:
function wpboot_clear_scheduled_old_posts_cleanup() {
$timestamp = wp_next_scheduled('wpboot_cleanup_old_posts_event');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpboot_cleanup_old_posts_event');
}
}
register_deactivation_hook(__FILE__, 'wpboot_clear_scheduled_old_posts_cleanup');Использование плагина для автоматического удаления старого контента
Если писать код неудобно, можно использовать готовые решения. Один из популярных плагинов для удаления устаревших записей — Bulk Delete. Он позволяет настроить удаление по разным параметрам, в том числе по дате публикации.
Настройка Bulk Delete для удаления старых постов
- Установите и активируйте плагин Bulk Delete.
- Перейдите в Bulk Delete → Delete Posts.
- Выберите тип постов (например, «Posts»).
- В разделе «Delete posts older than» укажите число дней (например, 180).
- Настройте расписание удаления (ежедневно, еженедельно и т.д.).
- Сохраните и запустите задачу.
Плагин также поддерживает удаление по категориям, тегам, мета-данным и пользовательским полям, что дает гибкие возможности для фильтрации.
Как обезопасить процесс удаления старого контента
При автоматическом удалении важно не потерять нужный материал. Вот несколько рекомендаций:
- Резервное копирование. Перед настройкой автоматического удаления обязательно делайте резервную копию базы данных и файлов сайта.
- Тестирование на копии. Попробуйте сначала на тестовом сайте, чтобы убедиться, что удаляются только нужные записи.
- Журнал действий. В код можно добавить запись в лог, чтобы отслеживать, какие посты были удалены.
- Использование корзины. Можно изменить функцию удаления, чтобы посты сначала попадали в корзину, а не удалялись сразу, например, вызвав
wp_trash_post($post_id);вместоwp_delete_post($post_id, true);.
Пример ведения лога удаленных записей
function wpboot_delete_old_posts_with_log() {
global $wpdb;
$days = 180;
$date = 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 = 'post' AND post_status = 'publish' AND post_date < %s",
$date
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
$title = get_the_title($post_id);
wp_delete_post($post_id, true);
error_log("[WPBOOT] Deleted post ID: $post_id, Title: $title");
}
}
}В логе PHP (обычно error_log) вы увидите информацию о каждом удаленном посте, что поможет отследить процесс.
Удаление старого контента других типов и кастомных постов
Аналогичный подход можно применить для удаления старых страниц, вложений, или кастомных типов записей. Просто измените параметр post_type в запросе.
// Пример удаления старых страниц
function wpboot_delete_old_pages() {
global $wpdb;
$days = 365; // для страниц можно задать больше дней
$date = date('Y-m-d H:i:s', strtotime("-" . $days . " days"));
$old_pages = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_type = 'page' AND post_status = 'publish' AND post_date < %s",
$date
));
if (!empty($old_pages)) {
foreach ($old_pages as $page_id) {
wp_delete_post($page_id, true);
}
}
}Также для кастомных типов записей замените 'page' или 'post' на ваш slug типа записи.
Выводы и рекомендации
Автоматическое удаление старого контента — важный инструмент для поддержания сайта в актуальном состоянии. Использование WP-Cron с собственным кодом дает максимальный контроль, а плагины — простоту и удобство. В любом случае важно внимательно настраивать условия удаления и всегда иметь резервную копию сайта.
Настройте систему под свои нужды, учитывайте специфику сайта и типы контента, чтобы процесс удаления приносил пользу и не вызывал проблем.