Как извлечь изображение из URL и установить в качестве избранного изображения

17

Имея идентификатор Vimeo, я могу получить миниатюру из видео через Vimeo Simple API. Вместо того, чтобы вызывать API каждый раз, когда загружается моя страница, я хочу установить изображение в качестве эскиза поста с помощью save_postловушки (аналогично этому вопросу ).

Моя проблема в том, что я не знаком с URL-вызовами в php. Я бы хотел знать:

  1. Преимущества / недостатки использования такого метода, как curl, по сравнению с WP_Http. Один "лучше", чем другой?

  2. порядок, в котором я должен вызывать функции, чтобы успешно установить миниатюру сообщения.

Любая помощь будет принята с благодарностью.

Дэвид Джон Смит
источник
Кто-нибудь понял это? Я тоже пытаюсь это сделать.

Ответы:

12

Мой любимый способ решения этой проблемы - использовать небольшую документированную функцию, которую я обнаружил в другом сообщении стека: media_sideload_image

Он работает, извлекая URL-адрес изображения в каталог загрузки WordPress, а затем связывая изображение с вложениями поста.

Вы можете попробовать это так:

// 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
источник
4

Привет, Дэвид Джон Смит :

1.) Если вы находитесь в WordPress, (почти) всегда используйте WP_Http; это одна из многих вещей, которые мне нравятся в работе с WordPress. Почему это называется, а не CURL? Ну, потому что он имеет более хороший синтаксис и вызывает CURL, если CURL доступен. Если нет, он выбирает один из 3 других вариантов. Так что это действительно блестящий кусок комплекта.

2.) Чтобы ответить на 2-й вопрос, мне нужно знать, как вы хотите назвать файлы, которые вы загружаете?

MikeSchinkel
источник
Спасибо майк Что касается миниатюр постов, мне все равно, как они названы, я просто хотел бы иметь доступ к ним, связанным с постом, с помощью post_thumbnail()или get_post_meta(). Я думаю, было бы целесообразно назвать его с идентификатором сообщения.
Дэвид Джон Смит
какое-нибудь обновление по этому поводу?
NetConstructor.com
@NetConstructor - очень сложно отслеживать вопросы, которые находятся в состоянии ожидания, так что нет. Я только что создал «ожидающую» папку на панели закладок, посмотрю, не могу ли я быть более согласен с этим. Но у меня сейчас нет времени на это, поэтому придется вернуться к нему.
MikeSchinkel
@Mike - спасибо, Майк, я просто подумал, что у тебя могло бы быть здесь решение, потому что помимо всего прочего ты, кажется,
являешься
@ NetConstructor.com - LOL! Спасибо, я просто мастер отладчика, вот и все. :)
MikeSchinkel