web-dev-qa-db-fra.com

Intégration réactive pour le shortcode vidéo

J'ai demandé à un code personnalisé d'envelopper une vidéo intégrée dans une classe .embed-responsive pour la rendre sensible avec CSS, puis:

PHP:

function kadabra_responsive_embed( $html ) {
    return '<div class="embed-responsive embed-responsive-16by9">' . $html . '</div>';
}
add_filter( 'embed_oembed_html', 'kadabra_responsive_embed', 10, 3 );
add_filter( 'video_embed_html', 'kadabra_responsive_embed' );

CSS:

.embed-responsive-16by9 {
  height: 0;
  padding-bottom: 56.25%;
}

qui fonctionne parfaitement pour une vidéo intégrée. Cependant, il englobe également d'autres intégrations, comme une intégration Twitter, pour lesquelles cela n'est pas nécessaire. Un moyen de le rendre exclusif pour les vidéos intégrées uniquement?

1
Deka87

Vous pouvez créer un nouveau rappel pour le filtre embed_oembed_html et cibler le troisième argument d'entrée, le ocode $url.

Ensuite, vous pourriez par exemple créer boolean des fonctions d'assistance telles que (non testé):

function is_oembed_from_video_specific_hosts_wpse274552( $url )
{
    return in_array(
        parse_url( $url, PHP_URL_Host ),
        [
             'youtube.com',
             'youtu.be',
             'vimeo.com',  // ... etc
        ],
        true
    );
}

ou un contrôle plus détaillé (plus coûteux) comme (non testé):

function is_video_oembed_wpse274552( $url )
{
    $video_providers = [
        '#https?://((m|www)\.)?youtube\.com/watch.*#i',
        '#https?://((m|www)\.)?youtube\.com/playlist.*#i',         
        '#https?://youtu\.be/.*#i',        
        '#https?://(.+\.)?vimeo\.com/.*#i',                        
        '#https?://(www\.)?dailymotion\.com/.*#i',                 
        '#https?://dai\.ly/.*#i',
        '#https?://videopress\.com/v/.*#',
        '#https?://wordpress\.tv/.*#i',
        '#https?://(www\.)?funnyordie\.com/videos/.*#i',
        '#https?://(www\.)?(animoto|video214)\.com/play/.*#i',
        '#https?://www\.facebook\.com/.*/videos/.*#i',
        '#https?://www\.facebook\.com/video\.php.*#i', // ... etc
    ];

    $is_video_oembed = false;
    foreach( $video_providers as $video_provider )
    {
        if ( preg_match( $video_provider , $url ) ) {
        {
             $is_video_oembed = true;
             break;
        }
    }
    return $is_video_oembed;
}

Notez que les fournisseurs oEmbed peuvent être modifiés, ajoutés et supprimés dans le noyau de WordPress et à travers des filtres. Cela pourrait affecter les contrôles ci-dessus.

J'espère que vous pourrez l'adapter à vos besoins!

1
birgire