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

|

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

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

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

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

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

Attachment файл считается неиспользуемым, если он:

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

Проверка привязки к родительскому посту

В таблице базы данных wp_posts записи attachment имеют тип attachment и поле post_parent, указывающее на ID связанного поста. Если post_parent равен нулю, файл не привязан к записи.

Поиск упоминаний в контенте

Даже если файл не привязан напрямую, он может использоваться в тексте. Нужно проверить таблицы wp_posts и wp_postmeta на упоминания URL или ID файла.

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

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

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

    $unused_attachments = [];

    foreach ($attachments as $attachment_id) {
        $file_url = wp_get_attachment_url($attachment_id);
        if (!$file_url) {
            continue; // файл не существует или ошибка
        }

        // Ищем упоминания в контенте
        $count_in_posts = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
            '%' . $wpdb->esc_like($file_url) . '%'
        ));

        // Ищем в мета полях
        $count_in_meta = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->postmeta} WHERE meta_value LIKE %s",
            '%' . $wpdb->esc_like($file_url) . '%'
        ));

        if (intval($count_in_posts) === 0 && intval($count_in_meta) === 0) {
            $unused_attachments[] = $attachment_id;
        }
    }

    return $unused_attachments;
}

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

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

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

function wpdetect_delete_unused_attachments() {
    $unused_attachments = wpdetect_get_unused_attachments();
    foreach ($unused_attachments as $attachment_id) {
        wp_delete_attachment($attachment_id, true); // true – удалить физический файл
    }
    return count($unused_attachments);
}

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

Пример задания WP-Cron для еженедельной очистки

add_action('wpdetect_weekly_cleanup', 'wpdetect_delete_unused_attachments');

if (!wp_next_scheduled('wpdetect_weekly_cleanup')) {
    wp_schedule_event(time(), 'weekly', 'wpdetect_weekly_cleanup');
}

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

Использование плагинов для упрощения задачи

Если вы не хотите писать код, существуют плагины, которые помогают найти и удалить неиспользуемые медиафайлы:

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

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

Рекомендации при автоматизации удаления attachment файлов

При автоматизации очистки важно соблюдать осторожность:

Заключение

Автоматизация удаления неиспользуемых attachment файлов в WordPress — эффективный способ поддерживать чистоту и производительность сайта. С помощью приведённых функций и настроек WP-Cron вы можете настроить регулярную очистку без лишних усилий. Если вы предпочитаете готовые решения, обратите внимание на специализированные плагины и инструменты оптимизации, такие как Clearfy с wpshop.ru.

Как автоматизировать удаление неиспользуемых user meta в WordPress
22.01.2026
Как автоматизировать удаление неиспользуемых постов по типу и статусу в WordPress
14.12.2025
Автоматическое отключение неиспользуемых плагинов в WordPress: практическое руководство
20.12.2025
Как создать автоматический снимок базы данных WordPress с помощью WPDetect
01.01.2026
Как автоматизировать отключение неиспользуемых плагинов WordPress
04.02.2026
×
Quizle
Привлекайте, конвертируйте, зарабатывайте!
-15%

на премиум плагин WordPress

Получить скидку ⋙