Как встраивать видео с YouTube используя https вместо http в URL?
Я использую сайт, который работает только через 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);

Решение 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' );

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

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 );

вы можете принудительно реализовать возврат 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);

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/ (Оно позволяет "отображать" видео так, как если бы оно находилось на вашей странице.)
(Более свежей информации по этой теме не обнаружено.)

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