Загрузка изображения по URL

24 апр. 2012 г., 23:55:06
Просмотры: 68.5K
Голосов: 24

Мне очень нравится способ загрузки изображений по URL на Stack Exchange (уверен, многим тоже!). Я искал, но не могу найти - существует ли плагин или метод, похожий на этот, для WordPress?

Я знаю, что изображение можно загрузить и обработать напрямую по URL, введя URL изображения в поле "Имя файла" после нажатия Загрузить/Вставить медиа >> С компьютера >> Выбрать файл

скриншот интерфейса загрузки изображений WordPress

Это отличная функция, но о ней мало кто знает (я сам только что её обнаружил). Хотелось бы что-то более похожее на Stack Exchange, где есть специальная опция, которая явно указывает пользователю на возможность добавления URL изображения.

Как я могу добавить простое поле загрузки файла на новую вкладку в медиа-загрузчике?

Вот туториал о том, как добавить новую вкладку на странице загрузки медиа в WordPress, но я хочу добавить только текст и поле загрузки файла на эту вкладку. Есть идеи? Я не смог найти ничего в WordPress Codex, что касается этой функции или непосредственно поля загрузки файла.

Спасибо.

5
Комментарии

Запросы функций следует оставлять на trac.wordpress.org.

Wyck Wyck
25 апр. 2012 г. 02:10:26

Это не запрос функции. Функция уже встроена.

Travis Pflanz Travis Pflanz
25 апр. 2012 г. 02:31:34

@TravisPflanz Наткнулся на это решение для Windows и подумал, что это гениально - определенно улучшило мой рабочий процесс. Знаешь, как можно сделать такое же на Mac? command+shift+g, кажется, не поддерживает URL, но я не уверен, есть ли другая команда.

user658182 user658182
8 нояб. 2017 г. 15:37:51

Преимущество загрузки по URL по сравнению с "вводом URL в проводнике Windows" заключается в том, что файл загружается напрямую с источника на сервер WordPress; в моем случае через гигабитную линию дата-центра хостинга, вместо того чтобы сначала скачиваться на мой компьютер, а затем загружаться на WordPress через медленное мобильное соединение.

Lenne Lenne
31 янв. 2018 г. 22:25:40

Трюк с 'загрузкой' напрямую по URL не работает в Windows 10 (ни в одном браузере - проверено в Firefox, Chrome, IE11) и, вероятно, не работал в предыдущих версиях Windows с 2012 года. Windows скачивает файл по URL во временную папку на вашем компьютере и загружает оттуда. Поэтому невозможно использовать этот трюк для 'загрузки' больших видеофайлов (чтобы обойти ответ HTTP 413 от хостинг-провайдера до того, как PHP и WordPress даже получат возможность обработать запрос).

Jake Jake
1 нояб. 2019 г. 01:12:48
Все ответы на вопрос 4
5
29

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

Сначала получаем изображение и сохраняем его в директорию загрузок WordPress:

$uploaddir = wp_upload_dir();
$uploadfile = $uploaddir['path'] . '/' . $filename;

$contents= file_get_contents('http://mydomain.com/folder/image.jpg');
$savefile = fopen($uploadfile, 'w');
fwrite($savefile, $contents);
fclose($savefile);

После этого мы можем добавить изображение в медиатеку WordPress:

$wp_filetype = wp_check_filetype(basename($filename), null );

$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => $filename,
    'post_content' => '',
    'post_status' => 'inherit'
);

$attach_id = wp_insert_attachment( $attachment, $uploadfile );

$imagenew = get_post( $attach_id );
$fullsizepath = get_attached_file( $imagenew->ID );
$attach_data = wp_generate_attachment_metadata( $attach_id, $fullsizepath );
wp_update_attachment_metadata( $attach_id, $attach_data );

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

30 апр. 2012 г. 19:42:04
Комментарии

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

fischi fischi
30 апр. 2012 г. 20:07:10

Кажется, я добавил изображение как раз в момент вашего сообщения. Я рассмотрю его подробнее, когда вернусь с обеда. Спасибо за помощь! Всегда ценится.

Travis Pflanz Travis Pflanz
30 апр. 2012 г. 20:53:20

использование file_get_contents с URL не будет работать, если allow_url_fopen отключен в php.iniwp_remote_get будет более совместим в различных окружениях WordPress

highvolt highvolt
24 февр. 2017 г. 16:41:18

Привет, спасибо за ответ. Для чего нужны функции wp_generate_attachment_metadata и wp_update_attachment_metadata?

gdfgdfg gdfgdfg
25 янв. 2019 г. 02:32:11

Это хорошо, но как сделать, чтобы генерировалась миниатюра для Медиатеки и несколько размеров изображений?

Robert Andrews Robert Andrews
18 мая 2020 г. 23:35:38
3
13

Вы можете использовать функции download_url() и wp_handle_sideload().

download_url()

Загружает URL во временный локальный файл, используя HTTP-класс WordPress. Обратите внимание, что вызывающая функция должна удалить файл с помощью unlink().

wp_handle_sideload()

Обрабатывает "сайдлоадинг" — процесс получения медиафайла с другого сервера вместо традиционной загрузки. Этот процесс включает очистку имени файла, проверку расширений на соответствие MIME-типу и перемещение файла в соответствующую директорию внутри папки загрузок.

Пример:

// Даёт доступ к функциям download_url() и wp_handle_sideload()
require_once( ABSPATH . 'wp-admin/includes/file.php' );

// URL логотипа WordPress
$url = 'http://s.w.org/style/images/wp-header-logo.png';
$timeout_seconds = 5;

// Загрузка файла во временную директорию
$temp_file = download_url( $url, $timeout_seconds );

if ( !is_wp_error( $temp_file ) ) {

    // Массив, аналогичный $_FILE при загрузке файлов в PHP
    $file = array(
        'name'     => basename($url), // например: wp-header-logo.png
        'type'     => 'image/png',
        'tmp_name' => $temp_file,
        'error'    => 0,
        'size'     => filesize($temp_file),
    );

    $overrides = array(
        // Указывает WordPress не искать поля формы POST,
        // которые обычно присутствуют,
        // так как мы загружаем файл с удалённого сервера,
        // и полей формы здесь не будет
        // По умолчанию true
        'test_form' => false,

        // Установка false разрешает WordPress принимать пустые файлы (не рекомендуется)
        // По умолчанию true
        'test_size' => true,
    );

    // Перемещение временного файла в директорию загрузок
    $results = wp_handle_sideload( $file, $overrides );

    if ( !empty( $results['error'] ) ) {
        // Здесь можно добавить обработку ошибок
    } else {

        $filename  = $results['file']; // Полный путь к файлу
        $local_url = $results['url'];  // URL файла в директории загрузок
        $type      = $results['type']; // MIME-тип файла

        // Выполните здесь любые действия на основе полученных данных
    }

}
6 янв. 2017 г. 09:15:42
Комментарии

Я использовал этот код, и он успешно добавил изображение в директорию uploads, но когда я перехожу в Медиатеку в админке WordPress, я нигде не могу его найти, и оно не отображается в поиске. Я убедился, что у него правильные права доступа, но всё равно безрезультатно. Есть ли причина, по которой оно не отображается?

Nick Nick
15 июн. 2018 г. 02:05:03

Он не добавляет записи в админке. Если вы хотите добавить записи в админке, то лучше использовать функцию wp_insert_attachment(); https://codex.wordpress.org/Function_Reference/wp_insert_attachment

Или вы можете использовать эту функцию, изменив глобальную переменную $_FILES. media_handle_upload(); https://codex.wordpress.org/Function_Reference/media_handle_upload

Rajilesh Panoli Rajilesh Panoli
20 июн. 2018 г. 17:31:10

Это вообще не работает

zEn feeLo zEn feeLo
8 мая 2019 г. 10:43:11
1

Каталог плагинов WordPress - Grab & Save

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

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

2 мая 2012 г. 09:48:22
Комментарии

Этот уже выведен из эксплуатации. Новый: LH Add Media From Url: https://wordpress.org/plugins/lh-add-media-from-url

Ralf Ralf
27 окт. 2024 г. 01:24:11
1

Существует как минимум три способа импортировать удаленные изображения в WordPress:

  1. Плагин Grab and Save, который упоминался в другом ответе. Этот плагин немного устарел, и он сохраняет файл напрямую, поэтому миниатюры разных размеров не создаются. Последнее обновление было более 2 лет назад на момент написания.

  2. Плагин Import External Image поддерживает массовый импорт удаленно связанных изображений. Возможно, вам потребуется увеличить лимит памяти PHP для его работы. Последнее обновление было более 2 лет назад на момент написания.

  3. Плагин Save & Import Image from URL импортирует изображение с использованием встроенных функций WordPress, поэтому оно корректно добавляется в медиатеку, и создаются все миниатюры. Этот плагин последний раз обновлялся в 2016 году и работает с WordPress 4.7.

Раскрытие информации: я являюсь автором плагина Save & Import Image from URL.

12 дек. 2016 г. 11:32:28
Комментарии

спасибо! Вы знаете о плагинах, совместимых с текущими версиями WordPress (5.4)?

cduguet cduguet
10 апр. 2020 г. 13:49:13