Как сделать автоматическую удалённую загрузку файлов в WordPress

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

Почему нужна автоматическая загрузка файлов с удалённого сервера

Ручное скачивание и загрузка файлов занимает время и подвержено ошибкам. Автоматизация снижает трудозатраты и позволяет поддерживать актуальность контента. Например, если вы получаете изображения или документы с API партнёра, автоматический скрипт поможет:

  • регулярно обновлять файлы по расписанию (cron);
  • сохранять файлы с уникальными именами для предотвращения перезаписи;
  • интегрировать файлы в медиабиблиотеку, чтобы их можно было использовать в постах и страницах;
  • обрабатывать ошибки и вести логирование загрузок.

Пример решения: загрузка изображения из URL в медиабиблиотеку WordPress

Ниже приведён пример функции wptricks_import_remote_file(), которая загружает файл по URL, сохраняет в папку загрузок WordPress, регистрирует в медиабиблиотеке и возвращает ID вложения.

function wptricks_import_remote_file($file_url, $post_id = 0) {
    // Проверяем, доступен ли URL
    $response = wp_remote_get($file_url);
    if (is_wp_error($response)) {
        return new WP_Error('download_error', 'Не удалось скачать файл');
    }

    $file_contents = wp_remote_retrieve_body($response);
    if (empty($file_contents)) {
        return new WP_Error('empty_file', 'Файл пустой');
    }

    // Определяем имя файла
    $filename = basename(parse_url($file_url, PHP_URL_PATH));

    // Получаем директорию загрузок
    $upload_dir = wp_upload_dir();
    $file_path = $upload_dir['path'] . '/' . $filename;

    // Сохраняем файл на диск
    file_put_contents($file_path, $file_contents);

    // Проверяем тип файла
    $wp_filetype = wp_check_filetype($filename, null);

    // Создаём массив для вставки в медиабиблиотеку
    $attachment = array(
        'post_mime_type' => $wp_filetype['type'],
        'post_title'     => sanitize_file_name($filename),
        'post_content'   => '',
        'post_status'    => 'inherit'
    );

    // Вставляем вложение в базу данных
    $attach_id = wp_insert_attachment($attachment, $file_path, $post_id);

    // Загружаем необходимые функции для генерации метаданных
    require_once(ABSPATH . 'wp-admin/includes/image.php');

    // Генерируем метаданные и сохраняем
    $attach_data = wp_generate_attachment_metadata($attach_id, $file_path);
    wp_update_attachment_metadata($attach_id, $attach_data);

    return $attach_id;
}

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

$file_url = 'https://example.com/image.jpg';
$post_id = 123;
$attachment_id = wptricks_import_remote_file($file_url, $post_id);
if (is_wp_error($attachment_id)) {
    error_log('Ошибка загрузки: ' . $attachment_id->get_error_message());
} else {
    set_post_thumbnail($post_id, $attachment_id); // Устанавливаем как миниатюру поста
}

Автоматизация с помощью WP-Cron: регулярная загрузка файлов

Чтобы регулярно обновлять файлы с удалённого сервера, стоит задействовать WP-Cron. Например, настроим задачу, которая будет запускаться раз в сутки и загружать актуальные файлы.

Регистрация события WP-Cron

Добавьте в functions.php или в свой плагин следующий код:

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

function wptricks_import_files_callback() {
    $files_to_import = [
        'https://example.com/image1.jpg',
        'https://example.com/document.pdf',
    ];

    foreach ($files_to_import as $file_url) {
        $result = wptricks_import_remote_file($file_url);
        if (is_wp_error($result)) {
            error_log('Ошибка загрузки файла ' . $file_url . ': ' . $result->get_error_message());
        } else {
            error_log('Файл успешно загружен: ' . $file_url);
        }
    }
}
add_action('wptricks_import_files_event', 'wptricks_import_files_callback');

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

Работа с большими файлами и обработка ошибок

Если вы загружаете большие файлы, стоит учитывать лимиты PHP и таймауты. Для этого можно:

  • использовать потоковую загрузку с помощью fopen и stream_copy_to_stream;
  • делить загрузку на части или использовать внешний скрипт (например, на Python или bash);
  • обрабатывать ошибки CURL и повторять попытки загрузки;
  • логировать все операции в отдельный файл для диагностики.

Пример потоковой загрузки

function wptricks_stream_download($url, $save_path) {
    $read_handle = fopen($url, 'rb');
    if (!$read_handle) return false;

    $write_handle = fopen($save_path, 'wb');
    if (!$write_handle) {
        fclose($read_handle);
        return false;
    }

    while (!feof($read_handle)) {
        $buffer = fread($read_handle, 8192);
        fwrite($write_handle, $buffer);
    }

    fclose($read_handle);
    fclose($write_handle);
    return true;
}

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

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

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

  • WP All Import — мощный инструмент для импорта данных и файлов из CSV/XML с возможностью автоматизации;
  • Media from FTP — позволяет импортировать файлы, загруженные по FTP, в медиабиблиотеку;
  • External Media — работает с внешними хранилищами и позволяет использовать удалённые файлы без копирования;
  • WPGPT — плагин с расширенными возможностями автоматизации, который можно интегрировать для создания сложных сценариев загрузки и обработки контента.

Советы по безопасности при загрузке файлов из внешних источников

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

  • Всегда проверяйте MIME-тип файла и расширение;
  • ограничивайте список допустимых доменов для загрузки файлов;
  • используйте функции WordPress для проверки и фильтрации файлов;
  • обновляйте WordPress и плагины для защиты от известных уязвимостей;
  • делайте резервные копии сайта перед внедрением новых автоматизаций.

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

Автоматизация создания и удаления записей в WordPress через CRON
22.01.2026
Как остановить автоматическую регистрацию спамеров в WooCommerce
20.04.2026
Как удалить плагин без удаления файлов в WordPress
19.01.2026
WooCommerce: автоматическое возврат средств и смена статуса заказа через код
18.06.2026
WooCommerce: автоматическое удаление отменённых заказов с отсрочкой
04.06.2026