Ведение сайта на WordPress требует регулярного обновления контента и поддержания его актуальности. Со временем на сайте может скапливаться большое количество устаревших или нерелевантных записей, которые влияют на производительность и SEO. В этой статье разберём, как настроить автоматическое удаление старого контента в WordPress с помощью кода и плагинов, чтобы облегчить администрирование и поддерживать сайт в порядке.
Почему важно удалять старый контент в WordPress
Старый контент может негативно повлиять на скорость загрузки сайта, увеличить размер базы данных и снизить качество пользовательского опыта. Поисковые системы также могут снизить рейтинг сайта, если найдут много неактуальных или дублированных материалов. Автоматизация удаления помогает:
- Поддерживать базу данных в оптимальном состоянии.
- Избавляться от неактуальной информации без ручного контроля.
- Повысить безопасность, удаляя старые записи, которые могут быть уязвимы.
- Сэкономить время на администрирование сайта.
Как реализовать автоматическое удаление контента с помощью WP-Cron
WP-Cron — встроенная система планировщика задач в WordPress, которая позволяет запускать события с определённой периодичностью. Мы создадим задачу, которая будет раз в сутки удалять записи старше определённого времени.
Шаг 1. Создаём функцию для удаления старых записей
Добавьте следующий код в файл functions.php вашей темы или в собственный плагин:
function wp_pro_delete_old_posts() {
$args = array(
'date_query' => array(
array(
'column' => 'post_date',
'before' => '90 days ago', // Удаляем посты старше 90 дней
),
),
'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 — удалять без перехода в корзину
}
}
}Эта функция выберет все опубликованные записи старше 90 дней и удалит их без возможности восстановления из корзины.
Шаг 2. Регистрируем событие WP-Cron
Добавьте следующий код, чтобы создать задачу, вызывающую функцию ежедневно:
function wp_pro_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wp_pro_delete_old_posts_hook')) {
wp_schedule_event(time(), 'daily', 'wp_pro_delete_old_posts_hook');
}
}
add_action('wp', 'wp_pro_schedule_old_posts_deletion');
add_action('wp_pro_delete_old_posts_hook', 'wp_pro_delete_old_posts');Теперь WordPress будет запускать функцию удаления старого контента один раз в сутки.
Шаг 3. Удаление задачи при деактивации плагина или темы
Чтобы не оставлять «мусор» в WP-Cron, добавьте очистку при деактивации:
function wp_pro_clear_old_posts_deletion_schedule() {
$timestamp = wp_next_scheduled('wp_pro_delete_old_posts_hook');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wp_pro_delete_old_posts_hook');
}
}
register_deactivation_hook(__FILE__, 'wp_pro_clear_old_posts_deletion_schedule');Использование плагинов для автоматизации удаления старого контента
Если вы не хотите писать код вручную, можно воспользоваться готовыми плагинами, которые обеспечивают похожий функционал с удобным интерфейсом.
Плагин WP Auto Delete Posts
Один из популярных плагинов, позволяющий автоматически удалять записи и страницы по возрасту. Его возможности:
- Настройка возраста контента для удаления.
- Выбор типов записей (посты, страницы, кастомные типы).
- Фильтрация по категориям и тегам.
- Мягкое удаление (в корзину) или полное удаление.
Плагин можно скачать с официального сайта WPShop.
Плагин Clearfy для оптимизации и очистки
Clearfy Pro — многофункциональный плагин, который среди прочих функций умеет очищать базу данных от устаревших данных, включая старые записи, ревизии и временные данные. Он удобен для комплексной оптимизации вашего сайта.
Подробно о Clearfy Pro и его возможностях читайте на странице плагина.
Дополнительные советы по автоматизации работы с контентом
Используйте кастомные типы записей
Если у вас есть специфический контент, который нужно удалять по своим правилам, создайте отдельный тип записи и добавьте в функцию фильтр по post_type. Это позволит гибко управлять разными типами контента.
Логирование удалений
Для контроля над процессом полезно добавить логирование. Например, сохранять ID удалённых записей в файл или отправлять уведомления на email.
function wp_pro_delete_old_posts_with_log() {
$args = array(
'date_query' => array(
array('column' => 'post_date', 'before' => '90 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);
error_log("Удалён пост ID: $post_id");
}
}
}Используйте WP-CLI для массовых операций
Если у вас есть доступ к командной строке на сервере, WP-CLI — отличный инструмент для массового удаления записей. Например, команда для удаления постов старше 90 дней:
wp post delete $(wp post list --post_type=post --format=ids --date_query='before=90 days ago')Это особенно удобно для разовых чисток.
Заключение
Автоматическое удаление старого контента в WordPress — важный аспект поддержания сайта в актуальном состоянии и оптимизации производительности. Используя WP-Cron или специализированные плагины, вы сможете эффективно управлять устаревшими записями без лишних усилий. Не забывайте тщательно тестировать любые автоматизации на тестовом сайте, чтобы избежать потери нужного контента.