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

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

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

При загрузке изображений в WordPress они сохраняются в папке wp-content/uploads. Однако, когда изображения перестают использоваться в записях, страницах или других элементах сайта, они остаются на сервере, занимая место. Это приводит к следующим проблемам:

  • Рост размера бэкапов и затрат на хостинг.
  • Снижение скорости работы сайта из-за большого числа файлов.
  • Затруднения при поиске нужных медиафайлов в медиатеке.

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

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

Для поиска неиспользуемых изображений можно выполнить несколько шагов:

  1. Получить список всех изображений в медиатеке. Это можно сделать, извлекая все вложения с типом image.
  2. Проверить, используются ли эти изображения в записях, страницах, виджетах и настройках темы. Это можно сделать поиском по содержимому и метаданным.
  3. Исключить изображения, используемые в качестве миниатюр (featured images) и в пользовательских полях.

Для автоматизации этих шагов можно написать PHP-скрипт, который выполнит поиск и выведет список неиспользуемых файлов.

Пример функции для поиска неиспользуемых изображений

function wpelement_find_unused_images() {
    global $wpdb;

    // Получаем все ID вложений с типом image
    $images = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type='attachment' AND post_mime_type LIKE 'image/%'");

    $unused_images = [];

    foreach ($images as $image_id) {
        // Получаем URL изображения
        $image_url = wp_get_attachment_url($image_id);

        // Проверяем, используется ли URL в контенте других записей
        $count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s AND post_status = 'publish'",
            '%' . $wpdb->esc_like($image_url) . '%'
        ));

        // Проверяем, не является ли изображение миниатюрой
        $is_thumbnail = (bool) $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->postmeta} WHERE meta_key = '_thumbnail_id' AND meta_value = %d",
            $image_id
        ));

        if ($count == 0 && !$is_thumbnail) {
            $unused_images[] = $image_id;
        }
    }

    return $unused_images;
}

Эта функция возвращает массив ID изображений, которые не используются в опубликованных записях и не назначены как миниатюры.

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

Удаление файлов напрямую с сервера может привести к ошибкам, если изображения все еще используются где-то в базе данных. Поэтому рекомендуется использовать встроенную функцию WordPress wp_delete_attachment(), которая удаляет файл и все связанные с ним данные.

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

$unused_images = wpelement_find_unused_images();

foreach ($unused_images as $image_id) {
    wp_delete_attachment($image_id, true); // true — удаляет сразу без перемещения в корзину
}

Перед запуском удаления обязательно сделайте резервную копию базы данных и файлов сайта.

Как автоматизировать процесс удаления с помощью WP-Cron

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

Пример добавления WP-Cron задачи

function wpelement_schedule_image_cleanup() {
    if (!wp_next_scheduled('wpelement_cleanup_event')) {
        wp_schedule_event(time(), 'weekly', 'wpelement_cleanup_event');
    }
}
add_action('wp', 'wpelement_schedule_image_cleanup');

add_action('wpelement_cleanup_event', function() {
    $unused_images = wpelement_find_unused_images();
    foreach ($unused_images as $image_id) {
        wp_delete_attachment($image_id, true);
    }
});

Этот код настроит еженедельную очистку неиспользуемых изображений.

Дополнительные советы по работе с изображениями в WordPress

Помимо удаления неиспользуемых файлов, рекомендуется:

  • Оптимизировать изображения при загрузке с помощью плагинов или сервисов для сжатия без потери качества.
  • Использовать современные форматы изображений, например WebP, для ускорения загрузки сайта.
  • Регулярно проверять медиатеку на наличие дублей и устаревших файлов.

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

Как решить проблему нерабочих изображений в WordPress после переездов сайта
26.03.2026
Как автоматизировать удаление старых комментариев в WordPress
09.03.2026
Создание динамического шорткода с параметрами в WordPress
16.01.2026
Как создать автоматический импорт данных из Google Sheets в WordPress
04.02.2026
Как автоматизировать удаление старого контента в WordPress по дате публикации
11.04.2026