Установите атрибут wmode прозрачным для шорткода встраивания, чтобы раскрывающееся меню зависало над встраиванием YouTube в Internet Explorer
При наведении курсора мыши на мое раскрывающееся меню с помощью IE8 или IE9 за встраиванием YouTube отобразится раздел меню. Он отлично работает во всех других браузерах.
Проведя исследование, я обнаружил, что у многих других есть та же проблема , и решение состоит в том, чтобы установить атрибут wmode
в transparent
. Так, например<iframe width="578" height="325" src="http://www.youtube.com/embed/XXXX?wmode=transparent"></iframe>
или <param name="wmode" value="transparent" />
.
Мой вопрос в том, как мне настроить шорткод Wordpress [embed]
, чтобы установить атрибут wmode
в transparent
?
2 answers
Вы можете отфильтровать вывод HTML для oEmbed с помощью oembed_result
. Теперь проверьте HTTP-узел URL-адреса на наличие www.youtube.com
и добавьте параметр.
Результат oEmbed кэшируется в мета-поле post, чтобы избежать слишком большого количества запросов. Чтобы обновить старые сообщения, я добавил помощника по активации, который очищает кэшированный контент только для встраиваемых Youtube.
<?php # -*- coding: utf-8 -*-
/* Plugin Name: Add 'wmode' to video embeds */
register_activation_hook( __FILE__, 't5_clear_oembed_cache' );
add_filter( 'oembed_result', 't5_oembed_wmode', 10, 2 );
/**
* Add "wmode=transparent" query string to youtube embeds.
*
* @wp-hook oembed_result
* @param string $html
* @param string $url
* @return string
*/
function t5_oembed_wmode( $html, $url )
{
if ( 'www.youtube.com' !== parse_url( $url, PHP_URL_HOST ) )
return $html;
return str_replace( '=oembed', '=oembed&wmode=transparent', $html );
}
/**
* Clear oEmbed cache for all youtube embeds.
*
* @return void
*/
function t5_clear_oembed_cache()
{
global $wpdb;
$posts = $wpdb->get_results(
"SELECT post_id, meta_key
FROM `$wpdb->postmeta`
WHERE `meta_key` LIKE '_oembed%'
AND `meta_value` LIKE '%youtube%'"
);
if ( ! $posts )
return;
/*
return print '<pre>$posts = ' . htmlspecialchars( print_r( $posts, TRUE ), ENT_QUOTES, 'utf-8', FALSE ) . "</pre>\n";
/*/
foreach ( $posts as $post )
delete_post_meta( $post->post_id, $post->meta_key );
/**/
}
Имейте в виду, что этот атрибут делает видео недоступными для пользователей программы чтения с экрана , поэтому они не могут их слушать. Так что лучший вариант вместо этого можно было бы использовать вывод HTML5 с Youtube.
Это ужасная идея, так как флэш-фильмы с прозрачным wmode больше не доступны слепым пользователям с программами чтения с экрана. Слепые люди действительно любят слушать видео, прежде чем снова всплывет этот старый каштан. Используйте встроенное видео HTML5, чтобы оно работало для всех, и пользователи IE8 получат ссылку на YouTube. Не заставляйте вашу доступность страдать из-за того, что старые IE были ужасны с внедрением.