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

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

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

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

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

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

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

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

1. Поиск изображений без прикрепления к записям

В WordPress каждое добавленное изображение имеет поле post_parent, которое указывает на ID записи или страницы, где оно используется. Если post_parent=0, значит изображение не прикреплено к записи.

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

2. Поиск изображений, не вставленных в контент

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

Удаление неиспользуемых изображений с помощью кода

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

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

function wpma_get_unused_images() {
    global $wpdb;

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

    $unused = [];

    foreach ($attachments as $attachment_id) {
        $post_parent = get_post_field('post_parent', $attachment_id);
        $url = wp_get_attachment_url($attachment_id);

        // Проверяем, прикреплено ли изображение к записи
        if ($post_parent) {
            continue; // Используется
        }

        // Проверяем, встречается ли URL изображения в постах и страницах
        $count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_type IN ('post', 'page') AND post_status = 'publish' AND post_content LIKE %s",
            '%' . $wpdb->esc_like($url) . '%'
        ));

        if (!$count) {
            $unused[] = $attachment_id;
        }
    }

    return $unused;
}

function wpma_delete_unused_images() {
    $unused_images = wpma_get_unused_images();

    foreach ($unused_images as $attachment_id) {
        wp_delete_attachment($attachment_id, true); // Полное удаление
    }

    return count($unused_images);
}

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

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

Если вы предпочитаете готовые решения, существуют плагины, которые облегчают задачу:

  • Media Cleaner (https://wordpress.org/plugins/media-cleaner/) — сканирует медиатеку и выявляет неиспользуемые файлы, позволяет удалять их безопасно.
  • WPGPT Media Cleaner — расширение для Media Cleaner с дополнительными функциями, совместимо с продуктами WPGPT.

Использование плагинов удобно для тех, кто не хочет писать код или настраивать крон-задачи.

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

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

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

add_action('wpma_image_cleanup_hook', function() {
    $deleted_count = wpma_delete_unused_images();
    if ($deleted_count) {
        error_log("[WPMA] Удалено неиспользуемых изображений: " . $deleted_count);
    }
});

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

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

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

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

Выводы

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

WooCommerce: как исключить определённые товары из поиска и категорий
24.06.2026
Как добавить автоматические уведомления о обновлениях плагинов в WordPress
22.02.2026
Как удалить или отключить плагин на определённых страницах WordPress
19.03.2026
Как создать собственный виджет в WordPress
23.11.2025
Как создать собственный shortcode в WordPress
19.11.2025