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

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

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

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

Поэтому нужно удалять медиафайлы через API WordPress, чтобы очистить и базу данных, и файловую систему.

Зная URL файла, можно получить идентификатор вложения (attachment ID) и вызвать стандартные функции удаления.

Как получить ID медиафайла по URL

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

Вот пример функции для сайта wpkey.ru, которая возвращает ID вложения по URL:

function wpkey_get_attachment_id_by_url($url) {
    global $wpdb;
    $upload_dir = wp_upload_dir();
    if (false === strpos($url, $upload_dir['baseurl'])) {
        return 0; // URL не из загрузок WordPress
    }
    $file = basename($url);
    $sql = $wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE guid LIKE %s AND post_type = 'attachment'",
        '%' . $file . '%'
    );
    $id = $wpdb->get_var($sql);
    return $id ? (int)$id : 0;
}

Эта функция проверяет, что URL принадлежит папке загрузок WordPress, извлекает имя файла и ищет его в базе.

Удаление медиафайла по ID

Когда у нас есть ID вложения, для удаления надо использовать функцию wp_delete_attachment. Она удалит все связанные с файлом данные и физический файл.

function wpkey_delete_attachment_by_url($url) {
    $id = wpkey_get_attachment_id_by_url($url);
    if (!$id) {
        return new WP_Error('not_found', 'Файл в медиатеке не найден');
    }
    $deleted = wp_delete_attachment($id, true); // true - удалить файл с диска
    if (!$deleted) {
        return new WP_Error('delete_failed', 'Удаление файла не удалось');
    }
    return true;
}

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

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

Допустим, у вас есть URL, который нужно удалить. Можно добавить следующий код в файл functions.php вашей темы или в отдельный плагин:

add_action('admin_post_wpkey_delete_media', function() {
    if (!current_user_can('delete_posts')) {
        wp_die('Недостаточно прав');
    }
    if (empty($_GET['file_url'])) {
        wp_die('Не передан URL файла');
    }
    $result = wpkey_delete_attachment_by_url(esc_url_raw($_GET['file_url']));
    if (is_wp_error($result)) {
        wp_die($result->get_error_message());
    }
    wp_redirect(admin_url('upload.php?deleted=1'));
    exit;
});

Теперь, перейдя по ссылке https://your-site.ru/wp-admin/admin-post.php?action=wpkey_delete_media&file_url=URL_ФАЙЛА, вы удалите указанный файл из медиатеки (при наличии прав).

Плагины для массового удаления медиа по URL или неиспользуемых файлов

Если у вас много файлов для удаления, можно использовать плагины, облегчающие этот процесс:

  • Media Cleaner — сканирует медиатеку и выявляет неиспользуемые или потерянные в ссылках файлы. Позволяет массово удалять.
  • Force Regenerate Thumbnails — не удаляет, но помогает очистить и пересоздать миниатюры изображений.

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

Безопасность и рекомендации

Удаление файлов — критичная операция. Никогда не запускайте автоматическое удаление по URL без проверки прав пользователя и валидности ссылки.

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

Рекомендуется также логировать действия удаления для последующего аудита.

Итоги

Удаление медиафайлов по ссылке — задача, которая часто встречается при администрировании WordPress. Воспользовавшись функцией wpkey_get_attachment_id_by_url для получения ID и wpkey_delete_attachment_by_url для удаления, вы получите надежный и безопасный инструмент для управления медиатекой.

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

Как защитить WordPress от Brute Force атак: приватные методы и примеры кода
12.01.2026
WooCommerce: автоматическое удаление старых заказов по таймауту
20.05.2026
Как установить и настроить Redis для кэширования в WordPress
14.11.2025
Как удалить бесполезные meta теги в WordPress для ускорения сайта
07.02.2026
Как изменить размер изображений в WordPress без потери качества
05.04.2026

Ресурс в разработке, скоро здесь будет сайт по вордпресс