WP Oembed, не проходящий через переменную «autoplay = 1»

У меня проблема:

Я передаю это через настраиваемое поле: http://www.youtube.com/watch?v=E6P1Q-UycHA&autoplay=1

(обратите внимание на autoplay=1)

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

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

Любые идеи?

Спасибо, Ален Фонтен

7 голосов | спросил criticerz 14 TueEurope/Moscow2010-12-14T21:17:41+03:00Europe/Moscow12bEurope/MoscowTue, 14 Dec 2010 21:17:41 +0300 2010, 21:17:41

5 ответов


6

Это не аргументы, подобные YouTube, больше аргументов для самого WordPress.

Один из способов обращения - это получить доступ к вашему аргументу позже внутри фильтра и изменить вывод HTML.

Передать массив аргументов:

wp_oembed_get( 'http://www.youtube.com/watch?v=', array( 'autoplay' => 1 ) );

И фильтр:

add_filter('oembed_result','oembed_result', 10, 3);

function oembed_result($html, $url, $args) {

    // $args includes custom argument
    // modify $html as you need

    return $html;
}
ответил Rarst 15 WedEurope/Moscow2010-12-15T10:17:38+03:00Europe/Moscow12bEurope/MoscowWed, 15 Dec 2010 10:17:38 +0300 2010, 10:17:38
3

Я знаю, что этот вопрос довольно старый, но у меня есть рабочее решение, которое, как я полагаю, может быть полезно для всех, кто пытается найти эту информацию и пуст в поиске Google.

Это решение было протестировано в WordPress 3.7.1 +:

/**
 * Adds the `autoplay` query string argument to embedded YouTube videos
 */
function wpse5362_autoplay_youtube_oembed( $provider, $url, $args ) {
    if (strpos($provider, 'youtube')!==FALSE) {
        $provider = add_query_arg('autoplay', 1, $provider);
    }

    return $provider;
}
add_filter('oembed_fetch_url', 'wpse5362_autoplay_youtube_oembed', 10, 3);

Добавьте вышеприведенный текст functions.php темы, чтобы все видео YouTube были добавлены через oEmbed для автоматического запуска.


Как это работает

В class-oembed .php в строке 212, метод fetch() применяет фильтр oembed_fetch_url, чтобы разрешить изменения URL.

Чтобы не добавлять ненужные параметры другим поставщикам oEmbed, мы проверяем «youtube» в URL-адресе провайдера - мы также можем проверить «vimeo» и /или другие видеосервисы - и, если эта строка присутствует, добавляет ---- +: = 4 =: + ---- в строку запроса.

ответил jlengstorf 23 MonEurope/Moscow2013-12-23T02:01:13+04:00Europe/Moscow12bEurope/MoscowMon, 23 Dec 2013 02:01:13 +0400 2013, 02:01:13
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

пользоваться

ответил Federico 12 FriEurope/Moscow2014-12-12T19:30:32+03:00Europe/Moscow12bEurope/MoscowFri, 12 Dec 2014 19:30:32 +0300 2014, 19:30:32
0

Ничего после того, как первый параметр должен быть отправлен как массив аргументов.

См. пример, приведенный на странице codex.
http://codex.wordpress.org/Function_Reference /wp_oembed_get

Если вы пытаетесь взять пользовательское значение поля и код для встраивания преобразуете его в видео (то есть, что произойдет, если вы поместите его в контент), вы можете сделать что-то вроде этого ...

/*
   N - replace with a valid post ID
   key - replace with a valid custom field key(name)
*/
$data = get_post_meta( N, 'key', true );
if( $data )
   echo apply_filters( 'the_content', $data );

Это, конечно, будет запускать несколько фильтров по тем данным, которые вам не нужны, но все равно трюк.

ответил t31os 14 TueEurope/Moscow2010-12-14T23:56:13+03:00Europe/Moscow12bEurope/MoscowTue, 14 Dec 2010 23:56:13 +0300 2010, 23:56:13
-5

Это можно легко устранить, изменив функцию 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 );
}
ответил interimpulso 12 AMpThu, 12 Apr 2012 11:33:23 +040033Thursday 2012, 11:33:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132