webentwicklung-frage-antwort-db.com.de

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

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?

14
Piku

Nicht von Haus aus. Sie müssten Code schreiben, um dies zu erreichen - es gibt eine Nice 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 $attachments-Auflistung 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.

17
Tom