Đặt hình ảnh nổi bật của bài đăng từ video YouTube được nhúng


15

Nếu tôi tạo một bài đăng có video YouTube được nhúng trong đó (vì vậy tất cả những gì tôi làm là dán URL YouTube vào bài đăng và để Wordpress tự động nhúng nó cho tôi), có cách nào để hình ảnh thu nhỏ của video được đặt thành hình ảnh đặc trưng của bài viết?

Câu trả lời:


17

Không phải nguyên bản. Bạn sẽ phải viết một số mã để thực hiện nó - có một hàm pastebin đẹp cung cấp mã cần thiết để thực hiện.

Chỉnh sửa (19/12/2011):

Đúng đây là cách bạn có thể làm điều này theo chương trình. Thêm hai chức năng sau vào tệp tin.php của bạn và bạn sẽ thấy ổn. Mã này đã được nhận xét để giải thích những gì đang xảy ra, nhưng đây là mức độ cao của những gì mong đợi:

Bạn phải...

  • Tạo một bài
  • Trong nội dung, bao gồm một URL YouTube

Mã sẽ ...

  • Phân tích URL ra khỏi nội dung
  • Sẽ lấy URL đầu tiên mà nó tìm thấy và cho rằng đó là URL YouTube
  • Lấy hình thu nhỏ từ máy chủ từ xa và tải xuống
  • Đặt nó làm hình thu nhỏ của bài viết hiện tại

Lưu ý rằng nếu bạn bao gồm nhiều URL trong bài đăng của mình, bạn sẽ cần sửa đổi mã để tìm đúng URL YouTube. Điều này có thể được thực hiện bằng cách lặp qua $attachmentsbộ sưu tập và tìm ra URL nào trông giống như một 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

Một điều cần lưu ý là điều này giả định rằng bài đăng của bạn không có hình thu nhỏ bài đăng và sẽ không kích hoạt khi hình thu nhỏ bài đăng được đặt.

Thứ hai, nếu bạn xóa hình thu nhỏ của bài đăng và sau đó đính kèm hình ảnh vào bài đăng này bằng trình tải lên phương tiện, hình ảnh gần đây nhất sẽ được sử dụng.


Đoạn trích tuyệt vời, nhưng vì ai biết liệu nó sẽ ở đó từ năm nay hay không - vui lòng thử bao gồm ít nhất là tóm tắt (nếu mã đầy đủ quá nhiều) về những gì nó làm trong câu trả lời của bạn (như "sử dụng điều này để lấy hình thu nhỏ, sau đó tải về và đính kèm ").
Rarst

1
Lưu ý rằng jetpack chứa một phương thức có tên là get_youtube_id500 máy chủ sẽ lỗi ứng dụng của bạn nếu bạn sử dụng jetpack với mã trên. Nếu bạn đổi tên chức năng đó, nó sẽ hoạt động bình thường
Mike Vormwald
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.