サポートされているビデオをWordpressに埋め込むためにカスタムフィールドを使用しているので、たとえばユーザーがカスタムフィールドボックスにビデオアドレスを入力します。
http://vimeo.com/72104173
私は私のテーマに以下のコードを実装しました。
<?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 ?>
...
結果/出力は以下のとおりです。
<iframe ... src="http://player.vimeo.com/video/72104173"></iframe>
問題は、私が追加のパラメータをvimeoに追加したいので、srcに以下を追加することによってビデオのTitleとBylineを隠すことができるということです。
?title=0&byline=0&portrait=0
最終結果は次のようになります。
<iframe ... src="http://player.vimeo.com/video/72104173?title=0&byline=0&portrait=0"></iframe>
私はユーザーstr_replace
を使おうとしましたが、問題はパラメータがそれぞれのビデオソースの最後に追加され、毎回サーチャが変わることです。
本当に助けてくれてありがとう、ありがとう
次のようにURLの末尾にクエリ引数を追加できます。
$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...
結果を修正する必要がある場合に応じて、WordPressにoEmbedデータを変更するためのいくつかのフィルタがあります。
ニーズに最も適したものを選択してください。ただし、各フィルタはoEmbedプロセスのさまざまな段階でデータに作用し、パフォーマンスに影響を与える可能性があることに注意してください。
たとえば、
embed_handler_html
はoEmbed/wp_postmetaキャッシュにデータが書き込まれる前に(外部埋め込みごとに1回だけ)呼び出されますが、embed_oembed_html
はoEmbedキャッシュを取得した後(つまりアイテムが表示されるたびに)呼び出されます。OEmbedデータを一度だけ修正する必要があるならば、おそらく
oembed_result
があなたの最良の候補です。
あなたの質問に答えるために、これはWordPressのwp_oembed_get()
関数から返されたVimeoとYouTubeの埋め込みパラメータを変更する例です。
<iframe> HTMLマークアップは、最初にPHPの DOMDocument クラスによって解析され、次に埋め込みURLはWordPressを使用して変更されます ' add_query_arg() 関数:
/**
*
*/
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 );
私が推測した(試みなかった)他の解決策ではうまくいかないのは、Vimeoに埋め込みコードを尋ねる前にURLに追加することがVimeoによって無視されるかもしれないということかもしれません。
だから私はRegExを使ってレスポンスをパースするだけです。
$htmlcode = preg_replace("/(http:\/\/player.vimeo.com\/video\/[0-9]*)/i", '$1?title=0&portrait=0&byline=0&color=ffffff', $htmlcode);