Как создать автоматическое удаление старых изображений в WordPress

В процессе активной работы с WordPress на сайте постепенно накапливаются медиафайлы, особенно изображения, которые могут уже не использоваться в контенте. Эти неиспользуемые изображения занимают место на сервере, замедляют резервное копирование и усложняют управление медиа библиотекой. В этой статье разберём, как создать систему автоматического удаления старых изображений в WordPress, чтобы поддерживать чистоту и оптимизацию сайта.

Почему важно удалять старые изображения в WordPress

Каждое изображение в WordPress сохраняется в нескольких размерах, что увеличивает объём занимаемого дискового пространства. Если вы не удаляете медиафайлы, которые перестали использоваться, размер вашей библиотеки растёт, что влияет на производительность сайта, скорость резервного копирования и даже стоимость хостинга.

Кроме того, неиспользуемые изображения могут стать причиной путаницы при работе с медиа-файлами и мешать SEO, если старые изображения индексируются поисковиками.

Автоматизация процесса удаления позволяет экономить время и поддерживать сайт в порядке без лишних усилий.

Как определить старые и неиспользуемые изображения

Для автоматического удаления нужно понимать, какие изображения считаются старыми и неиспользуемыми. Обычно под этим понимают файлы, которые:

  • Не прикреплены к каким-либо записям или страницам (attachment post type без родительского поста).
  • Не используются в контенте (например, не вставлены в записи, страницы, виджеты или меню).
  • Были загружены давно (например, старше 6 месяцев или года).

Для определения таких файлов можно анализировать базу данных и содержимое постов, что требует аккуратного подхода.

Использование плагинов для поиска и удаления неиспользуемых изображений

Если не хотите писать код самостоятельно, можно использовать готовые плагины. Вот несколько полезных вариантов:

  • Clearfy — плагин для оптимизации и очистки WordPress, включает функции для удаления неиспользуемых изображений.
  • WPRemark — имеет инструменты для работы с медиа и автоматизации задач, включая очистку библиотеки.
  • Media Cleaner — популярный бесплатный плагин, который сканирует библиотеку и выявляет неиспользуемые файлы.

Плагины удобны, но иногда требуют ручного контроля и не всегда подходят для автоматизации по расписанию.

Автоматизация удаления через код: пример решения

Если хотите создать собственное решение, можно написать функцию, которая будет автоматически удалять неиспользуемые изображения старше заданного срока. Для этого используем WP Cron — встроенный планировщик задач WordPress.

Шаг 1. Создаём функцию для поиска и удаления старых изображений

function wpupdate_delete_old_unused_images() {
    $days = 180; // Удалять изображения старше 180 дней
    $date_limit = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    // Получаем все вложения типа image, которые старше даты
    $args = [
        'post_type'      => 'attachment',
        'post_mime_type' => 'image',
        'post_status'    => 'inherit',
        'date_query'     => [
            [
                'column' => 'post_date',
                'before' => $date_limit,
            ],
        ],
        'posts_per_page' => -1,
    ];

    $attachments = get_posts($args);
    foreach ($attachments as $attachment) {
        // Проверяем, прикреплен ли файл к посту
        if (!$attachment->post_parent) {
            // Проверяем, используется ли изображение в контенте
            global $wpdb;
            $image_url = wp_get_attachment_url($attachment->ID);
            $count = $wpdb->get_var($wpdb->prepare(
                "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
                '%' . $wpdb->esc_like($image_url) . '%'
            ));
            if (intval($count) === 0) {
                // Удаляем вложение вместе с файлами
                wp_delete_attachment($attachment->ID, true);
            }
        }
    }
}

Эта функция получает все изображения старше 180 дней, которые не связаны с записями (post_parent = 0), и проверяет, не используются ли они в содержимом других постов. Если не используются — удаляет.

Шаг 2. Планируем выполнение функции по расписанию

function wpupdate_schedule_image_cleanup() {
    if (!wp_next_scheduled('wpupdate_daily_image_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wpupdate_daily_image_cleanup');
    }
}
add_action('wp', 'wpupdate_schedule_image_cleanup');

add_action('wpupdate_daily_image_cleanup', 'wpupdate_delete_old_unused_images');

Этот код регистрирует ежедневное событие, которое будет запускать функцию очистки.

Как тестировать и использовать этот код

Перед внедрением на рабочем сайте обязательно делайте резервную копию базы и файлов. Лучше сначала протестировать функцию на тестовом сайте, чтобы убедиться, что удаляются только действительно неиспользуемые изображения.

Если хотите запускать функцию вручную, можно добавить временный вызов:

add_action('admin_init', 'wpupdate_delete_old_unused_images');

Но не забудьте удалить этот вызов после теста, чтобы не замедлять админку.

Советы и рекомендации для безопасного удаления изображений

Удаление медиафайлов — операция, требующая осторожности:

  • Используйте фильтры и дополнительные проверки, если у вас сложная структура сайта с кастомным выводом медиа.
  • Проверяйте, не используются ли изображения в плагинах, виджетах, настройках темы.
  • Сделайте возможность восстановления удалённых файлов из резервных копий.
  • Рассмотрите использование плагинов с поддержкой «корзины» для медиа, например, My Popup (с функциями бэкапа и предупреждений).

Заключение

Автоматическое удаление старых изображений — важный шаг в поддержке здоровой и оптимизированной базы данных WordPress. Используя пример кода выше, вы можете внедрить собственный механизм очистки, который будет работать в фоне и экономить место на сервере без риска случайного удаления нужных файлов. При необходимости воспользуйтесь проверенными плагинами для расширенного контроля и удобства.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как отключить автообновления тем и плагинов WordPress через функции
25.02.2026
Как настроить автоудаление старых черезашищенных пользователей WordPress
28.03.2026
Как создать динамический виджет в WordPress с примерами кода
19.12.2025
WooCommerce: правильная обработка ошибок при оплате и возврате ответа клиенту
20.04.2026
Как отключить Emoji в WordPress для ускорения сайта
21.02.2026
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙