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&byline=0&portrait=0
le résultat final sera donc:
<iframe ... src="http://player.vimeo.com/video/72104173?title=0&byline=0&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
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...
Il existe plusieurs filtres dans WordPress pour modifier les données oEmbed, en fonction du moment où vous devez modifier les résultats:
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 queembed_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 );
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);