Ведение сайта на WordPress нередко сопровождается накоплением большого количества устаревших записей, которые уже не актуальны. Это может создавать нагрузку на базу данных и замедлять работу сайта. В этой статье мы разберем, как автоматизировать удаление старых записей по дате публикации, используя кастомные функции и популярные плагины. Такой подход позволит поддерживать ваш сайт в оптимальном состоянии без лишних усилий.
Почему важно удалять старые записи в WordPress
Удаление устаревших записей помогает:
- Снизить нагрузку на базу данных, что положительно влияет на скорость загрузки страниц.
- Упростить администрирование сайта, оставив только актуальный контент.
- Улучшить восприятие сайта посетителями и поисковыми системами.
Автоматизация этого процесса позволяет не тратить время на ручную очистку и минимизирует вероятность ошибок.
Как настроить автоматическое удаление записей по дате с помощью кода
Для автоматизации удаления мы используем WP-Cron — встроенную систему планировщика задач. Ниже пример функции wpguest_auto_delete_old_posts(), которая удаляет записи старше 180 дней, и регистрацию задачи планировщика.
function wpguest_auto_delete_old_posts() {
$days = 180; // Количество дней до удаления
$date_query = array(
'column' => 'post_date',
'before' => date('Y-m-d H:i:s', strtotime("-{$days} days")),
'inclusive' => true,
);
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array($date_query),
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // Полное удаление
}
}
}
// Планируем событие, если оно еще не запланировано
if (!wp_next_scheduled('wpguest_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpguest_daily_delete_old_posts');
}
// Хук для запуска функции
add_action('wpguest_daily_delete_old_posts', 'wpguest_auto_delete_old_posts');
Этот код добавьте в файл functions.php вашей темы или в отдельный плагин. Он будет запускать удаление один раз в сутки.
Разбор кода и рекомендации
Запрос get_posts() получает ID всех опубликованных записей старше 180 дней. Затем каждая запись удаляется безвозвратно через wp_delete_post с параметром true, что позволяет избежать попадания в корзину. Если вам нужна корзина, замените параметр на false.
Учитывайте, что при большом количестве записей выполнение задачи может занять время. Для очень больших сайтов стоит реализовать удаление пакетами.
Использование плагинов для автоматического удаления старых записей
Если вы предпочитаете готовое решение, можно использовать плагины с гибкими настройками:
- Auto Post Delete — позволяет настроить удаление записей по дате, категории или статусу. Имеет удобный интерфейс и поддерживает планирование задач.
- WP Bulk Delete — мощный инструмент для выборочного массового удаления записей, страниц, пользователей и т.д. Можно задать условия по дате, таксономиям и метаданным.
Оба плагина можно скачать с официального репозитория WordPress и дополнительно настроить по своему усмотрению.
Пример настройки WP Bulk Delete для удаления старых постов
После установки и активации:
- Перейдите в меню WP Bulk Delete > Delete Posts.
- Выберите опцию Delete posts older than и укажите количество дней (например, 180).
- Можно дополнительно задать категории или метки, чтобы не удалять важные записи.
- Настройте расписание для автоматического запуска задачи.
- Сохраните настройки и запустите тестовое удаление.
Плагин имеет удобный интерфейс и не требует знания кода — идеально для тех, кто хочет быстро внедрить автоматизацию.
Как избежать удаления важных записей
При автоматическом удалении всегда есть риск случайно удалить нужный контент. Вот несколько советов для защиты важных записей:
- Используйте кастомные поля или метки для пометки важных записей, чтобы исключать их из выборки.
- Настройте категории — например, не удаляйте записи из категории «Архив» или «Вечнозеленый контент».
- Делайте резервные копии перед запуском автоматического удаления, чтобы при ошибке можно было восстановить данные.
В коде пример с использованием meta_query для исключения записей с кастомным полем wpguest_protected:
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array($date_query),
'meta_query' => array(
array(
'key' => 'wpguest_protected',
'compare' => 'NOT EXISTS',
),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
Полезные рекомендации и выводы
Автоматизация удаления старых записей — важный инструмент оптимизации сайта на WordPress. Для небольших проектов достаточно простого кода с WP-Cron. Для более крупных или сложных сайтов рекомендуются специализированные плагины с расширенными настройками.
Обязательно тестируйте код и настройки на тестовом сайте перед применением на боевом. Всегда делайте резервные копии базы данных и файлов.
Если хотите более продвинутую автоматизацию с дополнительными функциями, посмотрите на плагины от WPSHOP, они часто обновляются и поддерживаются профессионалами.