WordPress 自动嵌入 YouTube 视频 - 添加过滤器来处理“结束”属性
Posted
技术标签:
【中文标题】WordPress 自动嵌入 YouTube 视频 - 添加过滤器来处理“结束”属性【英文标题】:WordPress auto embed of YouTube videos - adding filter to handle `end` attribute 【发布时间】:2016-01-28 05:12:01 【问题描述】:WordPress 自动将页面/帖子内容中的 YouTube URL 转换为嵌入的 iframe 视频。
它尊重 YouTube URL 中的 start
参数(如果存在),但它不尊重 end
参数(如果存在)。
因此,我需要找到处理这个自动 YouTube 嵌入功能的 WordPress 代码,这样我就可以挂上我自己的过滤器(using this solution)来处理end
的要求。
我搜索了/wp-includes/
目录下的class-wp-embed.php
、class-oembed.php
和media.php
文件,在后者中,我以为我找到了我需要的代码...
apply_filters( 'wp_embed_handler_youtube', $embed, $attr, $url, $rawattr )
...但该过滤器似乎没有被调用。
谁能指出我正确的方向?
【问题讨论】:
【参考方案1】:您可以自定义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= '';
【讨论】:
【参考方案2】:我有同样的问题,但没有找到答案。所以这是可行的解决方案:
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;
【讨论】:
以上是关于WordPress 自动嵌入 YouTube 视频 - 添加过滤器来处理“结束”属性的主要内容,如果未能解决你的问题,请参考以下文章
更改默认的 wordpress youtube 嵌入视频尺寸
以模态自动播放Youtube视频? (Avada Wordpress主题)
从youtube嵌入缩略图和视频(php - Wordpress)
如何从 Wordpress 上 Gutenberg 的 YouTube 视频嵌入中删除 HTML 包装器