web-dev-qa-db-fra.com

Ajouter des paramètres vidéos vimeo en utilisant Wordpress Embeds

J'utilise un champ personnalisé pour intégrer une vidéo prise en charge sur Wordpress. Ainsi, par exemple, l'utilisateur entre une adresse vidéo dans la zone du champ personnalisé:

http://vimeo.com/72104173

et j'ai implémenté le code suivant sur mon thème:

<?php
$videourl = my_meta('video'); // get custom field value
if($videourl!=''){ // if custom field exist  ?>
<?php 
$htmlcode = wp_oembed_get("{$videourl}"); //use oembed  
echo "<div class='video'>{$htmlcode}</div>"; //output the video ?>
...

le résultat/résultat est ci-dessous:

<iframe ... src="http://player.vimeo.com/video/72104173"></iframe>

le problème est que je veux ajouter des paramètres supplémentaires au vimeo pour pouvoir masquer le titre et la signature de la vidéo en ajoutant ce qui suit au src:

?title=0&amp;byline=0&amp;portrait=0

le résultat final sera donc:

<iframe ... src="http://player.vimeo.com/video/72104173?title=0&amp;byline=0&amp;portrait=0"></iframe>

J'ai essayé d'utiliser str_replace, mais le problème est que les paramètres sont ajoutés à la fin de chaque src vidéo et que la durée sera différente à chaque fois,

vraiment apprécier toute aide, merci

1
Andy M

Vous pouvez ajouter des arguments de requête à la fin de l'URL comme suit:

$videourl = add_query_arg( array('key1' => 'value1' ), $videourl ); // you can add as many as you want in key/value pairs...

$htmlcode = wp_oembed_get( $videourl );
// rest of your code...
1
user23654

Il existe plusieurs filtres dans WordPress pour modifier les données oEmbed, en fonction du moment où vous devez modifier les résultats:

  1. embed_handler_html
    Filtre le gestionnaire d'intégration renvoyé.
  2. embed_oembed_html
    Filtre le HTML oEmbed mis en cache.
  3. oembed_result
    Filtre le code HTML renvoyé par le fournisseur oEmbed.

Choisissez celui qui convient le mieux à vos besoins, mais gardez à l'esprit que chaque filtre agit sur les données à une étape différente du processus oEmbed et peut avoir des conséquences en termes de performances.

Par exemple, embed_handler_html est appelé avant que les données ne soient placées dans le cache oEmbed/wp_postmeta (une seule incorporation par externe) alors que embed_oembed_html est appelé après la récupération du cache oEmbed (chaque fois que l'élément est affiché).

Si vous ne devez modifier les données oEmbed qu'une seule fois, oembed_result est probablement votre meilleur candidat.

Pour répondre à votre question, voici un exemple modifiant les paramètres d'intégration de Vimeo et de YouTube renvoyés par la fonction WordPress wp_oembed_get().

Le balisage HTML <iframe> est d'abord analysé par la classe DOMDocument class, puis l'URL incorporée est modifiée à l'aide de WordPress ' add_query_arg () une fonction:

/**
 *
 */
add_filter( 'oembed_result', function ( $html, $url, $args ) {
    $doc = new DOMDocument();
    $doc->loadHTML( $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD );
    $tags = $doc->getElementsByTagName( 'iframe' );

    foreach ( $tags as $tag ) {
        $iframe_src = $tag->attributes->getNamedItem('src')->value;

        if ( false !== strpos( $iframe_src, 'youtube.com' ) ) {
            // https://developers.google.com/youtube/player_parameters
            $url = add_query_arg( array(
                'autohide' => 1,
                'autoplay' => 1,
                'controls' => 2,
                'feature' => null,
                'modestbranding' => 1,
                'playsinline' => 1,
                'rel' => 0,
                'showinfo' => 0,
            ), $iframe_src );
        }

        if ( false !== strpos( $iframe_src, 'vimeo.com' ) ) {
            // https://developer.vimeo.com/player/embedding
            $url = add_query_arg( array(
                'autoplay' => 1,
                'badge' => 0,
                'byline' => 0,
                'portrait' => 0,
                'title' => 0,
            ), $iframe_src );
        }

        $tag->setAttribute( 'src', $url );

        $html = $doc->saveHTML();
    }

    return $html;
}, 10, 3 );
0
rjb

Ce que je suppose (n’ai pas essayé) ne fonctionne pas avec l’autre solution, c’est que l’ajout à l’URL avant de demander le code intégré à Vimeo risque d’être ignoré par Vimeo.

Donc, ce que je fais est simplement d'analyser la réponse avec un RegEx:

$htmlcode = preg_replace("/(http:\/\/player.vimeo.com\/video\/[0-9]*)/i", '$1?title=0&portrait=0&byline=0&color=ffffff', $htmlcode);
0
kraftner