wpdebug.ru wordpress WP Debug

Как удалить неиспользуемые медиа файлы из библиотеки WordPress

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

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

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

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

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

Как найти неиспользуемые медиа файлы в WordPress

Существует несколько способов выявить неиспользуемые медиафайлы:

1. Использование плагинов

Самый простой способ — использовать специализированные плагины. Рассмотрим два популярных варианта:

  • Media Cleaner — плагин, который сканирует медиа библиотеку и контент сайта, выявляя файлы, не используемые на страницах и в записях. Плагин поддерживает интеграцию с WooCommerce, плагинами галерей, конструкторами страниц.
  • DNUI (Delete Not Used Image) — более легкий плагин, который проверяет неиспользуемые изображения в базе данных и позволяет удалять их.

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

2. Ручной поиск с помощью SQL-запросов и кода

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

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

  • Каждый медиафайл — это запись типа attachment в таблице wp_posts.
  • Использование файла может быть в поле post_content любого поста или страницы (например, через тег <img> или ссылку).
  • Файл может быть прикреплен к записи через поле post_parent.
  • Некоторые плагины или темы могут хранить ссылки на медиафайлы в пользовательских полях (postmeta).

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

function wpdebug_get_unused_attachments() {
    global $wpdb;

    // Получаем все attachment ID
    $attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment'");

    $unused = [];
    foreach ($attachments as $attachment_id) {
        // Проверяем наличие в post_parent
        $post_parent = $wpdb->get_var($wpdb->prepare(
            "SELECT post_parent FROM {$wpdb->posts} WHERE ID = %d",
            $attachment_id
        ));

        if ($post_parent && $post_parent != 0) {
            continue; // Файл привязан к записи
        }

        // Проверяем использование в post_content
        $used_in_content = $wpdb->get_var($wpdb->prepare(
            "SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE %s LIMIT 1",
            '%' . $attachment_id . '%'
        ));

        if ($used_in_content) {
            continue; // Используется в контенте
        }

        // Проверяем пользовательские поля
        $used_in_meta = $wpdb->get_var($wpdb->prepare(
            "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_value LIKE %s LIMIT 1",
            '%' . $attachment_id . '%'
        ));

        if ($used_in_meta) {
            continue; // Используется в метаданных
        }

        $unused[] = $attachment_id;
    }

    return $unused;
}

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

Автоматическое удаление неиспользуемых медиафайлов с помощью WPDebug функции

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

function wpdebug_delete_unused_attachments() {
    $unused_attachments = wpdebug_get_unused_attachments();

    foreach ($unused_attachments as $attachment_id) {
        wp_delete_attachment($attachment_id, true); // true - удаляет файлы с диска
    }

    return count($unused_attachments);
}

Эту функцию рекомендуется запускать с подтверждением и обязательно сделать резервную копию сайта. Также можно настроить ее выполнение через WP-CLI для удобства.

Рекомендации по безопасности и резервному копированию

Удаление файлов — критическая операция. Чтобы избежать потери данных, придерживайтесь следующих правил:

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

Заключение

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

Для установки и обновления плагинов и дополнительных инструментов рекомендуем посетить WPShop.ru.

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее