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

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

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

Хотя в репозитории WordPress существует множество плагинов для работы с изображениями, иногда их использование нежелательно:

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

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

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

Удаление изображений из медиабиблиотеки — задача не только очистки файлов, но и удаления всех связанных с ними записей в базе данных, чтобы не оставлять «мертвых» ссылок.

1. Поиск ID всех изображений

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

SELECT ID FROM wp_posts WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%';

Для автоматизации в PHP можно получить список так:

function wparticles_get_all_image_ids() {
    $args = array(
        'post_type'      => 'attachment',
        'post_mime_type' => 'image%',
        'numberposts'    => -1,
        'fields'         => 'ids',
    );
    return get_posts($args);
}

2. Удаление изображений программно

Чтобы удалить изображения и все их физические файлы, используйте функцию wp_delete_attachment(). Она удалит запись и связанные файлы.

function wparticles_mass_delete_images() {
    $image_ids = wparticles_get_all_image_ids();
    foreach ($image_ids as $id) {
        wp_delete_attachment($id, true); // true — удаляет навсегда
    }
}
<

Внимание! Запускать такую функцию нужно с осторожностью, лучше на локальной копии сайта или после резервного копирования.

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

Замена изображений — более сложная задача. Предположим, у вас есть новые картинки, которые нужно заменить по определённым критериям (например, по имени файла или метаданным).

1. Загрузка новых изображений в медиабиблиотеку

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

function wparticles_upload_image($file_path) {
    $filetype = wp_check_filetype(basename($file_path), null);
    $upload_dir = wp_upload_dir();

    $new_file_path = $upload_dir['path'] . '/' . basename($file_path);
    if (!copy($file_path, $new_file_path)) {
        return new WP_Error('upload_failed', 'Не удалось скопировать файл');
    }

    $attachment = array(
        'guid'           => $upload_dir['url'] . '/' . basename($file_path), 
        'post_mime_type' => $filetype['type'],
        'post_title'     => preg_replace('/\.[^.]+$/', '', basename($file_path)),
        'post_content'   => '',
        'post_status'    => 'inherit'
    );

    $attach_id = wp_insert_attachment($attachment, $new_file_path);
    require_once(ABSPATH . 'wp-admin/includes/image.php');
    $attach_data = wp_generate_attachment_metadata($attach_id, $new_file_path);
    wp_update_attachment_metadata($attach_id, $attach_data);

    return $attach_id;
}

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

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

function wparticles_replace_image_by_name($old_name, $new_file_path) {
    $args = array(
        'post_type'      => 'attachment',
        'post_mime_type' => 'image%',
        'name'           => $old_name,
        'numberposts'    => 1,
        'fields'         => 'ids',
    );
    $old_image_ids = get_posts($args);
    if (empty($old_image_ids)) {
        return false; // Старое изображение не найдено
    }

    $old_id = $old_image_ids[0];
    $new_id = wparticles_upload_image($new_file_path);
    if (is_wp_error($new_id)) {
        return false; // Ошибка загрузки нового
    }

    // Обновляем все посты, где используется старое изображение
    global $wpdb;
    $old_url = wp_get_attachment_url($old_id);
    $new_url = wp_get_attachment_url($new_id);

    // Меняем URL в контенте постов
    $wpdb->query(
        $wpdb->prepare(
            "UPDATE {$wpdb->posts} SET post_content = REPLACE(post_content, %s, %s) WHERE post_content LIKE %s",
            $old_url, $new_url, '%' . $wpdb->esc_like($old_url) . '%'
        )
    );

    // Удаляем старое изображение
    wp_delete_attachment($old_id, true);
    return true;
}

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

Советы по безопасности и оптимизации при массовой работе с изображениями

При работе с медиафайлами важно соблюдать несколько правил:

  • Всегда делайте бэкап базы данных и файлов перед массовыми операциями.
  • Используйте транзакции и проверяйте успешность каждого шага.
  • Для больших сайтов операции лучше разбивать на части или запускать через WP-CLI.
  • Оптимизируйте новые изображения с помощью специализированных инструментов, например Clearfy Pro, чтобы ускорить загрузку страниц.

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

Объединим всё в единый скрипт, который можно запускать в административной части:

add_action('admin_post_wparticles_mass_replace_images', 'wparticles_handle_mass_replace_images');

function wparticles_handle_mass_replace_images() {
    if (!current_user_can('manage_options')) {
        wp_die('Доступ запрещён');
    }

    $old_name = isset($_POST['old_image_name']) ? sanitize_text_field($_POST['old_image_name']) : '';
    $new_file_path = isset($_POST['new_image_path']) ? sanitize_text_field($_POST['new_image_path']) : '';

    if (empty($old_name) || empty($new_file_path)) {
        wp_redirect(admin_url('upload.php?message=error')); 
        exit;
    }

    $result = wparticles_replace_image_by_name($old_name, $new_file_path);

    if ($result) {
        wp_redirect(admin_url('upload.php?message=success'));
    } else {
        wp_redirect(admin_url('upload.php?message=error'));
    }
    exit;
}

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

Как добавить пользовательские поля в WordPress без плагинов
10.01.2026
Как массово удалить и заменить картинки в WordPress без плагинов
21.03.2026
Как использовать WPRemark для автоматической оценки контента в WordPress
28.01.2026
Как использовать WPCommunity для создания форума на WordPress
24.01.2026
Как безопасно удалить или отключить плагин в WordPress без потери данных
16.11.2025

Ниже мы подобрали самые актуальные материалы по Вордпресс