Impostazione dell'immagine in primo piano di un post da un video YouTube incorporato


15

Se creo un post in cui è incorporato un video YouTube (quindi tutto ciò che faccio è incollare l'URL di YouTube nel post e lasciare che Wordpress lo incorpori automaticamente per me), c'è un modo per impostare l'immagine in miniatura del video come l'immagine in primo piano del post?

Risposte:


17

Non nativamente. Dovresti scrivere del codice per farlo accadere - c'è una bella funzione pastebin che fornisce il codice necessario per farlo.

Modifica (19/12/2011):

Sì, ecco come puoi farlo a livello di codice. Aggiungi le seguenti due funzioni al tuo file Functions.php e dovresti essere a posto. Il codice è stato commentato per spiegare cosa sta succedendo, ma ecco un alto livello di cosa aspettarsi:

Devi...

  • Crea un post
  • Nel contenuto, includere un URL di YouTube

Il codice ...

  • Analizza l'URL dal contenuto
  • Prenderà il primo URL che trova e presumerà che sia un URL di YouTube
  • Prendi la miniatura dal server remoto e scaricala
  • Impostalo come anteprima del post corrente

Tieni presente che se includi più URL nel tuo post, dovrai modificare il codice per trovare correttamente l'URL di YouTube. Questo può essere fatto ripetendo la $attachmentsraccolta e annusando quello che l'URL sembra un URL di 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

Una cosa da notare è che questo presuppone che il tuo post non abbia un'anteprima del post e non verrà attivato una volta impostata un'anteprima del post.

In secondo luogo, se si rimuove la miniatura del post e quindi si allega un'immagine a questo post utilizzando l'uploader multimediale, verrà utilizzata l'immagine più recente.


Ottimo frammento, ma dal momento che chissà se sarà presente da un anno a questa parte, prova a includere almeno un riepilogo (se il codice completo è troppo) di ciò che fa nella tua risposta (come "usa questo per ottenere l'anteprima, quindi quello per scarica e allega ").
Rarst

1
Si noti che jetpack contiene un metodo denominato in get_youtube_idmodo tale che 500 server errino l'app se si utilizza jetpack con il codice sopra. Se rinominerai quella funzione, funzionerà a meraviglia
Mike Vormwald
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.