Skip to content Skip to sidebar Skip to footer

Wp Oembed Not Passing Through The “autoplay=1” Variable

I'm having this problem. I am passing this through a custom field here (notice the 'autoplay=1') But when I load the video on my theme using wp_oembed_get... it displays the video

Solution 1:

I think the way to do it is using wordpress filters:

functionmodify_youtube_embed_url($html) {
    return str_replace("?feature=oembed", "?feature=oembed&autoplay=1", $html);
}
add_filter('oembed_result', 'modify_youtube_embed_url');

Solution 2:

This is my solution in functions.php

functionembed_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

Enjoy!

Solution 3:

look up function wp_oembed_get and use the args to pass the autoplay... should work fine. Just paste in the url of the video not the &autoplay... you'll code that into the args part of the function.

Solution 4:

So, after some research on this, the best way to do this is to leverage the oembed_fetch_url filter hook to add extra arguments to the oEmbed request URL. My specific goal was to allow an autoplay paramater, but this method is built to be easy to tailor to any oEmbed argument you need.

First, add this to your 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'];

functionkoa_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_argsas$key => $value) {
        $provider = add_query_arg($key, $value, $provider);
    }

    return$provider;
}

add_filter('oembed_fetch_url', 'koa_oembed_args', 10, 3);

This function takes the generated oEmbed URL and its corresponding arguments and checks it agains a hard-coded list of whitelisted arguments, in this case ['autoplay']. If it sees any of these whitelisted keywords in the arguments passed to the oEmbed filter, it adds them with their given value to the oEmbed URL.

Then, all you need to do is add the oEmbed parameter to your shortcode in the Wordpress editor, like this:

[embed autoplay="true"]https://vimeo.com/1234567890/1234567890[/embed]

Be aware that the oEmbed class in WP uses the postmeta as a cache for these requests, so if you've embedded the target URL before, you might have to clear your postmeta cache in some way or add a cache buster of some kind to the target URL. If the link is in the cache, the filter hook will never get to run.

I hope this makes sense, as I feel like it's a pretty useful feature that's surprisingly hard to figure out how to achieve.

Solution 5:

This can be easily fixed by modifying the wp_oembed_get() function in wp-includes/media.php to this:

functionwp_oembed_get($url, $args = '') {
    // Manually build the IFRAME embed with the related videos option disabled and autoplay turned onif(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 );
}

Post a Comment for "Wp Oembed Not Passing Through The “autoplay=1” Variable"