Как встраивать видео с YouTube используя https вместо http в URL?

31 янв. 2012 г., 12:48:06
Просмотры: 20.3K
Голосов: 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);
2
Комментарии

Ок, это в Wordpress Trac: http://core.trac.wordpress.org/ticket/18719

Richard B Richard B
1 февр. 2012 г. 12:01:20

Кажется, есть обходной путь, но я не знаю точно, как реализовать это решение в WordPress, хотел бы получить помощь: http://groups.google.com/group/youtube-api-gdata/browse_thread/thread/4bd15af99c3631af/b5876ac42863cc06?lnk=gst&q=oembed+https#b5876ac42863cc06

Richard B Richard B
1 февр. 2012 г. 15:21:02
Все ответы на вопрос 4
2

Решение Otto не работает в WP 3.6, предположительно потому, что oembeds изменились в ядре и теперь соответствуют https://, поэтому добавленные провайдеры никогда не совпадают. Хотя https:// теперь совпадает в ядре, он всегда предоставляет embed с 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' );
9 сент. 2013 г. 23:08:50
Комментарии

Ищу временное решение для этого бага, пока его не исправят в ядре, это единственное работающее. Спасибо! Никогда не удавалось заставить работать варианты с wp_oembed_add_provider(), например.

Markus Amalthea Magnuson Markus Amalthea Magnuson
13 сент. 2013 г. 21:56:31

2015 год, а этот баг до сих пор не исправлен??

bart bart
21 сент. 2015 г. 06:16:10
1

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 );
2 февр. 2012 г. 20:48:45
Комментарии

Да, я также оставил комментарий в этом тикете trac. Спасибо!

Richard B Richard B
6 февр. 2012 г. 22:07:11
1

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

//Исправление встраиваемого видео
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);
23 окт. 2013 г. 22:28:27
Комментарии

Спасибо - вы также можете просто заменить http:// на //, чтобы соответствовать схеме хостинга. Не уверен, почему WordPress не делает это по умолчанию (если хостинг поддерживает оба протокола)

Adam Adam
15 июн. 2014 г. 23:26:42
1

YouTube поддерживает HTTPS-ссылки для видео (достаточно добавить букву "s" в обычный URL). Однако они также отмечают:

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

Таким образом, похоже, что пока невозможно получить HTTPS-видеопотоки. Это подтверждается ссылкой на Trac, которую вы указали: (Комментарий 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/ (Оно позволяет "отображать" видео так, как если бы оно находилось на вашей странице.)

(Более свежей информации по этой теме не обнаружено.)

2 февр. 2012 г. 18:50:45
Комментарии

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

Adam Adam
15 июн. 2014 г. 23:29:05