Со временем на любом сайте WordPress накапливаются устаревшие записи, которые больше не актуальны и загромождают базу данных. Чтобы поддерживать сайт в хорошем состоянии, полезно настроить автоматическое удаление таких постов по определённым правилам. В этой статье рассмотрим, как реализовать это с помощью собственного кода и ознакомимся с полезными плагинами для расширения функционала.
Почему важно удалять старые записи в WordPress
Старые записи могут негативно влиять на производительность сайта, особенно если речь идёт о большом количестве контента. Они занимают место в базе данных, замедляют запросы и усложняют администрирование. Кроме того, если записи устарели и не приносят ценности посетителям, их стоит удалить или архивировать.
Автоматизация этого процесса позволяет избежать ручной чистки и снижает риск накопления мусора. Правильно настроенный скрипт или плагин помогут своевременно удалять или переносить в архив старые публикации без лишних усилий.
Настройка автоматического удаления старых записей через код
Для начала рассмотрим простой пример, как реализовать удаление записей старше определённого числа дней с помощью планировщика WordPress (WP-Cron). В нашем примере будем удалять все записи (типа post), опубликованные более 365 дней назад.
function wpset_delete_old_posts() {
global $wpdb;
$days = 365; // Количество дней
$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 = %s AND post_status = 'publish' AND post_date < %s",
'post', $date
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // Удаляем без возможности восстановления
}
}
}
// Регистрируем событие, если ещё не зарегистрировано
if (!wp_next_scheduled('wpset_cron_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpset_cron_delete_old_posts');
}
// Хук на выполнение
add_action('wpset_cron_delete_old_posts', 'wpset_delete_old_posts');Этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин. Он создаёт ежедневное событие, которое будет запускать функцию удаления старых постов. Важно использовать wp_delete_post с параметром true, чтобы удаление было полным, а не перемещением в корзину.
Как изменить условия удаления и типы записей
Вы можете легко адаптировать код под свои нужды. Например, изменить количество дней, тип записей (например, 'product' для WooCommerce), или добавить дополнительные условия по таксономиям или метаполям.
Пример фильтрации по категории:
"SELECT ID FROM $wpdb->posts p
JOIN $wpdb->term_relationships tr ON (p.ID = tr.object_id)
JOIN $wpdb->term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id)
JOIN $wpdb->terms t ON (tt.term_id = t.term_id)
WHERE p.post_type = %s
AND p.post_status = 'publish'
AND p.post_date < %s
AND t.slug = %s"Такой запрос удалит старые записи только из определённой категории.
Использование плагинов для автоматизации удаления старых записей
Если вы не хотите работать с кодом, можно воспользоваться готовыми плагинами, которые позволяют автоматизировать удаление или архивирование контента.
Плагин «Auto Delete Old Posts»
Один из популярных плагинов для этой задачи — Auto Delete Old Posts. Он даёт возможность настраивать удаление по типу записи, таксономиям, статусу и возрасту записи.
Плюсы плагина:
- Удобный интерфейс для настройки;
- Поддержка различных типов записей и категорий;
- Журнал удалённых записей;
- Возможность исключения важных постов.
Плагин «WP Bulk Delete»
Другой мощный инструмент — WP Bulk Delete. Он позволяет гибко настраивать массовое удаление по множеству условий — дата, статус, кастомные поля, таксономии и др.
Особенности:
- Удаление по расписанию;
- Фильтрация по произвольным параметрам;
- Поддержка кастомных типов записей;
- Лёгкая интеграция с WP-Cron.
Как избежать потери важных данных при автоматическом удалении
Очень важно правильно настроить фильтры, чтобы не удалить нужный контент. Рекомендуется:
- Создавать резервные копии базы данных перед запуском автоматизации;
- Использовать черный список ID или категорий для исключения;
- Тестировать скрипты на тестовом сайте;
- Проверять логи удалений, если плагин предоставляет такую возможность.
Если вы хотите временно не удалять записи, можно добавить дополнительное метаполе «не удалять» и в коде проверять его наличие.
function wpset_delete_old_posts() {
global $wpdb;
$days = 365;
$date = 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->postmeta pm ON (p.ID = pm.post_id AND pm.meta_key = '_dont_delete') WHERE p.post_type = %s AND p.post_status = 'publish' AND p.post_date < %s AND pm.post_id IS NULL",
'post', $date
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
}
}
}Интеграция с плагином Clearfy Pro для оптимизации
Если вы используете плагин Clearfy Pro, он предлагает встроенные инструменты для очистки базы данных и удаления устаревших элементов. Совместно с нашим кодом или другими плагинами, Clearfy поможет комплексно оптимизировать сайт.
Clearfy позволяет планировать автоматическую очистку, удалять ревизии, спам-комментарии, transient и многое другое, что дополнительно ускорит работу WordPress.
Выводы и рекомендации
Автоматическое удаление старых записей — важный инструмент поддержания здоровья сайта и базы данных. Можно реализовать его с помощью кастомного кода, используя WP-Cron, или подобрать один из специализированных плагинов, таких как Auto Delete Old Posts или WP Bulk Delete.
Главное — правильно настроить фильтры и делать резервные копии перед массовыми удалениями. Внедряйте автоматизацию постепенно, внимательно следите за результатом и используйте дополнительные инструменты оптимизации, например Clearfy Pro.