WordPress自动将页面/帖子内容中的YouTube URL转换为嵌入式iframe视频。
它尊重YouTube URL中的start
参数(如果存在),但不尊重end
参数(如果出现)。
因此,我需要找到处理这种自动YouTube嵌入功能的WordPress代码,这样我就可以(使用这个解决方案)挂接我自己的过滤器,以满足end
的要求。
我搜索了/wp-includes/
目录的class-wp-embed.php
、class-oembed.php
和media.php
文件,在后者中,我认为我已经找到了所需的代码。。。
apply_filters( 'wp_embed_handler_youtube', $embed, $attr, $url, $rawattr )
但这个过滤器似乎没有被调用。
有人能给我指正确的方向吗?
我遇到了同样的问题,但没有找到答案。所以这里有一个可行的解决方案:
add_filter('embed_oembed_html', 'my_theme_embed_handler_oembed_youtube', 10, 4);
function my_theme_embed_handler_oembed_youtube($html, $url, $attr, $post_ID) {
if (strpos($url, 'youtube.com')!==false) {
/* YOU CAN CHANGE RESULT HTML CODE HERE */
$html = '<div class="youtube-wrap">'.$html.'</div>';
}
return $html;
}
您可以自定义youtube url并设置各种条件。我过去也实施过。您可以从以下代码中获得一些参考:
if(strpos($url, "youtube")!==false)
{
if(strpos($url, "<object")===false)
{
if(strpos($url, "<iframe")===false)
{
if(strpos($url, "//youtu.be/")===false)
{
$url_string = parse_url($url, PHP_URL_QUERY);
parse_str($url_string, $args);
$videoId = isset($args['v']) ? $args['v'] : false;
}
else
{
$url_string = explode('/',$url);
$videoId = $url_string[3];
}
}
else
{
$pattern = '!//(?:www.)?youtube.com/embed/([A-Za-z0-9'-_]+)!i';
$result = preg_match($pattern, $url, $matches);
$videoId = $matches[1];
}
}
else
{
preg_match('#<object[^>]+>.+?http://www.youtube.com/v/([A-Za-z0-9'-_]+).+?</object>#s', $url, $matches);
$videoId = $matches[1];
}
$urlfrom = 'youtube';
$video_thumb= '';
}