Настройка избранного изображения публикации из встроенного видео YouTube
Если я создам публикацию, в которой есть встроенное видео YouTube (поэтому все, что я делаю, это вставляю URL YouTube в публикацию и позволяю Wordpress автоматически вставлять его для меня), есть ли способ установить уменьшенное изображение видео в качестве отличительного изображения публикации?
1 answers
Не изначально. Вам придется написать некоторый код, чтобы это произошло - есть хорошая функция pastebin, которая предоставляет необходимый код для этого.
Редактировать (12/19/2011):
Да, вот как вы можете сделать это программно. Добавьте следующие две функции в свой functions.php файл, и вы должны быть готовы идти. Код был прокомментирован, чтобы объяснить, что происходит, но вот высокий уровень того, чего следует ожидать:
Ты должен...
- Создать сообщение
- В содержимом укажите URL-адрес YouTube
Код будет...
- Проанализируйте URL-адрес из содержимого
- Захватит первый найденный URL-адрес и предположит, что это URL-адрес YouTube
- Возьмите миниатюру с удаленного сервера и загрузите ее
- Установите его в качестве миниатюры текущего сообщения
Обратите внимание, что если вы включаете несколько URL-адресов в свой пост, вам потребуется изменить код, чтобы правильно найти URL-адрес YouTube. Это может быть сделано путем перебора коллекции $attachments
и определения того, какой URL-адрес похож на URL-адрес YouTube.
function set_youtube_as_featured_image($post_id) {
// only want to do this if the post has no thumbnail
if(!has_post_thumbnail($post_id)) {
// find the youtube url
$post_array = get_post($post_id, ARRAY_A);
$content = $post_array['post_content'];
$youtube_id = get_youtube_id($content);
// build the thumbnail string
$youtube_thumb_url = 'http://img.youtube.com/vi/' . $youtube_id . '/0.jpg';
// next, download the URL of the youtube image
media_sideload_image($youtube_thumb_url, $post_id, 'Sample youtube image.');
// find the most recent attachment for the given post
$attachments = get_posts(
array(
'post_type' => 'attachment',
'numberposts' => 1,
'order' => 'ASC',
'post_parent' => $post_id
)
);
$attachment = $attachments[0];
// and set it as the post thumbnail
set_post_thumbnail( $post_id, $attachment->ID );
} // end if
} // set_youtube_as_featured_image
add_action('save_post', 'set_youtube_as_featured_image');
function get_youtube_id($content) {
// find the youtube-based URL in the post
$urls = array();
preg_match_all('#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $content, $urls);
$youtube_url = $urls[0][0];
// next, locate the youtube video id
$youtube_id = '';
if(strlen(trim($youtube_url)) > 0) {
parse_str( parse_url( $youtube_url, PHP_URL_QUERY ) );
$youtube_id = $v;
} // end if
return $youtube_id;
} // end get_youtube_id
Следует отметить, что это предполагает, что у вашего поста нет миниатюры поста и он не будет срабатывать после установки миниатюры поста.
Во-вторых, если вы удалите миниатюру публикации, а затем прикрепите изображение к этой публикации с помощью загрузчика мультимедиа, будет использовано самое последнее изображение.