我遇到了这个问题。
我通过自定义字段here
传递此内容 (notice the "autoplay=1")
但是,当我使用wp_oembed_get
在我的主题上加载视频时...它会显示视频正常,但它不会收听我正在传递的autoplay=1
变量。
我需要在页面加载时播放视频。
答案 0 :(得分:6)
我认为这样做的方法是使用wordpress过滤器:
function modify_youtube_embed_url($html) {
return str_replace("?feature=oembed", "?feature=oembed&autoplay=1", $html);
}
add_filter('oembed_result', 'modify_youtube_embed_url');
答案 1 :(得分:1)
这是我在functions.php中的解决方案
function embed_responsive_autoplay($code){
if(strpos($code, 'youtu.be') !== false || strpos($code, 'youtube.com') !== false){
$return = preg_replace('@embed/([^"&]*)@', 'embed/$1&showinfo=0&autoplay=1', $code);
return '<div class="embed-container">' . $return . '</div>';
}
return '<div class="embed-container">' . $code . '</div>';
}
add_filter( 'embed_oembed_html', 'embed_responsive_autoplay');
add_filter( 'video_embed_html', 'embed_responsive_autoplay' ); // Jetpack
享受!
答案 2 :(得分:0)
查找函数wp_oembed_get并使用args传递自动播放...应该可以正常工作。只需粘贴视频的网址而不是&amp; autoplay ...您就可以将其编入功能的args部分。
答案 3 :(得分:0)
因此,在对此进行了一些研究之后,最好的方法是利用oembed_fetch_url
过滤器挂钩向oEmbed请求URL添加额外的参数。我的特定目标是允许自动播放参数,但是此方法的构建易于根据您需要的任何嵌入参数进行定制。
首先,将其添加到您的functions.php
:
<?php
/**
* Add parameters to embed
* @src https://foxland.fi/adding-parameters-to-wordpress-oembed/
* @src https://github.com/WordPress/WordPress/blob/ec417a34a7ce0d10a998b7eb6d50d7ba6291d94d/wp-includes/class-oembed.php#L553
*/
$allowed_args = ['autoplay'];
function koa_oembed_args($provider, $url, $args) {
global $allowed_args;
$filtered_args = array_filter(
$args,
function ($key) use ($allowed_args) {
return in_array($key, $allowed_args);
},
ARRAY_FILTER_USE_KEY
);
foreach ($filtered_args as $key => $value) {
$provider = add_query_arg($key, $value, $provider);
}
return $provider;
}
add_filter('oembed_fetch_url', 'koa_oembed_args', 10, 3);
此函数采用生成的oEmbed URL及其对应的参数,并再次对其进行检查,以硬编码白名单参数列表,在这种情况下为['autoplay']
。如果在传递给oEmbed过滤器的参数中看到这些列入白名单的关键字中的任何一个,它将以给定的值将它们添加到oEmbed URL。
然后,您需要做的就是在Wordpress编辑器中将oEmbed参数添加到您的短代码中,如下所示:
[embed autoplay="true"]https://vimeo.com/1234567890/1234567890[/embed]
请注意,WP中的oEmbed类将postmeta用作这些请求的缓存,因此,如果您之前已嵌入目标URL,则可能必须以某种方式清除postmeta缓存或添加某些缓存目标网址的种类。如果链接在缓存中,则过滤器挂钩将永远无法运行。
我希望这是有道理的,因为我觉得这是一个非常有用的功能,令人惊讶地很难弄清楚如何实现。
答案 4 :(得分:-3)
这可以通过将wp-includes / media.php中的wp_oembed_get()函数修改为:
来轻松解决。function wp_oembed_get( $url, $args = '' ) {
// Manually build the IFRAME embed with the related videos option disabled and autoplay turned on
if(preg_match("/youtube.com\/watch\?v=([^&]+)/i", $url, $aMatch)){
return '<iframe width="560" height="315" src="http://www.youtube.com/embed/' . $aMatch[1] . '?rel=0&autoplay=1" frameborder="0" allowfullscreen></iframe>';
}
require_once( ABSPATH . WPINC . '/class-oembed.php' );
$oembed = _wp_oembed_get_object();
return $oembed->get_html( $url, $args );
}