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

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

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

Стандартный интерфейс WordPress позволяет удалять медиафайлы через админку, но только если вы знаете, какой именно файл удалять. В случае, если вы получили URL файла (например, из базы данных, темы или плагина), нет прямой возможности удалить файл по ссылке. Это создает проблему, когда нужно массово или выборочно очистить медиатеку от определенных файлов, опираясь на ссылки.

Кроме того, не все файлы, которые есть в папке uploads, обязательно прикреплены к записям в медиатеке. Некоторые могут быть заброшены и занимать место на сервере. Поэтому по ссылке удобно определить, есть ли файл в медиатеке и удалить его программно.

Общие принципы удаления файлов медиатеки по ссылке

Чтобы удалить файл по ссылке, нужно выполнить следующие шаги:

  • Определить ID вложения (attachment ID) по URL файла.
  • Проверить, что это действительно медиафайл, а не сторонний ресурс.
  • Удалить вложение из медиатеки с помощью встроенных функций WordPress, чтобы очистить все связанные данные и физический файл.

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

Как получить ID вложения по URL файла

WordPress хранит информацию о всех загруженных файлах в таблице wp_posts с типом записи attachment. В поле guid указывается полный URL файла. Поиск по этому полю позволяет найти ID вложения.

Ниже приведена функция для получения ID вложения по URL, которая пригодится для решения задачи:

function wprus_get_attachment_id_by_url($url) {
    global $wpdb;
    $attachment_id = 0;
    if (!$url) {
        return 0;
    }
    $upload_dir_paths = wp_upload_dir();
    if (strpos($url, $upload_dir_paths['baseurl']) === false) {
        return 0; // URL не из папки uploads
    }
    $url = esc_url_raw($url);
    $sql = $wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE guid=%s AND post_type='attachment'", $url);
    $attachment_id = $wpdb->get_var($sql);
    return $attachment_id ? (int)$attachment_id : 0;
}

Функция проверяет, что URL принадлежит папке загрузок сайта, затем ищет запись в базе и возвращает ID вложения или 0, если не найдено.

Использование функции для удаления

После получения ID вложения можно удалить файл и все связанные данные с помощью функции wp_delete_attachment(). Важно передавать флаг удаления физического файла.

function wprus_delete_attachment_by_url($url) {
    $attachment_id = wprus_get_attachment_id_by_url($url);
    if (!$attachment_id) {
        return false; // Вложение не найдено
    }
    // Удаляем вложение и все связанные файлы
    $result = wp_delete_attachment($attachment_id, true);
    return $result !== false;
}

Функция возвращает true, если удаление прошло успешно, и false в противном случае.

Пример плагина для массового удаления файлов по списку ссылок

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

Ключевые части плагина

  • Страница настроек в админке с текстовым полем для вставки URL через перенос строки.
  • Обработка списка URL, вызов функций удаления.
  • Вывод отчета об успешных и неудачных удалениях.

Ниже пример кода, который можно добавить в файл плагина:

add_action('admin_menu', 'wprus_media_delete_menu');
function wprus_media_delete_menu() {
    add_media_page('Удаление по ссылкам', 'Удаление по ссылкам', 'manage_options', 'wprus-media-delete', 'wprus_media_delete_page');
}

function wprus_media_delete_page() {
    if (!current_user_can('manage_options')) {
        wp_die('Доступ запрещен');
    }
    $message = '';
    if (isset($_POST['wprus_urls'])) {
        check_admin_referer('wprus_media_delete_nonce');
        $urls = array_map('trim', explode("\n", sanitize_textarea_field($_POST['wprus_urls'])));
        $success = 0;
        $fail = 0;
        foreach ($urls as $url) {
            if (empty($url)) continue;
            if (wprus_delete_attachment_by_url($url)) {
                $success++;
            } else {
                $fail++;
            }
        }
        $message = "Удалено: $success, не найдено или не удалено: $fail";
    }
    ?>
    <div class="wrap">
        <h1>Массовое удаление медиафайлов по ссылкам</h1>
        <?php if ($message): ?>
            <div id="message" class="updated notice is-dismissible"><p><?php echo esc_html($message); ?></p></div>
        <?php endif; ?>
        <form method="post">
            <?php wp_nonce_field('wprus_media_delete_nonce'); ?>
            <textarea name="wprus_urls" rows="10" cols="70" placeholder="Вставьте сюда URL файлов, по одному на строку"></textarea><br><br>
            <input type="submit" class="button button-primary" value="Удалить файлы">
        </form>
    </div>
    <?php
}

Обходные пути и рекомендации

Если вы не хотите писать код, существуют плагины для управления медиатекой, которые поддерживают удаление по URL, например «Media Cleaner» или «Force Regenerate Thumbnails». Но для точечного удаления по ссылке лучше использовать собственный код, чтобы избежать случайного удаления.

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

Безопасность при удалении файлов

Всегда проверяйте права пользователя перед удалением. Не давайте возможность удалять файлы для неподтвержденных пользователей или через открытые формы без защиты nonce.

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

WooCommerce: как автоматически отключить отзывы для определённых ролей пользователей
10.06.2026
Как удалить все посты и страницы в WordPress быстро и безопасно
27.11.2025
Как изменить вывод информации пользователя WooCommerce по ролям
30.03.2026
Как добавить автоматические переадресации в WordPress: практическое руководство
24.02.2026
WooCommerce: как изменить стиль кнопки «Добавить в корзину» при добавлении товара
07.06.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше