포함 된 YouTube 비디오에서 게시물의 추천 이미지 설정


15

YouTube 동영상이 포함 된 게시물을 만들면 (YouTube URL을 게시물에 붙여넣고 Wordpress에서 자동으로 삽입하도록하면) 비디오의 축소판 이미지를 다음과 같이 설정할 수 있습니까? 게시물의 특집 이미지?

답변:


17

기본적으로는 아닙니다. 이를 위해 코드를 작성해야합니다. 필요한 코드를 제공 하는 멋진 pastebin 함수가 있습니다.

편집 (2011 년 12 월 19 일) :

여기 프로그래밍 방식으로 수행 할 수있는 방법이 있습니다. functions.php 파일에 다음 두 가지 기능을 추가하면 좋습니다. 이 코드는 무슨 일이 일어나고 있는지 설명하기 위해 주석을 달았지만 다음은 기대할 수있는 높은 수준입니다.

당신은 ...

  • 게시물 작성
  • 콘텐츠에 YouTube URL을 포함

코드는 ...

  • 콘텐츠에서 URL을 파싱
  • 찾은 첫 번째 URL을 가져 와서 YouTube URL이라고 가정합니다.
  • 원격 서버에서 썸네일을 잡고 다운로드하십시오.
  • 현재 게시물의 미리보기 이미지로 설정

게시물에 여러 개의 URL을 포함하는 경우 YouTube URL을 올바르게 찾으려면 코드를 수정해야합니다. $attachments컬렉션 을 반복 하고 YouTube URL처럼 보이는 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

참고로 게시물에 미리보기 이미지가 없으며 게시물 미리보기 이미지가 설정된 후에는 실행되지 않는다고 가정합니다.

둘째, 게시물 미리보기 이미지를 제거한 다음 미디어 업 로더를 사용하여이 게시물에 이미지를 첨부하면 가장 최근 이미지가 사용됩니다.


훌륭한 스 니펫이지만 지금부터 몇 년 후에 있을지 알기 때문에 답변에서 수행 한 작업에 대한 요약 (전체 코드가 너무 많은 경우)을 포함 시키십시오 (예 : "이를 사용하여 축소판 그림을 가져 오십시오. 다운로드하여 첨부하십시오 ").
Rarst

1
jetpack에는 get_youtube_id위의 코드와 함께 jetpack을 사용하는 경우 앱에서 500 서버 오류가 발생하는 명명 된 메소드가 포함되어 있습니다 . 이 함수의 이름을 바꾸면 작동합니다.
Mike Vormwald
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.