Ведение блога или сайта на WordPress со временем приводит к накоплению большого количества контента. Иногда возникает необходимость автоматически удалять устаревшие записи, чтобы поддерживать актуальность сайта и не перегружать базу данных. В этой статье разберём, как настроить автоматическое удаление старых постов в WordPress с помощью собственного кода и рассмотрим варианты с использованием плагинов.
Почему важно удалять старые посты в WordPress
Удаление устаревшего контента помогает:
- Уменьшить объём базы данных, что положительно влияет на производительность сайта.
- Поддерживать актуальность информации для посетителей и улучшать SEO.
- Избежать путаницы с устаревшими материалами, которые могут вводить пользователей в заблуждение.
Однако удалять записи вручную неудобно, особенно если их много. Автоматизация этого процесса — оптимальное решение.
Автоматическое удаление старых постов с помощью кода
Для автоматизации удаления старых записей можно использовать крон-задачи WordPress. Пример ниже показывает, как создать функцию, которая удаляет публикации старше установленного количества дней, и как запустить её по расписанию.
Создание функции для удаления старых постов
function wpaddons_delete_old_posts() {
$days = 180; // Удалять посты старше 180 дней
$args = [
'date_query' => [
[
'column' => 'post_date',
'before' => "$days days ago",
],
],
'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 – удаление без возможности восстановления
}
}
}В этой функции мы ищем все опубликованные записи старше 180 дней и удаляем их без перемещения в корзину.
Добавление крон-задачи для автоматизации
Чтобы функция запускалась автоматически, зарегистрируем крон-событие при инициализации темы или плагина:
function wpaddons_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wpaddons_daily_old_posts_deletion')) {
wp_schedule_event(time(), 'daily', 'wpaddons_daily_old_posts_deletion');
}
}
add_action('wp', 'wpaddons_schedule_old_posts_deletion');
add_action('wpaddons_daily_old_posts_deletion', 'wpaddons_delete_old_posts');Этот код запланирует запуск функции wpaddons_delete_old_posts ежедневно.
Настройка параметров удаления
Вы можете легко изменять период, по истечении которого посты удаляются, меняя переменную $days в функции. Также можно адаптировать код для удаления постов с определёнными категориями или метками, добавив соответствующие параметры в запрос.
Например, чтобы удалять посты только из категории с ID 5, можно добавить:
'category__in' => [5],в массив аргументов $args.
Использование плагинов для удаления старого контента
Если вы не хотите писать код, существуют плагины, которые позволяют автоматизировать удаление старых записей. Вот несколько популярных решений:
- Auto Delete Posts — позволяет настроить автоматическое удаление постов по возрасту, по типу записи и другим параметрам.
- WP Bulk Delete — мощный инструмент для массового удаления записей, страниц, пользователей и мета-данных с гибкими условиями.
Для примера рассмотрим настройку WP Bulk Delete:
- Установите и активируйте плагин.
- Перейдите в меню «WP Bulk Delete» в админке.
- Выберите «Delete Posts by Date».
- Укажите дату, до которой посты будут удалены.
- Настройте расписание, чтобы удаление происходило автоматически.
Плагин также позволяет удалять посты по категориям, статусам и пользовательским полям.
Советы по безопасности и резервному копированию
Перед автоматическим удалением контента обязательно делайте резервные копии базы данных. Если вы используете хостинг с поддержкой, можно настроить автоматические бэкапы. Также полезно использовать плагин, например, Clearfy Pro, который помогает оптимизировать и защитить сайт.
Если вы реализуете удаление через код, рекомендуем сначала тестировать на копии сайта. Кроме того, для критичных сайтов можно менять удаление на перемещение постов в черновики или в отдельную категорию, чтобы иметь возможность восстановить данные.
Расширение: автоматическое удаление старых черновиков и ревизий
Помимо опубликованных постов, стоит очищать базу от старых черновиков и ревизий, которые тоже занимают место.
function wpaddons_delete_old_revisions_and_drafts() {
global $wpdb;
// Удаляем ревизии старше 30 дней
$wpdb->query(
"DELETE FROM $wpdb->posts WHERE post_type = 'revision' AND post_modified < DATE_SUB(NOW(), INTERVAL 30 DAY)"
);
// Удаляем черновики старше 60 дней
$args = [
'post_status' => 'draft',
'date_query' => [
[
'column' => 'post_date',
'before' => '60 days ago',
],
],
'posts_per_page' => -1,
'fields' => 'ids',
];
$old_drafts = get_posts($args);
if (!empty($old_drafts)) {
foreach ($old_drafts as $post_id) {
wp_delete_post($post_id, true);
}
}
}
add_action('wpaddons_daily_old_posts_deletion', 'wpaddons_delete_old_revisions_and_drafts');Этот код расширяет функциональность и позволяет держать базу данных в чистоте.