WP Oembed没有通过“autoplay = 1”变量

时间:2010-12-14 18:27:22

标签: php javascript wordpress youtube oembed

我遇到了这个问题。

我通过自定义字段here

传递此内容

(notice the "autoplay=1")

但是,当我使用wp_oembed_get在我的主题上加载视频时...它会显示视频正常,但它不会收听我正在传递的autoplay=1变量。

我需要在页面加载时播放视频。

5 个答案:

答案 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 );
}