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

13

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 disposer de la vignette de la La vidéo est-elle définie comme image sélectionnée de la publication?

    
posée Piku 13.08.2011 - 13:36

1 réponse

17

Pas nativement. Vous devez écrire du code pour que cela fonctionne. Il existe une jolie fonction pastebin qui fournit le code nécessaire pour le faire.

Modifier (19/12/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 message
  • Dans le contenu, incluez une URL YouTube

Le code va ...

  • Analyse l'URL du contenu
  • va récupérer la première URL trouvée et supposer qu'il s'agit d'une URL YouTube
  • Récupérez la vignette sur le serveur distant et téléchargez-la
  • Définissez-la comme miniature 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. Pour ce faire, vous pouvez effectuer une itération dans la collection $attachments et identifier l’URL qui 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'éditeur de contenu multimédia, la photo la plus récente sera utilisée.

    
réponse donnée Tom 14.08.2011 - 00:01

Lire d'autres questions sur les étiquettes