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

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

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

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

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

  • Освободить место на диске и в базе данных;
  • Сократить время бэкапов;
  • Уменьшить нагрузку на сервер;
  • Облегчить управление медиабиблиотекой.

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

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

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

Основные способы определения:

  • Поиск по контенту: сканирование записей, страниц, кастомных типов записей на наличие ссылок на медиафайлы.
  • Проверка привязки к записи: медиафайлы, которые привязаны к записи (post_parent), скорее всего, используются.
  • Анализ комментариев и пользовательских полей: иногда изображения используются в этих местах.

Для автоматизации можно использовать специальные функции и плагины.

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

Ниже приведен пример функции с префиксом wplessons_, которая сканирует медиабиблиотеку на неиспользуемые изображения и удаляет их. Этот код можно добавить в файл functions.php вашей темы или создать плагин.

function wplessons_get_unused_attachments() {
    global $wpdb;
    $unused_attachments = [];

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

    foreach ($attachments as $attachment_id) {
        $file_url = wp_get_attachment_url($attachment_id);

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

        // Проверяем post_parent
        $parent_id = get_post_field('post_parent', $attachment_id);

        if ($count == 0 && !$parent_id) {
            $unused_attachments[] = $attachment_id;
        }
    }

    return $unused_attachments;
}

function wplessons_delete_unused_attachments() {
    $unused = wplessons_get_unused_attachments();
    $deleted = 0;

    foreach ($unused as $attachment_id) {
        if (wp_delete_attachment($attachment_id, true)) {
            $deleted++;
        }
    }

    return $deleted;
}

// Пример вызова функции для удаления
// $deleted_count = wplessons_delete_unused_attachments();
// echo "Удалено изображений: " . $deleted_count;

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

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

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

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

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

Как автоматизировать процесс очистки медиабиблиотеки с помощью cron и WP-Cron

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

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

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

add_action('wplessons_cleanup_unused_images_event', 'wplessons_delete_unused_attachments');

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

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

Автоматическое удаление медиафайлов требует осторожности:

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

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

Итоги и полезные ссылки

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

Дополнительные ресурсы:

Автоматическое удаление старых неиспользуемых изображений из медиабиблиотеки WordPress
06.02.2026
Как использовать AJAX в WordPress для отображения сообщений об ошибках без перезагрузки страницы
08.12.2025
Как создать автоматическое удаление спама в комментариях WordPress
03.01.2026
Как создать автоматическую публикацию постов в WordPress с помощью Cron
18.03.2026
Как избежать проблем при использовании PHP 8 в WordPress
15.03.2026