WP Oembed, не проходящий через переменную «autoplay = 1»
У меня проблема:
Я передаю это через настраиваемое поле: http://www.youtube.com/watch?v=E6P1Q-UycHA&autoplay=1
(обратите внимание на autoplay=1
)
Но когда я загружаю видео по моей теме с помощью wp_oembed_get ... он отображает видео в порядке, но он не прослушивает autoplay=1
переменная, которую я прохожу.
Мне нужно, чтобы видео воспроизводилось при загрузке страницы.
Любые идеи?
Спасибо, Ален Фонтен
5 ответов
Это не аргументы, подобные 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;
}
Я знаю, что этот вопрос довольно старый, но у меня есть рабочее решение, которое, как я полагаю, может быть полезно для всех, кто пытается найти эту информацию и пуст в поиске 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 =: + ---- в строку запроса.
Это мое решение в 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
пользоваться
Ничего после того, как первый параметр должен быть отправлен как массив аргументов.
См. пример, приведенный на странице 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 );
Это, конечно, будет запускать несколько фильтров по тем данным, которые вам не нужны, но все равно трюк.
Это можно легко устранить, изменив функцию 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 );
}