Завантаження зображення з URL-адреси


20

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

Я знаю, що зображення можна завантажити та розчавити безпосередньо з URL-адреси , ввівши URL-адресу зображення у поле Ім'я файлу після натискання кнопки Завантажити / Вставити медіа >> З комп'ютера >> Виберіть Файл

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

Це чудова особливість, але не дуже широко відома (я її фактично я лише відкрив). Я хотів би щось трохи більше, як SE, де є варіант, який дозволяє користувачеві знати, щоб додати URL-адресу зображення.

Як я можу продовжувати додавати поле файлу для завантаження до нової вкладки в медіа-завантажувачі?

Ось підручник для того, як додати нову вкладку на сторінку завантаження медіа у wordpress , але я хочу додати лише частину тексту та поле для завантаження файлів на цю вкладку. Будь-які ідеї? Я не зміг знайти нічого в кодексі WordPress, який стосується цієї функції, або безпосередньо в області завантаження файлів.

Спасибі.


Запити на функції належать на trac.wordpress.org.
Вік

2
Не запит на функцію. Функція вже вбудована.
Травіс Пфланц

@TravisPflanz Підходив до цього для Windows і вважав, що це геніально - безумовно, покращив мій робочий процес. Ви знаєте, як це зробити в Mac? команда + shift + g, схоже, не підтримує URL-адреси, але не була впевнена, чи існує інша команда.
користувач658182

Перевага завантаження з 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

Я думаю, що я додав зображення так само, як ви опублікували. Я погляну більш детально, коли повернусь з обіду. Дякуємо за вашу допомогу! Завжди цінується.
Тревіс Пфланц

використання 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-адреси

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.