WP Oembed не проходит через переменную «autoplay = 1» - PullRequest
2 голосов
/ 14 декабря 2010

У меня эта проблема.

Я передаю это через пользовательское поле здесь

(notice the "autoplay=1")

Но когда я загружаю видео по своей теме, используя wp_oembed_get ..., оно отображает видео нормально, но не слушает переменную autoplay=1, через которую я прохожу.

Мне нужно, чтобы видео воспроизводилось при загрузке страницы.

Ответы [ 5 ]

6 голосов
/ 29 мая 2013

Я думаю, что способ сделать это с помощью фильтров 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 голос
/ 12 декабря 2014

Это моё решение в 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

Наслаждайтесь!

0 голосов
/ 08 марта 2019

Итак, после некоторого исследования этого, лучший способ сделать это - использовать хук фильтра oembed_fetch_url, чтобы добавить дополнительные аргументы к URL-адресу запроса oEmbed. Моя конкретная цель состояла в том, чтобы разрешить параметр autoplay, но этот метод создан так, чтобы его можно было легко адаптировать к любому аргументу 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);

Эта функция принимает сгенерированный URL-адрес oEmbed и соответствующие ему аргументы и проверяет его снова в жестко запрограммированном списке аргументов в белом списке, в данном случае ['autoplay']. Если он видит какое-либо из этих ключевых слов в белом списке в аргументах, передаваемых фильтру oEmbed, он добавляет их с заданным значением в URL-адрес oEmbed.

Затем все, что вам нужно сделать, это добавить параметр oEmbed в ваш шорткод в редакторе Wordpress, например:

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

Имейте в виду, что класс oEmbed в WP использует postmeta в качестве кеша для этих запросов, поэтому, если вы уже встроили целевой URL-адрес ранее, вам, возможно, придется каким-то образом очистить кеш postmeta или добавить уничтожитель кеша некоторых добро на целевой URL. Если ссылка находится в кеше, фильтр-хук никогда не запустится.

Надеюсь, это имеет смысл, поскольку я чувствую, что это довольно полезная функция, на удивление сложно понять, как ее достичь.

0 голосов
/ 12 апреля 2012

Это легко исправить, изменив функцию wp_oembed_get () в wp-includes / media.php так:

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 );
}
0 голосов
/ 01 июня 2011

найдите функцию wp_oembed_get и используйте аргументы для прохождения автозапуска ... должно работать нормально.Просто вставьте URL-адрес видео, а не автозапуск ..., и вы закодируете его в функции args.

...