การตั้งค่าภาพเด่นของโพสต์จากวิดีโอ YouTube ที่ฝังไว้


15

หากฉันสร้างโพสต์ที่มีวิดีโอ YouTube ในตัว (ดังนั้นฉันจะวาง URL ของ YouTube ลงในโพสต์และให้ Wordpress ฝังมันโดยอัตโนมัติสำหรับฉัน) มีวิธีที่จะให้ภาพย่อของวิดีโอตั้งเป็น ภาพเด่นของโพสต์?

คำตอบ:


17

ไม่ได้โดยกำเนิด คุณต้องเขียนโค้ดเพื่อให้มันเกิดขึ้น - มีฟังก์ชั่นpastebin ที่ดีที่ให้รหัสที่จำเป็นในการทำ

แก้ไข (12/19/2011):

ใช่นี่คือวิธีที่คุณสามารถทำสิ่งนี้โดยทางโปรแกรม เพิ่มสองฟังก์ชั่นต่อไปนี้ไปยังไฟล์ functions.php ของคุณและคุณน่าจะดี รหัสได้รับความเห็นเพื่ออธิบายสิ่งที่เกิดขึ้น แต่นี่เป็นสิ่งที่คาดหวังในระดับสูง:

คุณต้อง...

  • สร้างโพสต์
  • ในเนื้อหารวม URL ของ YouTube

รหัสจะ ...

  • แยก URL ออกจากเนื้อหา
  • จะคว้า URL แรกที่พบและถือว่าเป็น URL ของ YouTube
  • หยิบรูปย่อจากเซิร์ฟเวอร์ระยะไกลและดาวน์โหลด
  • ตั้งเป็นภาพขนาดย่อของโพสต์ปัจจุบัน

โปรดทราบว่าหากคุณใส่ URL หลายรายการในโพสต์ของคุณคุณจะต้องแก้ไขรหัสเพื่อค้นหา URL ของ YouTube อย่างถูกต้อง ซึ่งสามารถทำได้โดยการวนซ้ำผ่าน$attachmentsคอลเลกชันและดมกลิ่นว่า URL มีลักษณะอย่างไรใน 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

สิ่งหนึ่งที่ควรทราบก็คือถือว่าโพสต์ของคุณไม่มีภาพขนาดย่อของโพสต์และจะไม่เริ่มทำงานเมื่อมีการตั้งค่าภาพขนาดย่อของโพสต์

ประการที่สองหากคุณลบภาพขนาดย่อของโพสต์แล้วแนบภาพไปที่โพสต์นี้โดยใช้เครื่องมืออัปโหลดสื่อรูปภาพล่าสุดจะถูกนำมาใช้


ตัวอย่างที่ดี แต่เนื่องจากใครจะรู้ว่าจะมีปีจากนี้ - โปรดลองรวมอย่างน้อยสรุป (หากรหัสเต็มมากเกินไป) ของสิ่งที่ทำในคำตอบของคุณ (เช่น "ใช้สิ่งนี้เพื่อรับภาพขนาดย่อจากนั้นไปที่ ดาวน์โหลดและแนบ ")
Rarst

1
โปรดทราบว่า jetpack มีวิธีการตั้งชื่อget_youtube_idเพื่อให้เซิร์ฟเวอร์ 500 ข้อผิดพลาดแอปของคุณถ้าคุณใช้ jetpack ด้วยรหัสข้างต้น หากคุณเปลี่ยนชื่อฟังก์ชั่นนี้มันจะทำงานได้ดี
Mike Vormwald
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.