So rufen Sie ein Bild von der URL ab und legen es als vorgestellten Bild- / Post-Thumbnail fest

17

Wenn ich eine Vimeo-ID habe, kann ich über die Vimeo Simple API eine Miniaturansicht aus dem Video abrufen. Anstatt die API jedes Mal aufzurufen, wenn meine Seite geladen wird, möchte ich das Bild mithilfe des save_postHooks als Post-Thumbnail festlegen (ähnlich wie bei dieser Frage ).

Mein Problem ist, dass ich mit URL-Aufrufen in PHP nicht vertraut bin. Ich würde gerne wissen:

  1. die Vor- / Nachteile der Verwendung einer Methode wie Locken im Vergleich zu WP_Http. Ist einer "besser" als der andere?

  2. Die Reihenfolge, in der ich die Funktionen aufrufen soll, um das Post-Thumbnail erfolgreich zu setzen.

Jede Hilfe wäre sehr dankbar.

David John Smith
quelle
Hat jemand das herausgefunden? Ich versuche das auch zu tun.

Antworten:

12

Meine Lieblingsmethode zur Lösung dieses Problems war die Verwendung einer kleinen dokumentierten Funktion, die ich in einem anderen Stapelbeitrag entdeckt habe: media_sideload_image

Es funktioniert, indem eine Bild-URL in das WordPress-Upload-Verzeichnis abgerufen und das Bild dann den Anhängen eines Posts zugeordnet wird.

Sie können es so versuchen:

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

// $post_id == the post you want the image to be attached to
// $video_thumb_url == the vimeo video's thumb url
// $description == optional description

// load the image
$result = media_sideload_image($video_thumb_url, $post_id, $description);

// then find the last image added to the post attachments
$attachments = get_posts(array('numberposts' => '1', 'post_parent' => $post_id, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC'));


if(sizeof($attachments) > 0){
    // set image as the post thumbnail
    set_post_thumbnail($post_id, $attachments[0]->ID);
}  
Sxalexander
quelle
4

Hallo @ David John Smith :

1.) Wenn Sie in WordPress sind, verwenden Sie (fast) immer WP_Http; Es ist eines der vielen Dinge, die ich an der Arbeit mit WordPress liebe. Warum es nennen und nicht CURL? Nun, weil es eine schönere Syntax hat und CURL aufruft, wenn CURL verfügbar ist. Andernfalls wird eine von drei anderen Optionen ausgewählt. Es ist also wirklich ein brillantes Teil des Kits.

2.) Um die 2. Frage zu beantworten, muss ich wissen, wie Sie die Dateien benennen möchten, die Sie herunterladen?

MikeSchinkel
quelle
Danke Mike. Was die Post-Thumbnails angeht, ist es mir eigentlich egal, wie sie benannt sind. Ich möchte nur in der Lage sein, auf sie im Zusammenhang mit einem Post zuzugreifen, entweder von post_thumbnail()oder get_post_meta(). Ich denke, es wäre sinnvoll, ihn mit der Post-ID zu benennen.
David John Smith
Gibt es hierzu Neuigkeiten?
NetConstructor.com
@NetConstructor - Es ist wirklich schwer, Fragen im Auge zu behalten, die sich in einem "ausstehenden" Zustand befinden, also nein. Ich habe gerade einen "ausstehenden" Ordner in meiner Lesezeichenleiste erstellt. Ich werde sehen, ob ich damit nicht konsistenter umgehen kann. Aber ich habe momentan keine Zeit für diese, also muss ich darauf zurückkommen.
MikeSchinkel
@ Mike - danke Mike, ich dachte nur, du hättest hier vielleicht eine Lösung gefunden, denn unter anderem
scheinst
@ NetConstructor.com - LOL! Danke, ich bin nur ein Meister des Debuggers, das ist alles. :)
MikeSchinkel