Mengatur gambar unggulan posting dari video YouTube yang disematkan


15

Jika saya membuat posting yang memiliki video YouTube tertanam di dalamnya (jadi semua yang saya lakukan adalah menempelkan URL YouTube ke dalam posting dan membiarkan Wordpress secara otomatis menanamkannya untuk saya), apakah ada cara untuk membuat gambar thumbnail dari video ditetapkan sebagai gambar unggulan posting?

Jawaban:


17

Tidak secara asli. Anda harus menulis beberapa kode untuk mewujudkannya - ada fungsi pastebin yang bagus yang menyediakan kode yang diperlukan untuk melakukannya.

Edit (19/12/2011):

Yap, inilah cara Anda dapat melakukan ini secara terprogram. Tambahkan dua fungsi berikut ke file functions.php Anda dan Anda harus baik-baik saja. Kode telah dikomentari untuk menjelaskan apa yang terjadi, tetapi inilah tingkat tinggi dari apa yang diharapkan:

Kamu harus...

  • Buat posting
  • Dalam konten, sertakan URL YouTube

Kode akan ...

  • Pisahkan URL dari konten
  • Akan mengambil URL pertama yang ditemukannya dan menganggapnya sebagai URL YouTube
  • Ambil thumbnail dari server jarak jauh dan unduh
  • Jadikan sebagai thumbnail posting saat ini

Perhatikan bahwa jika Anda memasukkan beberapa URL dalam posting Anda, Anda harus memodifikasi kode untuk menemukan URL YouTube dengan benar. Ini dapat dilakukan dengan mengulangi $attachmentskoleksi dan mengendus-endus seperti apa URL itu seperti URL YouTube.

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

Satu hal yang perlu diperhatikan adalah bahwa ini mengasumsikan bahwa posting Anda tidak memiliki thumbnail posting dan tidak akan menyala setelah thumbnail posting diatur.

Kedua, jika Anda menghapus thumbnail posting dan kemudian melampirkan gambar ke posting ini menggunakan pengunggah media, gambar terbaru akan digunakan.


Cuplikan hebat, tetapi karena siapa yang tahu apakah itu akan ada tahun dari sekarang - coba sertakan setidaknya ringkasan (jika kode lengkap terlalu banyak) dari apa yang dilakukannya dalam jawaban Anda (seperti "gunakan ini untuk mendapatkan gambar kecil, maka itu untuk unduh dan lampirkan ").
Paling lambat

1
Perhatikan bahwa jetpack berisi metode yang dinamai get_youtube_idsehingga akan membuat server 500 kesalahan aplikasi Anda jika Anda menggunakan jetpack dengan kode di atas. Jika Anda mengganti nama fungsi itu, itu akan berfungsi dengan baik
Mike Vormwald
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.