Przesyłanie obrazu z adresu URL

20

Naprawdę podoba mi się sposób, w jaki SE przesyła obraz z adresu URL (jestem pewien, że wielu to robi!). Szukałem, ale nie mogę znaleźć, czy istnieje wtyczka lub metoda podobna do tej dostępnej dla WordPress?

Wiem, że obraz można przesłać i skasować bezpośrednio z adresu URL , wprowadzając adres URL obrazu w polu Nazwa pliku po kliknięciu opcji Prześlij / Włóż nośnik >> Z komputera >> Wybierz plik

wprowadź opis zdjęcia tutaj

To świetna funkcja, ale mało znana (właściwie ją odkryłem). Chciałbym coś bardziej podobnego do SE, gdzie jest opcja, która pozwala użytkownikowi wiedzieć, aby dodać adres URL obrazu.

Jak mogę przejść do dodawania pola pliku do przesłania do nowej karty w programie do przesyłania multimediów?

Oto samouczek dotyczący dodawania nowej karty na stronie Przesyłanie multimediów w wordpress , ale chcę dodać do tej karty tylko trochę tekstu i pole przesyłania plików. Jakieś pomysły? Nie mogłem znaleźć w Kodeksie WordPress niczego, co dotyczyłoby tej funkcji lub pola przesyłania plików bezpośrednio.

Dzięki.

Travis Pflanz
źródło
Żądania funkcji należą do trac.wordpress.org.
Wyck
2
To nie jest prośba o funkcję. Funkcja jest już wbudowana.
Travis Pflanz,
@TravisPflanz Wpadłem na to z myślą o Windowsie i pomyślałem, że to genialne - zdecydowanie poprawiło mój przepływ pracy. Czy wiesz, jak to zrobić na komputerze Mac? polecenie + shift + g nie obsługuje adresów URL, ale nie był pewien, czy istnieje inne polecenie.
user658182,
Zaletą przesyłania z adresu URL nad „enter url in windows filemanager” jest to, że plik jest ładowany bezpośrednio ze źródła na serwer wordpress; w moim przypadku za pośrednictwem linii gigabitowych centrów hostingowych zamiast najpierw pobierany na komputer, a następnie do wordpress przez wolne połączenie mobilne.
Lenne
Sztuczka polegająca na „przesyłaniu” bezpośrednio z adresu URL nie działa w systemie Windows 10 (w żadnej przetestowanej przeglądarce Firefox, Chrome, IE11) i prawdopodobnie nie działała w poprzednich wersjach systemu Windows od 2012 roku. Windows pobierze plik z adresu URL do tymczasowej lokalizacji na komputerze i przesyłaj stamtąd. Dlatego nie można użyć tej sztuczki do „przesyłania” dużych plików wideo (aby ominąć odpowiedź dostawcy HTTP 413 hosta, zanim PHP i WordPress nawet przejrzą).
Jake

Odpowiedzi:

24

możesz napisać skrypt php lub stworzyć własną wtyczkę tego kodu tutaj, użyłem go w jednym z moich projektów, w którym musiałem zaimportować dużą liczbę obrazów.

najpierw pobierz obraz i zapisz go w swoim katalogu do wysyłania:

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

potem możemy wstawić obraz do biblioteki multimediów:

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

i voila - proszę bardzo. możesz także ustawić różne inne parametry w tablicy załączników. jeśli masz tablicę adresów URL lub coś w tym rodzaju, możesz uruchomić skrypt w pętli - pamiętaj jednak, że wykonanie funkcji obrazu zajmuje dużo czasu i pamięci.

fischi
źródło
przepraszam, na początku nie widziałem obrazu. może napiszę małą wtyczkę, robiąc dokładnie to. Mam nadzieję, że do tej pory dogadałeś się z moim skryptem - będę Cię informować o nowościach dotyczących wtyczek.
fischi
Myślę, że dodałem obraz tak, jak napisałeś. Przyjdę bardziej dogłębnie, kiedy wrócę z lunchu. Dziękuję za Twoją pomoc! Zawsze mile widziane.
Travis Pflanz,
użycie file_get_contentsz adresem URL nie będzie działać, jeśli allow_url_fopenzostanie wyłączone w php.ini- wp_remote_getbędzie bardziej kompatybilne w różnych środowiskach WP
highvolt
Cześć, dzięki za odpowiedź, za co wp_generate_attachment_metadatai dlaczego wp_update_attachment_metadata?
gdfgdfg
12

Możesz użyć funkcji download_url()i wp_handle_sideload().

download_url()

Pobiera adres URL do lokalnego pliku tymczasowego za pomocą klasy HTTP WordPress. Należy pamiętać, że funkcja wywołująca musi rozłączyć () plik.

wp_handle_sideload()

Obsługuj ładowanie boczne, czyli proces pobierania elementu multimedialnego z innego serwera zamiast tradycyjnego przesyłania multimediów. Ten proces obejmuje odkażanie nazwy pliku, sprawdzanie rozszerzeń dla typu MIME i przenoszenie pliku do odpowiedniego katalogu w katalogu uploads.

Przykład:

// 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
    }

}
Rajilesh Panoli
źródło
Użyłem tego kodu i pomyślnie dodałem obraz w katalogu uploads, ale kiedy idę do mojej biblioteki multimediów w backendie Wordpress, nie mogę go nigdzie znaleźć i nie pojawia się w wyszukiwaniu. Upewniłem się, że ma prawidłowe uprawnienia, ale nadal nie mam szczęścia. Czy jest jakiś powód, dla którego się nie pojawiał?
Nick
Nie doda wpisów po stronie administratora. Jeśli chcesz dodać wpisy w adminie, to lepiej możesz użyć wp_insert_attachment (); codex.wordpress.org/Function_Reference/wp_insert_attachment lub możesz tego użyć, modyfikując zmienną globalną $ _FILES. media_handle_upload (); codex.wordpress.org/Function_Reference/media_handle_upload
Rajilesh Panoli
to w ogóle nie działa
Cameron
5

Katalog wtyczek WordPress - Chwyć i zapisz

Ta wtyczka pozwala pobrać obraz ze zdalnego adresu URL i zapisać we własnej bibliotece multimediów wordpress. W ten sposób nigdy nie martwisz się, czy zdalny obraz został usunięty przez jego właściciela. Oszczędza to również kroków do pobrania obrazu na komputer lokalny i przesłania go ponownie do własnego wordpress.

Po pobraniu obrazu Wordpress wyświetli monit o „wstawienie do posta” lub „zmianę atrybutów”, tak jak po przesłaniu obrazu.

Travis Pflanz
źródło
1

Istnieją co najmniej trzy sposoby importowania zdalnych obrazów do WordPress:

  1. Chwyć i zapisz wtyczkę , o której mowa w innej odpowiedzi. Ta wtyczka jest nieco starsza i zapisuje plik bezpośrednio, więc miniatury w różnych rozmiarach nie są tworzone. Ostatnia aktualizacja ponad 2 lata temu w momencie pisania.

  2. Wtyczka importu obrazu zewnętrznego ma import zbiorczy dla zdalnie połączonych obrazów. Aby to zadziałało, może być konieczne zwiększenie limitu pamięci PHP. Ostatnia aktualizacja ponad 2 lata temu w momencie pisania.

  3. Zapisz i importuj obraz z wtyczki URL importuje obraz za pomocą funkcji natywnych, więc jest on poprawnie tworzony w galerii multimediów i tworzone są wszystkie miniatury itp. Ta wtyczka została ostatnio zaktualizowana w 2016 roku i działa z WordPress 4.7

Ujawnienie: Stworzyłem Zapisz i importuj obraz z wtyczki URL

użytkownik3096626
źródło