web-dev-qa-db-fra.com

Définition de l'image sélectionnée d'une publication à partir d'une vidéo YouTube intégrée

Si je crée une publication contenant une vidéo YouTube intégrée (pour que je ne fasse que coller l'URL de YouTube dans la publication et laisser Wordpress l'insérer automatiquement pour moi), puis-je avoir un aperçu de la vignette de la vidéo l'image en vedette du post?

14
Piku

Pas nativement. Vous devez écrire du code pour y arriver - il existe une fonction Nice Pastebin qui fournit le code nécessaire pour le faire.

Edit (12/19/2011):

Oui, voici comment vous pouvez le faire par programme. Ajoutez les deux fonctions suivantes à votre fichier functions.php et vous devriez être prêt à partir. Le code a été commenté pour expliquer ce qui se passe, mais voici à quoi s'attendre:

Vous devez...

  • Créer un post
  • Dans le contenu, inclure une URL YouTube

Le code va ...

  • Analyser l'URL du contenu
  • Va récupérer la première URL trouvée et supposer que c'est une URL YouTube
  • Prenez la vignette du serveur distant et téléchargez-la
  • Définir comme vignette de la publication en cours

Notez que si vous incluez plusieurs URL dans votre message, vous devrez modifier le code pour trouver correctement l'URL YouTube. Cela peut être fait en effectuant une itération dans la collection $attachments et en recherchant quelle URL ressemble à une URL 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

Une chose à noter est que cela suppose que votre message n'a pas de miniature de message et ne sera pas déclenché une fois qu'une vignette de message est définie.

Deuxièmement, si vous supprimez la vignette du message, puis que vous associez une image à ce message à l'aide de l'outil de téléchargement de média, la photo la plus récente sera utilisée.

17
Tom