web-dev-qa-db-ja.com

メタボックスに埋め込まれたビデオから注目の画像を生成する方法

私は私がビデオ投稿フォーマットの投稿にYoutubeとVimeoからのビデオを追加することを可能にするメタボックスを持っています。私は今、ビデオ投稿フォーマットで自動的にこれらの投稿のサムネイルを生成することを検討しています。これは私がビデオを埋め込むことを可能にするコードの私のmeataboxビットです:

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%;" />';

}

おすすめの画像として使用するために、このメタボックスに埋め込まれたビデオからサムネイルを生成する方法を教えてください。

2
Madeirense

あなたがカバーする必要があるいくつかのステップがあります。

  1. MetaBoxの埋め込みからIDを取得する
  2. IDに基づいて利用可能なサイズの一覧を取得する
  3. まだ存在しない場合は、ライブラリに画像をインポートします
  4. 投稿に新しいファイルを添付します。

STEP 2 | YouTube

後で使用するためにYouTubeからサイズの配列を生成します。

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,
    );
}

これをテストするには、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);
}

それらはそれぞれあなたがあなたの輸入に使うことができるサイズ情報を作り出すべきです。

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
        )

)

STEP 2 |ビメオ

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
}

STEP 3 |サイドロード画像

media_sideload_image YTからあなたのサーバーまでの画像。結果のsrcからthumbnail_idを必ず取得してください。

// 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);

STEP 4 |投稿サムネイルを添付

set_post_thumbnail は新しいthumbnail_idに基づきます。

set_post_thumbnail( $post, $thumbnail_id );
2
jgraup