Definir a imagem em destaque de uma postagem a partir de um vídeo incorporado do YouTube

15

Se eu criar uma postagem com um vídeo do YouTube incorporado (basta colar o URL do YouTube na postagem e permitir que o Wordpress a incorpore automaticamente para mim), existe uma maneira de definir a imagem em miniatura do vídeo como a imagem em destaque da postagem?

Piku
fonte

Respostas:

17

Não nativamente. Você precisaria escrever algum código para fazer isso acontecer - há uma boa função pastebin que fornece o código necessário para isso.

Editar (19/12/2011):

Sim, aqui está como você pode fazer isso programaticamente. Adicione as duas funções a seguir ao seu arquivo functions.php e você deve estar pronto. O código foi comentado para explicar o que está acontecendo, mas aqui está um alto nível do que esperar:

Você deve...

  • Crie uma postagem
  • No conteúdo, inclua um URL do YouTube

O código irá ...

  • Analisar os URLs fora do conteúdo
  • Vai pegar o primeiro URL encontrado e assume que é um URL do YouTube
  • Pegue a miniatura no servidor remoto e faça o download
  • Defina como miniatura da postagem atual

Observe que, se você incluir vários URLs em sua postagem, precisará modificar o código para encontrar corretamente o URL do YouTube. Isso pode ser feito iterando a $attachmentscoleção e farejando a aparência de um URL do 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

Uma coisa a observar é que isso pressupõe que sua postagem não tem miniatura da postagem e não será acionada quando a miniatura da postagem for definida.

Em segundo lugar, se você remover a miniatura da postagem e anexar uma imagem a esta postagem usando o carregador de mídia, a imagem mais recente será usada.

Tom
fonte
Ótimo snippet, mas como quem sabe se ele estará disponível daqui a um ano - tente incluir pelo menos um resumo (se o código completo for demais) do que ele faz na sua resposta (como "use isso para obter miniaturas e depois para" baixar e anexar ").
Rarst
1
Observe que o jetpack contém um método nomeado, de get_youtube_idmodo que o servidor causará 500 erros no seu aplicativo se você usar o jetpack com o código acima. Se você renomear essa função, ela funcionará bem #
Mike Vormwald