J'ai une metabox qui me permet d'ajouter des vidéos de Youtube et Vimeo à des publications au format vidéo. Je cherche maintenant à générer automatiquement des vignettes pour ces publications au format vidéo. Ceci est mon morceau de code meatabox qui me permet d'intégrer les vidéos:
function my_theme_show_post_video_metabox( $post ) {
wp_nonce_field( 'my_theme_post_video_metabox', '_my_theme_post_video_metabox' );
$video = get_post_meta( $post->ID, '_my_theme_post_video', true );
echo '<h4 style="margin: 10px 0 0 0;">URL - YouTube or Vimeo</h4>';
echo '<input type="text" id="_my_theme_post_video" name="_my_theme_post_video" value="' . $video . '" style="width: 100%;" />';
}
Comment puis-je maintenant générer une vignette à partir de la vidéo intégrée à cette metabox pour l'utiliser comme image de publication?
Il y a quelques étapes à couvrir.
ÉTAPE 2 | YouTube
Générez un tableau de tailles à partir de YouTube pour une utilisation ultérieure:
function getYoutTubeImagesFromID($yt_id, $prefix = 'https:') {
$yt_url = 'img.youtube.com'; // can be 'i3.ytimg.com'
$sizes = array(0, 1, 2, 3, "default", "hqdefault", "mqdefault", "sddefault", "maxresdefault");
$result = array();
foreach($sizes as $size) {
$result [ $size ] = "{$prefix}//img.youtube.com/vi/{$yt_id}/{$size}.jpg";
}
return array(
'id' => $yt_id,
'link' => "{$prefix}//youtu.be/{$yt_id}",
'sizes' => $result,
);
}
Pour tester cela, parcourez une liste d'IDS.
$yt_videos = array('cV5yxrZpuXg', 'LtBTHqi8Gmw', 'VEAY-nRlP5c', 'IWeasYydL8Y', 'fCVXpcR9KDY');
foreach($yt_videos as $yt_id) {
$ytImages = getYoutTubeImagesFromID($yt_id);
$src = $ytImages[ 'sizes' ][ 'hqdefault' ];
$link = $ytImages[ 'link' ];
echo "<a href=\"{$link}\" target=\"_blank\" ><img src=\"{$src}\" ></a>";
print_r($ytImages);
}
Ils doivent chacun produire des informations de taille que vous pouvez utiliser pour votre importation.
Array
(
[id] => cV5yxrZpuXg
[link] => https://youtu.be/cV5yxrZpuXg
[sizes] => Array
(
[0] => https://img.youtube.com/vi/cV5yxrZpuXg/0.jpg
[1] => https://img.youtube.com/vi/cV5yxrZpuXg/1.jpg
[2] => https://img.youtube.com/vi/cV5yxrZpuXg/2.jpg
[3] => https://img.youtube.com/vi/cV5yxrZpuXg/3.jpg
[default] => https://img.youtube.com/vi/cV5yxrZpuXg/default.jpg
[hqdefault] => https://img.youtube.com/vi/cV5yxrZpuXg/hqdefault.jpg
[mqdefault] => https://img.youtube.com/vi/cV5yxrZpuXg/mqdefault.jpg
[sddefault] => https://img.youtube.com/vi/cV5yxrZpuXg/sddefault.jpg
[maxresdefault] => https://img.youtube.com/vi/cV5yxrZpuXg/maxresdefault.jpg
)
)
ÉTAPE 2 | Vimeo
Rassembler des informations vidéo Vimeo
function getVimeoImagesFromID($vimeo_id, $prefix = 'https:') {
$vimeo_url = "{$prefix}//vimeo.com/api/v2/video/{$vimeo_id}.php";
if( ! $vimeo_hash = @file_get_contents($vimeo_url)) {
return false;
}
$result = unserialize($vimeo_hash);
return ( count($result) === 1 ) ? array_shift($result) : $result;
}
// your vimeo id
$vimeo_id = 71472926;
// get available information for video
if($vimeo_hash = getVimeoImagesFromID($vimeo_id)) {
// grab the largest image possible
$vimeo_src = $vimeo_hash [ 'thumbnail_large' ];
echo $vimeo_src; // https://i.vimeocdn.com/video/445043557_640.jpg
}
ÉTAPE 3 | Image de chargement latéral
media_sideload_image l'image de YT sur votre serveur. Assurez-vous de saisir le thumbnail_id
de la src
résultante.
// your youtube id
$yt_id = 'cSXlOeKusWs';
// size information for id
$ytImages = getYoutTubeImagesFromID($yt_id);
// max res image
$url = $ytImages[ 'sizes' ][ 'maxresdefault' ];
// sideload image
$src = media_sideload_image(esc_url($url), NULL, '', 'src');
// convert src to id
$thumbnail_id = attachment_url_to_postid($src);
ÉTAPE 4 | Joindre la vignette du message
set_post_thumbnail basé sur le nouveau thumbnail_id
.
set_post_thumbnail( $post, $thumbnail_id );