wpcodes.ru wordpress WP Codеs

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

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

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

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

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

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

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

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

  • Файлы, не связанные с записями, страницами, виджетами или меню.
  • Изображения, которые не были прикреплены к публикациям и не вставлены в контент.
  • Файлы, загруженные более определенного срока назад (например, старше 1 года), если они не используются.

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

Использование SQL для поиска неиспользуемых медиафайлов

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

SELECT ID, post_title, post_date FROM wp_posts WHERE post_type = 'attachment' AND post_parent = 0;

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

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

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

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

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

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

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

function wpcodes_delete_old_unattached_images() {
    global $wpdb;
    $days = 365; // удалить файлы старше 365 дней
    $date_threshold = date('Y-m-d H:i:s', strtotime('-'. $days .' days'));

    $attachments = $wpdb->get_results($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_parent = 0 AND post_date < %s",
        $date_threshold
    ));

    foreach ($attachments as $attachment) {
        // Проверяем, что файл не используется в контенте
        $file_url = wp_get_attachment_url($attachment->ID);
        $posts_using = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
            '%' . $wpdb->esc_like($file_url) . '%'
        ));

        if ($posts_using == 0) {
            wp_delete_attachment($attachment->ID, true);
        }
    }
}

// Запускать функцию раз в сутки с помощью WP-Cron
add_action('wpcodes_daily_cleanup', 'wpcodes_delete_old_unattached_images');

if (!wp_next_scheduled('wpcodes_daily_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpcodes_daily_cleanup');
}

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

Расширенные методы автоматизации с помощью WP-CLI и плагинов

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

  • WP-CLI — командная строка для управления WordPress. Можно написать скрипт, который будет искать и удалять неиспользуемые изображения по расписанию.
  • Плагины с поддержкой автоматизации — например, Clearfy Pro предоставляет расширенные возможности по оптимизации и очистке сайта, включая работу с медиатекой.

WP-CLI пример для удаления вложений без родителя:

wp media list --field=ID --post_parent=0 | xargs -d '\n' -I % wp media delete % --force
<

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

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

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

  • Всегда делайте полное резервное копирование базы данных и файлов сайта перед массовым удалением.
  • Проверяйте, что файлы действительно не используются в виджетах, кастомных полях, шаблонах и других местах.
  • Тестируйте автоматизацию сначала на тестовом или локальном сайте.
  • Используйте функции WordPress для удаления вложений (wp_delete_attachment) вместо прямого удаления файлов, чтобы не оставить «битых» ссылок.

Выводы

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

×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее