Владельцы сайтов на WordPress часто сталкиваются с проблемой накопления ненужного или устаревшего контента: старые записи, ревизии, черновики и даже устаревшие медиафайлы могут замедлять работу сайта и загромождать базу данных. В этой статье мы подробно разберем, как настроить автоматическое удаление старого контента на вашем сайте WordPress, используя как готовые плагины, так и собственные кодовые решения.
Почему важно удалять старый контент и как он влияет на сайт
Накопление старого контента может приводить к нескольким проблемам:
- Увеличение размера базы данных, что замедляет запросы и делает резервные копии более громоздкими.
- Низкая релевантность для пользователей и поисковых систем, если устаревшие записи больше не актуальны.
- Перегрузка интерфейса админки, усложняющая управление сайтом.
Автоматизация процесса удаления позволяет поддерживать сайт в чистоте без постоянного ручного контроля.
Использование плагинов для автоматического удаления старого контента
Для большинства пользователей удобным решением станет использование специализированных плагинов. Рассмотрим несколько популярных вариантов.
Плагин WP Sweep
WP Sweep позволяет оптимизировать базу данных и удалять устаревший контент: ревизии, спам-комментарии, черновики и многое другое.
Для автоматизации удаления старого контента можно настроить WP Sweep в связке с WP-Cron, но в базовой версии автоматического удаления по времени нет — придется запускать вручную или использовать дополнения.
Плагин Advanced Database Cleaner
Этот плагин позволяет удалять устаревшие записи, ревизии, временные данные и многое другое. В премиум-версии есть возможность запланировать автоматические очистки, что удобно для регулярного обслуживания сайта.
Как интегрировать плагин с WP-Cron
Если плагин не поддерживает автоматическое удаление по расписанию, можно написать кастомный код, который будет вызывать функции плагина через WP-Cron. Ниже пример для WP Sweep:
function wpkeys_schedule_sweep() {
if ( ! wp_next_scheduled( 'wpkeys_daily_sweep_hook' ) ) {
wp_schedule_event( time(), 'daily', 'wpkeys_daily_sweep_hook' );
}
}
add_action( 'wp', 'wpkeys_schedule_sweep' );
add_action( 'wpkeys_daily_sweep_hook', 'wpkeys_run_sweep' );
function wpkeys_run_sweep() {
if ( function_exists( 'sweep' ) ) {
sweep(); // Вызов функции очистки из WP Sweep
}
}Этот код создаст ежедневное событие, которое будет запускать функцию очистки.
Кастомное решение: удаление постов старше определенного срока
Если нужен более тонкий контроль, можно написать собственный код, который будет удалять записи старше нужного количества дней. Пример функции для удаления постов старше 180 дней:
function wpkeys_delete_old_posts() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'before' => '180 days ago',
),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts( $args );
foreach ( $old_posts as $post_id ) {
wp_delete_post( $post_id, true );
}
}
// Запускаем функцию через WP-Cron
function wpkeys_schedule_old_post_deletion() {
if ( ! wp_next_scheduled( 'wpkeys_daily_old_post_deletion' ) ) {
wp_schedule_event( time(), 'daily', 'wpkeys_daily_old_post_deletion' );
}
}
add_action( 'wp', 'wpkeys_schedule_old_post_deletion' );
add_action( 'wpkeys_daily_old_post_deletion', 'wpkeys_delete_old_posts' );Данный код удалит навсегда все опубликованные записи старше 180 дней. Можно адаптировать под свои нужды, например, изменить тип записи или статус.
Добавление исключений и условий
Чтобы не удалять важный контент, можно добавить условия по меткам, категориям или пользовательским полям. Например, исключить посты с категорией «Важное»:
$args['category__not_in'] = array( get_cat_ID('Важное') );Таким образом вы защитите ключевой контент от случайного удаления.
Удаление старых медиафайлов
Со временем в библиотеке медиафайлов накапливаются неиспользуемые изображения и документы. Их можно удалять вручную, но лучше автоматизировать процесс.
Плагин Media Cleaner
Media Cleaner анализирует базу данных и файлы в папке uploads, выявляя неиспользуемые медиа. Есть возможность настроить автоматическую очистку.
Пример кода для удаления медиа без привязки к записям
function wpkeys_delete_unused_media() {
global $wpdb;
$attachments = $wpdb->get_results(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment' " .
"AND ID NOT IN (SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key = '_thumbnail_id')"
);
foreach ( $attachments as $attachment ) {
if ( ! wp_attachment_is_image( $attachment->ID ) ) continue;
$filepath = get_attached_file( $attachment->ID );
if ( $filepath && ! file_exists( $filepath ) ) {
wp_delete_attachment( $attachment->ID, true );
}
}
}
// Запускать по расписанию
add_action( 'wpkeys_daily_unused_media_cleanup', 'wpkeys_delete_unused_media' );
if ( ! wp_next_scheduled( 'wpkeys_daily_unused_media_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpkeys_daily_unused_media_cleanup' );
}Этот пример удалит вложения без связанных файлов, что помогает очистить базу от битых ссылок.
Советы по безопасности и резервному копированию
Автоматическое удаление контента — операция, требующая осторожности. Обязательно:
- Делайте регулярные бэкапы базы данных и файлов сайта.
- Тестируйте код и плагины на тестовом сайте перед применением на боевом.
- Используйте функции удаления с возможностью восстановления (например, перевод в корзину вместо полного удаления).
Если хотите, чтобы удаление было мягким, замените в функциях wp_delete_post($post_id, true) на wp_trash_post($post_id), чтобы отправлять записи в корзину.
Заключение
Автоматизация удаления старого контента помогает поддерживать ваш сайт WordPress быстрым, аккуратным и удобным для управления. Используйте готовые плагины, если хотите быстро настроить процесс, или пишите собственные решения для гибкого контроля. Не забывайте про безопасность и резервное копирование, чтобы избежать потери важных данных.
Для удобства можно дополнительно изучить плагины и темы на WPSHOP.RU, где есть инструменты для оптимизации и автоматизации WordPress.