Configurar la imagen destacada de una publicación desde un video de YouTube incrustado

15

Si creo una publicación que tiene un video de YouTube incrustado (así que todo lo que hago es pegar la URL de YouTube en la publicación y dejar que Wordpress la incruste automáticamente), ¿hay alguna manera de configurar la imagen en miniatura del video como la imagen destacada de la publicación?

Piku
fuente

Respuestas:

17

No de forma nativa. Tendría que escribir un código para que esto suceda: hay una buena función de pastebin que proporciona el código necesario para hacerlo.

Editar (19/12/2011):

Sí, así es como puedes hacer esto mediante programación. Agregue las siguientes dos funciones a su archivo functions.php y debería estar listo. El código ha sido comentado para explicar lo que está sucediendo, pero aquí hay un alto nivel de lo que puede esperar:

Debes...

  • Crea una publicación
  • En el contenido, incluya una URL de YouTube

El código ...

  • Analiza las URL fuera del contenido
  • Tomará la primera URL que encuentre y asumirá que es una URL de YouTube
  • Tome la miniatura del servidor remoto y descárguela
  • Establecerlo como la miniatura de la publicación actual

Tenga en cuenta que si incluye varias URL en su publicación, deberá modificar el código para encontrar correctamente la URL de YouTube. Esto se puede hacer iterando a través de la $attachmentscolección y olfateando qué URL se parece a una URL de 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 a tener en cuenta es que esto supone que su publicación no tiene una miniatura de publicación y no se activará una vez que se configure una miniatura de publicación.

En segundo lugar, si elimina la miniatura de la publicación y luego adjunta una imagen a esta publicación utilizando el cargador de medios, se utilizará la imagen más reciente.

Tom
fuente
Gran fragmento, pero como quién sabe si estará allí dentro de un año, intente incluir al menos un resumen (si el código completo es demasiado) de lo que hace en su respuesta (como "use esto para obtener una miniatura, luego eso para descargar y adjuntar ").
Rarst
1
Tenga en cuenta que jetpack contiene un método denominado de get_youtube_idmodo que el servidor 500 error su aplicación si utiliza jetpack con el código anterior. Si cambia el nombre de esa función, funcionará bien
Mike Vormwald