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

20

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

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

введите описание изображения здесь

Это отличная функция, но не очень широко известная (на самом деле я ее только что обнаружил). Я хотел бы что-то более похожее на SE, где есть опция, позволяющая пользователю добавить URL-адрес изображения.

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

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

Благодарю.

Трэвис Пфланц
источник
Запросы на функции принадлежат trac.wordpress.org.
Wyck
2
Не запрос функции. Функция уже встроена.
Travis Pflanz
@TravisPflanz Наткнулся на это для Windows и подумал, что это гений - определенно улучшил мой рабочий процесс. Знаешь, как это сделать в Mac? Команда + shift + g, кажется, не поддерживает URL, но не была уверена, была ли другая команда.
user658182
Преимущество загрузки с URL-адреса по сравнению с «вводить URL-адрес в Windows FileManager» заключается в том, что файл загружается непосредственно из источника на сервер WordPress; в моем случае через гигабитную линию хост-центров вместо того, чтобы сначала загружаться на мой компьютер, а затем до WordPress через медленное мобильное соединение.
Ленн
Уловка «загрузки» напрямую с URL-адреса не работает в Windows 10 (в любом браузере, протестированном Firefox, Chrome, IE11) и, вероятно, не работала в предыдущих версиях Windows с 2012 года. Windows будет загружать файл с URL-адреса во временную папку на вашем компьютере и загрузить оттуда. Таким образом, невозможно использовать этот прием для «загрузки» больших видеофайлов (чтобы обойти ответ HTTP 413 хостинг-провайдера до того, как PHP и WordPress даже заглянут в него).
Джейк

Ответы:

24

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

во-первых, получите изображение и сохраните его в своем загружаемом каталоге:

$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);

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

$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-адресов или что-то в этом роде, вы можете запустить скрипт в цикле, но имейте в виду, что функции изображения занимают много времени и памяти для выполнения.

fischi
источник
о, извините, я сначала не видел изображение. возможно я напишу небольшой плагин, делающий именно это. Я надеюсь, что вы можете пока ладить с моим сценарием - я буду держать вас в курсе новостей плагина.
fischi
Я думаю, что я добавил изображение так же, как вы отправили. Я приму более глубокий взгляд, когда вернусь с обеда. Спасибо за твою помощь! Всегда ценится.
Трэвис Пфланц
Использование file_get_contentsс URL не будет работать, если allow_url_fopenоно отключено php.ini- wp_remote_getбудет более совместимо с различными средами WP
highvolt
Привет, спасибо за ответ, за что есть wp_generate_attachment_metadataи wp_update_attachment_metadata?
gdfgdfg
12

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

download_url()

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

wp_handle_sideload()

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

Пример:

// Gives us access to the download_url() and wp_handle_sideload() functions
require_once( ABSPATH . 'wp-admin/includes/file.php' );

// URL to the WordPress logo
$url = 'http://s.w.org/style/images/wp-header-logo.png';
$timeout_seconds = 5;

// Download file to temp dir
$temp_file = download_url( $url, $timeout_seconds );

if ( !is_wp_error( $temp_file ) ) {

    // Array based on $_FILE as seen in PHP file uploads
    $file = array(
        'name'     => basename($url), // ex: wp-header-logo.png
        'type'     => 'image/png',
        'tmp_name' => $temp_file,
        'error'    => 0,
        'size'     => filesize($temp_file),
    );

    $overrides = array(
        // Tells WordPress to not look for the POST form
        // fields that would normally be present as
        // we downloaded the file from a remote server, so there
        // will be no form fields
        // Default is true
        'test_form' => false,

        // Setting this to false lets WordPress allow empty files, not recommended
        // Default is true
        'test_size' => true,
    );

    // Move the temporary file into the uploads directory
    $results = wp_handle_sideload( $file, $overrides );

    if ( !empty( $results['error'] ) ) {
        // Insert any error handling here
    } else {

        $filename  = $results['file']; // Full path to the file
        $local_url = $results['url'];  // URL to the file in the uploads dir
        $type      = $results['type']; // MIME type of the file

        // Perform any actions here based in the above results
    }

}
Раджилеш Паноли
источник
Я использовал этот код, и он успешно добавил изображение в каталог закачек, но когда я захожу в медиатеку в бэкэнде Wordpress, я не могу его найти нигде, и он не отображается в поиске. Я удостоверился, что у этого были правильные разрешения, но все еще не удача. По какой-то причине это не будет появляться?
Ник
Он не будет добавлять записи на стороне администратора. Если вы хотите добавить записи в админку, то лучше использовать, wp_insert_attachment (); codex.wordpress.org/Function_Reference/wp_insert_attachment или вы можете использовать это, изменив глобальную переменную $ _FILES. media_handle_upload (); codex.wordpress.org/Function_Reference/media_handle_upload
Раджилеш Паноли,
это не работает вообще
Кэмерон
5

Каталог плагинов WordPress - захват и сохранение

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

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

Трэвис Пфланц
источник
1

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

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

  2. Плагин «Импортировать внешние изображения» имеет массовый импорт удаленных связанных изображений. Возможно, вам придется увеличить ограничение памяти PHP, чтобы это работало. Последнее обновление более 2 лет назад на момент написания.

  3. Плагин «Сохранить и импортировать изображение из URL» импортирует изображение с помощью встроенных функций, поэтому оно правильно создается в галерее мультимедиа и создаются все эскизы и т. Д. Этот плагин последний раз обновляется в 2016 году и работает с WordPress 4.7.

Раскрытие: я создал плагин для сохранения и импорта изображений из URL

user3096626
источник