WordPress media_sideload_image – http://placekitten.com/100/100 herunterladen?

Lesezeit: 3 Minuten

media_sideload_image

WordPress hat eine Funktion namens media_sideload_image. Es wird verwendet, um ein Bild hochzuladen und an die Medienbibliothek anzuhängen.

Ich akzeptiere Bild-URLs wie folgt:

h**p://s.wordpress.org/style/images/wp-header-logo.png

Umgeschriebene URLs

Einige URLs im Web werden umgeschrieben, zum Beispiel:

http://placekitten.com/100/100

Fehlermeldung:

Entschuldigung, dieser Dateityp ist aus Sicherheitsgründen nicht erlaubt.

Der Dateityp ist eine korrekte JPG-Datei, aber die Dateierweiterung fehlt.

Das Hinzufügen zusätzlicher MIME-Typen funktioniert in meinem Fall nicht

Ich habe diese Funktion ausprobiert, aber sie hilft mir nicht, weil es die Dateierweiterung ist, die nicht festgelegt ist.

add_filter('upload_mimes', 'add_custom_upload_mimes');
function add_custom_upload_mimes($existing_mimes){
    $existing_mimes['jpeg'] = 'image/jpeg';
    return $existing_mimes;
}

Frage

Wie lade ich die URL h**p://placekitten.com/100/100 mit media_sideload_image oder ähnlichem hoch, um das Bild an die Medienbibliothek anzuhängen?

Ich habe gestern Ihre Frage gelesen, wann ich diese Lösung brauche. Ich finde eine Antwort nach 24 Stunden.

Hier ist die vollständige Lösung

require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');

$image_url = "http://domain.com/blog/23092839823";
$image_tmp = download_url($image_url);

    if( is_wp_error( $image_tmp ) ){
        echo "<br> Image Download Fail:";
    }else {
        $image_size = filesize($image_tmp);
        $image_name = basename($image_url) . ".jpg"; // .jpg optional


        //Download complete now upload in your project
        $file = array(
           'name' => $image_name, // ex: wp-header-logo.png
           'type' => 'image/jpg',
           'tmp_name' => $image_tmp,
           'error' => 0,
           'size' => $image_size
        );


        //This image/file will show on media page...
        $thumb_id = media_handle_sideload( $file, $post_id, $desc);
        set_post_thumbnail($post_id, $thumb_id); //optional

        echo "<br> Image Save ";
    }

  • Das hat wirklich geholfen! Das Fehlen einer Erweiterung des Dateinamens spielte keine Rolle, solange Name und Typ richtig definiert waren.

    – MTT

    5. September 2018 um 0:40 Uhr

Wenn Sie in den Kern graben, sieht es so aus, als würden Sie den brauchen unfiltered_upload Möglichkeit, Dateien ohne Erweiterung hochzuladen:

if ( ( !$type || !$ext ) && !current_user_can( 'unfiltered_upload' ) )
    return $upload_error_handler( $file, __( 'Sorry, this file type is not permitted for security reasons.' ));

Laut dem Dokumentation zu Rollen und Fähigkeiten:

Diese Funktion steht standardmäßig keiner Rolle zur Verfügung (einschließlich Super-Admins). Die Fähigkeit muss aktiviert werden, indem die folgende Konstante definiert wird:

define( 'ALLOW_UNFILTERED_UPLOADS', true );

Wenn diese Konstante definiert ist, erhalten alle Rollen bei einer Einzelsite-Installation die unfiltered_upload-Fähigkeit, aber nur Super-Admins erhalten die Fähigkeit bei einer Multisite-Installation.

Benutzer-Avatar
Balázs Varga

Heute stand ich vor dem gleichen Problem und habe mir eine etwas schmutzige, aber erfolgreiche Methode ausgedacht, um das zu umgehen. Wie sich herausstellt, sucht media_sideload_image nur nach der Erweiterung .jpg (oder einem beliebigen Bild) in der URL. Wenn Sie sie also am Ende Ihres Links hinzufügen, sollte es funktionieren.

Sie müssen also nur etwas am Ende der URL hinzufügen, das die Ausgabe nicht ändert, zum Beispiel:

http://placekitten.com/100/100?name=image.jpg

Ich kann nicht sagen, dass es die ganze Zeit funktioniert, aber es funktioniert hier (GETESTET). 🙂

1320670cookie-checkWordPress media_sideload_image – http://placekitten.com/100/100 herunterladen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy