web-dev-qa-db-fra.com

Comment générer une image sélectionnée à partir d'une vidéo intégrée dans une métabox

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?

2
Madeirense

Il y a quelques étapes à couvrir.

  1. Obtenir l'identifiant de MetaBox
  2. Tirez la liste des tailles disponibles en fonction de l'ID
  3. Importer une image dans votre bibliothèque s'il n'existe pas déjà
  4. Joindre un nouveau fichier à poster.

É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 );
2
jgraup