Comment récupérer l'image de l'URL et la définir comme image sélectionnée / miniature de publication

17

Étant donné un identifiant Vimeo, je peux récupérer une miniature de la vidéo via l'API Vimeo Simple. Plutôt que d'appeler l'API à chaque fois que ma page se charge, je veux définir l'image comme miniature de publication à l'aide du save_postcrochet (similaire à cette question ).

Mon problème est que je ne connais pas les appels URL en php. J'aimerais savoir:

  1. les avantages / inconvénients de l'utilisation d'une méthode comme curl par rapport à WP_Http. Est-ce que l'un est meilleur que l'autre?

  2. l'ordre dans lequel je dois appeler les fonctions pour définir avec succès la miniature du message.

Toute aide serait grandement appréciée.

David John Smith
la source
Quelqu'un a-t-il compris cela? J'essaie de faire ça aussi.

Réponses:

12

Ma façon préférée de gérer ce problème a été d'utiliser une petite fonction documentée que j'ai découverte sur un autre post de la pile: media_sideload_image

Cela fonctionne en récupérant une URL d'image dans le répertoire de téléchargement WordPress, puis en associant l'image aux pièces jointes d'un article.

Vous pouvez l'essayer comme ceci:

// 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
la source
4

Bonjour @David John Smith :

1.) Si vous êtes dans WordPress, utilisez (presque) toujours WP_Http; c'est l'une des nombreuses choses que j'aime dans le travail avec WordPress. Pourquoi l'appeler et non CURL? Eh bien, car il a une syntaxe plus agréable et il appelle CURL si CURL est disponible. Sinon, il choisit parmi l'une des 3 autres options. C'est donc vraiment un super kit.

2.) Pour répondre à la 2e question, j'aurai besoin de savoir comment vous voulez nommer les fichiers que vous téléchargez?

MikeSchinkel
la source
Merci Mike. En ce qui concerne les miniatures des articles, peu m'importe comment ils sont nommés, je voudrais juste pouvoir y accéder en relation avec un article, soit par post_thumbnail()ou get_post_meta(). Je suppose qu'il serait logique de le nommer avec l'ID du message.
David John Smith
Une mise à jour pour ceci?
NetConstructor.com
@NetConstructor - Il est vraiment difficile de garder une trace des questions qui sont dans un état "en attente", donc non. Je viens de créer un dossier "en attente" sur ma barre de favoris, je vais voir si je ne peux pas être plus cohérent avec ça. Mais, je n'ai pas le temps en ce moment pour celui-ci, je devrai y revenir.
MikeSchinkel
@Mike - merci Mike, je pensais juste que vous aviez peut-être une solution ici parce que vous semblez être le maître de ce genre de choses :-)
NetConstructor.com
@ NetConstructor.com - LOL! Merci, je suis juste maître du débogueur, c'est tout. :)
MikeSchinkel