我在Wordpress主题的function.php文件中实现了以下Wordpress过滤器:
function change_oembed($html, $url, $args){
$video_pattern = "#(\W|^)(youtube)(\W|$)#";
$notification = '<div class="cookieconsent-optout-marketing">Please
<a href="javascript:Cookiebot.renew()">accept marketing-cookies</a>
to watch this video.
</div>';
if(preg_match($video_pattern, $url)){
$matches = null;
preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $url, $matches);
$gdpr_youtube = '<iframe data-src="https://www.youtube.com/embed/' .
$matches[1] . '" data-cookieconsent="marketing" frameborder="0"
allowfullscreen></iframe>';
$new_html = '<div class="clearfix"></div>' . $notification . $gdpr_youtube;
} else {
$new_html = $html;
}
return $new_html;
}
add_filter( 'oembed_result', array($this, 'change_oembed'), 999, 3 );
我可以在帖子中看到此过滤器的结果。我只看到youtube.com视频网址文字。我尝试使用wordpress和浏览器(使用FastCache插件)清除缓存,我尝试将代码放在if-else语句之外,但没有任何作用。
更新:我还尝试了video_embed_html
而不是oembed_result
,但它仍无效。
更新2:未调用该函数。我只是提出一些问号,看看我是否在代码中看到它们,但我没有。因此,change_oembed
函数根本不被调用。
我检查了正则表达式是否有效,并且它确实适用于该YouTube网址,因此它不是正则表达式问题。