Festlegen des empfohlenen Bildes eines Posts aus einem eingebetteten YouTube-Video

15

Wenn ich einen Post mit einem eingebetteten YouTube-Video erstelle (ich füge also nur die YouTube-URL in den Post ein und lasse sie von Wordpress automatisch einbetten), gibt es eine Möglichkeit, das Miniaturbild des Videos als festzulegen das Bild des Beitrags?

Piku
quelle

Antworten:

17

Nicht von Haus aus. Sie müssten Code schreiben, um dies zu erreichen - es gibt eine nette Pastebin- Funktion, die den erforderlichen Code dafür bereitstellt.

Bearbeiten (19.12.2011):

Ja, hier erfahren Sie, wie Sie dies programmgesteuert tun können. Fügen Sie die folgenden zwei Funktionen zu Ihrer functions.php-Datei hinzu und Sie sollten einsatzbereit sein. Der Code wurde kommentiert, um zu erklären, was gerade passiert.

Sie müssen ...

  • Erstellen Sie einen Beitrag
  • Fügen Sie dem Inhalt eine YouTube-URL hinzu

Der Code wird ...

  • Analysieren Sie die URLs außerhalb des Inhalts
  • Ermittelt die erste gefundene URL und geht davon aus, dass es sich um eine YouTube-URL handelt
  • Nehmen Sie die Miniaturansicht vom Remote-Server und laden Sie sie herunter
  • Legen Sie es als Miniaturansicht des aktuellen Beitrags fest

Beachten Sie, dass Sie den Code ändern müssen, um die YouTube-URL richtig zu finden, wenn Sie mehrere URLs in Ihren Beitrag aufnehmen. Dies können Sie tun, indem Sie die $attachmentsSammlung durchlaufen und herausfinden, welche URLs wie eine YouTube-URL aussehen.

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

Eine zu beachtende Sache ist, dass dies voraussetzt, dass Ihr Beitrag kein Post-Thumbnail hat und nicht ausgelöst wird, sobald ein Post-Thumbnail gesetzt ist.

Zweitens wird das neueste Bild verwendet, wenn Sie die Miniaturansicht des Beitrags entfernen und dann mit dem Medien-Uploader ein Bild an diesen Beitrag anhängen.

Tom
quelle
Tolles Snippet, aber wer weiß, ob es in diesem Jahr noch da sein wird - bitte versuchen Sie zumindest eine Zusammenfassung (wenn der vollständige Code zu viel ist) dessen, was es in Ihrer Antwort tut, einzuschließen (wie "Verwenden Sie dies, um ein Miniaturbild zu erhalten, dann das zu" herunterladen und anhängen ").
Rarst
1
Beachten Sie, dass jetpack eine Methode enthält, die get_youtube_idso benannt ist , dass 500 Server Fehler in Ihrer App verursachen, wenn Sie jetpack mit dem obigen Code verwenden. Wenn Sie diese Funktion umbenennen, funktioniert es a-ok
Mike Vormwald