因此,在对此进行一些研究之后,最好的方法是利用oembed_fetch_url
过滤器挂钩向 oEmbed 请求 URL 添加额外的参数。我的具体目标是允许自动播放参数,但此方法易于根据您需要的任何 oEmbed 参数进行定制。
首先,将此添加到您的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 缓存或添加某种缓存破坏器到目标网址。如果链接在缓存中,过滤器挂钩将永远无法运行。
我希望这是有道理的,因为我觉得这是一个非常有用的功能,但很难弄清楚如何实现。