Как встраивать видео YouTube с https вместо http в URL?

8

Я управляю сайтом, который общается только через SSL / https, поэтому, если я встраиваю видео YouTube с использованием http, я получу сообщение об ошибке, говорящее, что сайт не полностью защищен. Можно ли что-то переписать, чтобы WordPress принимал https и при этом автоматически вставлял ссылки на YouTube, добавленные в область контента? Потому что теперь, когда я пытаюсь встроить ссылку на YouTube https, все, что отображается, это URL, а не фильм.

Обновить

Я пытался добавить провайдеров, используя этот код в functions.php, но он ничего не делает:

wp_oembed_add_provider('https://youtu.be/*', 'https://youtube.com/oembed' );
wp_oembed_add_provider('#https://(www\.)?youtube.com/watch.*#i', 'https://youtube.com/oembed', true);
wp_oembed_add_provider('http://youtu.be/*', 'https://youtube.com/oembed' );
wp_oembed_add_provider('#http://(www\.)?youtube.com/watch.*#i', 'https://youtube.com/oembed', true);
Ричард Б
источник
1
Хорошо, это в Wordpress Trac: core.trac.wordpress.org/ticket/18719
Ричард Б
Кажется, есть способ обойти это, но я не знаю точно, как реализовать это решение в WordPress, мне нужна
Ричард Б.

Ответы:

5

http://core.trac.wordpress.org/ticket/18719 теперь имеет рабочий патч.

Редактировать: Плагин код, чтобы сделать подобное, пока патч не появится:

wp_oembed_add_provider('#https://(www\.)?youtube.com/watch.*#i', 'http://youtube.com/oembed?scheme=https', true);
wp_oembed_add_provider('https://youtu.be/*', 'http://youtube.com/oembed?scheme=https', false );
эфирное масло
источник
Да, я тоже прокомментировал этот билет. Спасибо!
Ричард Б
7

Решение Отто не работает в WP 3.6, по-видимому, из-за того, что в ядре произошли изменения, и теперь они совпадают с https: //, поэтому добавленные поставщики никогда не будут сопоставлены. Хотя https: // теперь совпадает с ядром, он всегда обеспечивает вставку http: //, даже если исходный URL-адрес - https: //, поэтому у нас все еще остается та же проблема.

Я решил просто преобразовать все протоколы oembeds:

function my_embed_oembed_html( $html ) {
    return preg_replace( '@src="https?:@', 'src="', $html );
}
add_filter( 'embed_oembed_html', 'my_embed_oembed_html' );
Bradt
источник
1
Ищите какое-то временное решение для этой ошибки, пока она не будет исправлена ​​в ядре, это была единственная рабочая проблема. Спасибо! wp_oembed_add_provider()Например, никогда не работали варианты.
Маркус Амальтея Магнусон
Это 2015, эта ошибка, кажется, еще не решена ??
Барт
2

Вы можете взломать принудительное возвращение https в файле functions.php для поиска iframes с src, начинающимся с http, и заменить https. [Я прекратил «быть» из этих URL, так как некоторые из общих URL-адресов - youtu.be и youtube.com]

//Embed Video Fix
function add_secure_video_options($html) {
   if (strpos($html, "<iframe" ) !== false) {
        $search = array('src="http://www.youtu','src="http://youtu');
        $replace = array('src="https://www.youtu','src="https://youtu');
        $html = str_replace($search, $replace, $html);

        return $html;
   } else {
        return $html;
   }
}
add_filter('the_content', 'add_secure_video_options', 10);
troutacular
источник
Спасибо - вы также можете сменить http: // просто на //, чтобы следовать схеме хостинга сайта. Обратите внимание, почему WP не делает этого по умолчанию (если хост поддерживает оба протокола)
Адам,
1

Youtube поддерживает https URL для видео (просто добавьте «s» в обычный URL). Тем не менее, они также заявляют, что:

В частности, в настоящее время через HTTPS доступен только код проигрывателя YouTube. Фактический битовый поток видео и некоторый дополнительный контент, загружаемый проигрывателем YouTube, все еще могут быть доступны через стандартные соединения HTTP, если вы используете URL-адрес HTTPS в своем коде для встраивания.

Похоже, вы пока не сможете получать видеопотоки https. По-видимому, это подтверждается опубликованной вами трак-ссылкой: (Комментарий 7 от Otto42) «Пока YouTube не вернет https, в iframe появится такая ссылка, поэтому в большинстве браузеров такая ссылка просто приведет к поломке страницы, поскольку iframe не SSL «.

Ссылка: http://apiblog.youtube.com/2011/02/https-support-for-youtube-embeds.html

Вы также можете проверить это решение: http://www.adammershon.com/display-youtube-videos-on-ssl-page/ (Это, по сути, "послужит" видео, как если бы оно было на вашей странице.)

(Я не вижу ничего нового по этому вопросу.)

jfacemyer
источник
Но это не означает, что iframe не может быть https, так что, по крайней мере, код проигрывателя загружается таким образом. Страница, на которую вы ссылаетесь, говорит, что может. в моем тестировании установка src https на iframe отлично работает на сайте https, тогда как src http не отображается - но даже если я добавлю ссылку https [embed], я получу iframe с http.
Адам