Ведение блога на WordPress часто приводит к накоплению большого количества устаревших записей, которые уже не актуальны или занимают лишнее место в базе данных. Особенно это важно для сайтов с новостями, где актуальность информации быстро теряется. В этой статье мы подробно рассмотрим, как реализовать автоматическое удаление старых постов в WordPress на основе даты публикации, используя оптимальные методы без ущерба для производительности.
Почему важно удалять старые записи в WordPress
Удаление устаревшего контента помогает:
- Освободить место в базе данных, что ускоряет работу сайта;
- Поддерживать актуальность информации для посетителей;
- Уменьшить нагрузку на сервер при обработке запросов;
- Облегчить администрирование и организацию контента.
Ручное удаление старых записей – утомительный и рискованный процесс, особенно если записей много. Автоматизация – лучший способ решения этой задачи.
Как автоматически удалять старые записи с помощью WP-Cron
WordPress использует внутренний планировщик задач — WP-Cron, который позволяет запускать пользовательские функции по расписанию. Мы напишем функцию, которая будет удалять записи старше определённого количества дней, и запустим её по расписанию.
Создание функции удаления старых записей
Добавьте следующий код в файл functions.php вашей активной темы или в собственный плагин:
function wpbloger_delete_old_posts() {
$days = 180; // количество дней, старше которых посты будут удалены
$date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$args = array(
'date_query' => array(
array(
'before' => $date,
'inclusive' => true,
),
),
'post_type' => 'post',
'post_status' => 'publish',
'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); // true - удаляет безвозвратно
}
}
}
Функция wpbloger_delete_old_posts выберет все опубликованные записи старше 180 дней и удалит их без возможности восстановления.
Регистрация задачи в WP-Cron
Чтобы функция запускалась регулярно, например, раз в сутки, добавьте следующий код:
function wpbloger_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wpbloger_daily_old_posts_deletion')) {
wp_schedule_event(time(), 'daily', 'wpbloger_daily_old_posts_deletion');
}
}
add_action('wp', 'wpbloger_schedule_old_posts_deletion');
add_action('wpbloger_daily_old_posts_deletion', 'wpbloger_delete_old_posts');
Этот код проверяет, нет ли уже запланированного события, и если нет — создаёт ежедневное событие, которое запускает функцию удаления.
Как контролировать и настраивать процесс удаления
Если вы хотите изменить период удаления, просто замените значение переменной $days в функции на нужное количество дней. Например, для удаления записей старше 90 дней — $days = 90;.
Для безопасности можно изменить удаление на перемещение в корзину, заменив вызов wp_delete_post($post_id, true); на wp_trash_post($post_id);. Тогда записи можно будет восстановить из корзины.
Отслеживание результатов удаления
Чтобы отслеживать, сколько записей удаляется, можно добавить логирование в файл или отправку уведомлений на email. Пример простого логирования:
function wpbloger_delete_old_posts() {
$days = 180;
$date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$args = array(
'date_query' => array(
array('before' => $date, 'inclusive' => true),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($args);
$deleted_count = 0;
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
if (wp_delete_post($post_id, true)) {
$deleted_count++;
}
}
}
if ($deleted_count > 0) {
error_log("WPBloger: Удалено $deleted_count старых записей.");
}
}
Логи можно просмотреть в файле wp-content/debug.log, если включено логирование ошибок.
Использование плагинов для автоматизации удаления старого контента
Если вы предпочитаете готовые решения, обратите внимание на следующие плагины:
- Bulk Delete — позволяет удалять записи по разным критериям, включая дату публикации. Умеет работать по расписанию.
- Auto Delete Posts — автоматизирует удаление записей старше заданного возраста, прост в настройке.
Оба плагина можно найти на официальном репозитории WordPress, а также на wpshop.ru с подробными обзорами и инструкциями.
Преимущества собственного кода над плагинами
Собственное решение легче адаптировать под специфические задачи, не загружать сайт лишними функциями и избежать конфликтов с другими плагинами. Кроме того, оно даёт полный контроль и прозрачность.
Заключение
Автоматическое удаление старых записей помогает поддерживать порядок и производительность сайта на WordPress. Используйте WP-Cron и собственный код для гибкой настройки или выбирайте проверенные плагины, если нужен быстрый старт. В любом случае, регулярный аудит контента и грамотное управление устаревшими постами — залог стабильной работы и удобства для посетителей.