埋め込みYouTubeビデオから投稿の注目画像を設定する


15

YouTubeビデオが埋め込まれた投稿を作成する場合(つまり、YouTubeのURLを投稿に貼り付けてWordpressに自動的に埋め込みます)、ビデオセットのサムネイル画像を次のように設定する方法はありますか投稿の注目の画像?

回答:


17

ネイティブではありません。あなたはそれを実現するためにいくつかのコードを書く必要があります-それを行うために必要なコードを提供する素晴らしいpastebin関数があります。

編集(2011年12月19日):

うん、ここでプログラムでこれを行うことができます。functions.phpファイルに次の2つの関数を追加すると、準備完了です。コードはコメントされており、何が起きているのかを説明していますが、ここでは高レベルの期待事項を示します。

絶対です...

  • 投稿を作成する
  • コンテンツに、YouTubeのURLを含めます

コードは...

  • URLをコンテンツから解析します
  • 見つかった最初のURLを取得し、YouTube URLであると想定します
  • リモートサーバーからサムネイルを取得してダウンロードする
  • 現在の投稿のサムネイルとして設定します

投稿に複数のURLを含める場合、コードを変更してYouTube URLを適切に見つける必要があることに注意してください。これは、$attachmentsコレクションを反復処理し、どのURLがYouTube URLのように見えるかを探り出すことで実行できます。

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

注意すべきことの1つは、投稿に投稿サムネイルがなく、投稿サムネイルが設定されると起動しないことを前提としていることです。

次に、投稿のサムネイルを削除してから、メディアアップローダーを使用してこの投稿に画像を添付すると、最新の画像が使用されます。


すばらしいスニペットですが、これから1年後になるかどうかを知っているので、少なくとも(完全なコードが多すぎる場合は)回答の概要(「これを使用してサムネイルを取得し、ダウンロードして添付してください」)。
11

1
get_youtube_idjetpackには、上記のコードでjetpackを使用した場合に500サーバーエラーが発生するという名前のメソッドが含まれていることに注意してください。あなたはその関数の名前を変更すると、それは-OKうまくいく
マイクVormwald
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.