IE 8またはIE 9を使用してドロップダウンメニューにカーソルを合わせると、メニューdivが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
に設定する方法です。
oembed_result
を使用してoEmbedのHTML出力をフィルタリングできます。それではwww.youtube.com
のURLのHTTPホストをテストし、パラメータを追加します。
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 );
/**/
}
この属性を使用すると、スクリーンリーダーのユーザーはビデオ にアクセスできなくなり 、ユーザーはそれらを聞くことができなくなります。だからより良いオプションは代わりにYoutubeからのHTML5出力を使うことでしょう。
Wmodeを透明にしたFlashムービーは、スクリーンリーダーを持った盲目のユーザーにはもう利用できないので、それはひどい考えです。その古い栗が再び現れる前に、盲目の人々はビデオを聴くのが好きです。 HTML5ビデオ埋め込みを使用して、YouTubeおよびYouTubeへのリンクを取得しているすべてのユーザーおよびIE8ユーザーに対して機能するようにします。古いIEは埋め込みがひどいので、あなたのアクセシビリティを損なわないでください。