Gömülü bir YouTube videosundan bir yayının öne çıkan resmini ayarlama


15

İçinde gömülü bir YouTube videosu olan bir yayın oluşturursam (tek yaptığım, YouTube URL'sini yayına yapıştırmak ve Wordpress'in otomatik olarak benim için yerleştirmesine izin vermek), videonun küçük resim görüntüsünü şu şekilde ayarlamanın bir yolu var mı? yayının öne çıkan resmi?

Yanıtlar:


17

Doğal olarak değil. Bunu yapmak için bir kod yazmanız gerekir - bunu yapmak için gerekli kodu sağlayan güzel bir macun işlevi vardır.

Düzenleme (19.12.2011):

Evet, bunu programlı olarak nasıl yapabilirsiniz? Function.php dosyanıza aşağıdaki iki işlevi ekleyin; gitmekte fayda var. Kod, neler olduğunu açıklamak için yorumlandı, ancak burada ne olacağını yüksek seviyede görebilirsiniz:

Mecbursun...

  • Bir yayın oluşturun
  • İçeriğe bir YouTube URL'si ekleyin

Kod ...

  • URL'leri içerikten ayrıştırın
  • Bulduğu ilk URL'yi alır ve bunun bir YouTube URL'si olduğunu varsayar
  • Uzak sunucudan küçük resmi alın ve indirin
  • Geçerli yayının küçük resmi olarak ayarla

Yayınınıza birden çok URL eklerseniz, YouTube URL'sini doğru bir şekilde bulmak için kodu değiştirmeniz gerektiğini unutmayın. Bu, $attachmentskoleksiyonda yineleme yapıp hangi URL'lerin bir YouTube URL'si gibi göründüğünü koklayarak yapılabilir .

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

Dikkat edilmesi gereken bir nokta, bunun yayınınızın küçük resim olmadığını ve bir gönderi küçük resmi ayarlandıktan sonra tetiklenmeyeceğini varsayar.

İkincisi, yazı küçük resmini kaldırır ve ardından medya yükleyiciyi kullanarak bu yazıya bir resim eklerseniz, en son resim kullanılır.


Harika bir snippet, ancak bundan sonra orada olup olmayacağını kim bilebilir - lütfen cevabınızda ne yaptığının en azından özetini (tam kod çok fazla ise) eklemeye çalışın (örneğin "bunu küçük resim almak için kullanın, sonra bunu" indirin ve ekleyin ").
Rarst

1
Jetpack'in get_youtube_idyukarıdaki kodla jetpack kullanırsanız uygulamanızda 500 sunucu hatası verecek şekilde adlandırılmış bir yöntem içerdiğini unutmayın . Bu işlevi yeniden adlandırırsanız, işe yaramaz
Mike Vormwald
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.