Ведение сайта на WordPress часто сопровождается накоплением большого количества контента, который со временем может устаревать и терять актуальность. Для поддержания чистоты базы данных и оптимизации работы сайта полезно автоматизировать процесс удаления такого контента. В этой статье разберем, как настроить автоматическое удаление старых записей и постов на WordPress с помощью как кода, так и готовых плагинов.
Почему важно удалять старый контент в WordPress
С течением времени на сайте накапливаются устаревшие материалы, которые могут:
- Загромождать базу данных, замедляя работу сайта.
- Вводить пользователей в заблуждение устаревшей информацией.
- Отрицательно влиять на SEO, так как поисковые системы ценят актуальные страницы.
Автоматизация удаления старых записей поможет поддерживать сайт в актуальном состоянии без постоянного ручного контроля.
Настройка автоматического удаления записей через код
Использование wp-cron для регулярной проверки и удаления
WordPress предоставляет встроенный механизм планировщика задач — wp-cron. С его помощью можно настроить периодическую проверку и удаление записей, старше определённого периода. Рассмотрим пример кода с префиксом функций wpcatalog_, который удаляет записи старше 180 дней.
function wpcatalog_delete_old_posts() {
global $wpdb;
$days = 180; // количество дней
$date = date('Y-m-d H:i:s', strtotime("-{$days} days"));
// Получаем ID записей старше $days дней
$old_posts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_date < %s AND post_status = 'publish' AND post_type = 'post'",
$date
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true - без перемещения в корзину
}
}
}
// Регистрируем событие при активации темы или плагина
function wpcatalog_setup_cron() {
if (!wp_next_scheduled('wpcatalog_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpcatalog_daily_cleanup');
}
}
add_action('wp', 'wpcatalog_setup_cron');
// Привязываем функцию к событию
add_action('wpcatalog_daily_cleanup', 'wpcatalog_delete_old_posts');
// Удаляем событие при деактивации
function wpcatalog_remove_cron() {
$timestamp = wp_next_scheduled('wpcatalog_daily_cleanup');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpcatalog_daily_cleanup');
}
}Этот код проверяет ежедневно публикации и удаляет те, что старше 180 дней. Его можно добавить в functions.php вашей темы или оформить в виде плагина. При необходимости можно изменить период удаления, заменив значение переменной $days.
Удаление постов по определённым таксономиям или меткам
Иногда нужно удалять только устаревший контент определённого типа — например, новости или обзоры. Для этого можно добавить дополнительную проверку по таксономиям:
function wpcatalog_delete_old_news() {
$days = 90;
$date = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => [
[
'before' => $date
]
],
'tax_query' => [
[
'taxonomy' => 'category',
'field' => 'slug',
'terms' => ['news']
]
],
'fields' => 'ids',
'nopaging' => true
];
$query = new WP_Query($args);
if (!empty($query->posts)) {
foreach ($query->posts as $post_id) {
wp_delete_post($post_id, true);
}
}
}Такой подход позволяет гибко управлять удалением контента, ориентируясь на конкретные категории или метки.
Плагины для автоматического удаления старого контента
Плагин WP Bulk Delete
WP Bulk Delete — популярный плагин для массового удаления записей, страниц и пользовательских типов постов по различным критериям: дата, категория, статус и т.д. Он поддерживает расписания, что позволяет настроить автоматическую очистку.
Особенности:
- Удаление по возрасту постов
- Удаление по категории, тегам, статусу
- Настройка расписания удалений
- Удаление метаданных и комментариев вместе с постами
Плагин доступен в официальном репозитории WordPress и легко настраивается через админку.
Использование Clearfy Pro для управления контентом
Clearfy Pro — мощный плагин для оптимизации и настройки WordPress, в том числе для очистки базы данных. В нем есть функции удаления устаревших ревизий, черновиков и мусора, что косвенно помогает поддерживать актуальность контента.
Подробнее о Clearfy Pro можно узнать на официальной странице плагина.
Практические советы по безопасности и резервному копированию
Перед автоматическим удалением контента всегда делайте резервные копии базы данных и файлов сайта. Это позволит восстановить удалённые данные в случае ошибки. Для резервного копирования можно использовать плагины, например, UpdraftPlus или встроенные решения хостинга.
Рекомендуется также тестировать код удаления на тестовом сайте, чтобы избежать случайной потери нужной информации.
Как настроить уведомления о выполнении удаления
Для контроля процесса полезно получать уведомления после выполнения задачи. В wp-cron можно добавить отправку письма администратору:
function wpcatalog_delete_old_posts() {
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_date < %s AND post_status = 'publish' AND post_type = 'post'",
$date
));
$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) {
wp_mail(get_option('admin_email'), 'Удаление старого контента', "Удалено {$deleted_count} записей, старше {$days} дней.");
}
}Так вы будете в курсе, когда и сколько записей удалено.
Выводы и рекомендации
Автоматическое удаление устаревшего контента — важный инструмент поддержания здоровья сайта на WordPress. С помощью wp-cron и простого кода можно настроить гибкую систему очистки, а плагины вроде WP Bulk Delete упростят задачу для пользователей без навыков программирования.
Обязательно соблюдайте меры предосторожности: регулярно делайте резервные копии и тестируйте любые изменения на локальной или тестовой версии сайта.
Таким образом, поддержание актуальности контента не станет рутинной задачей и поможет улучшить производительность и SEO вашего сайта.