WordPress中有几个过滤器用于更改嵌入的数据,具体取决于您需要修改结果的时间:
- embed_handler_html
过滤返回的嵌入处理程序 - embed_oembed_html
过滤缓存的oEmbed HTML - oembed_result
过滤oEmbed提供程序返回的HTML
选择最适合您需要的过滤器,但请记住,每个过滤器作用于oEmbed过程不同阶段的数据,可能会影响性能。
例如,embed_handler_html
在数据放入oEmbed/wp\\u postmeta缓存之前调用(因此每次外部嵌入仅调用一次),而embed_oembed_html
在检索oEmbed缓存后调用(因此每次显示该项时)。
如果只需要修改一次oEmbed数据,oembed_result
可能是你最好的候选人。
为了回答您的问题,下面的示例修改了从WordPress返回的Vimeo和YouTube嵌入参数wp_oembed_get()
作用
<;iframe>;HTML标记首先由PHP的DOMDocument 类,然后使用WordPress修改嵌入URLadd_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 );