Установите атрибут 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?

Author: Christine Cooper, 2013-02-27

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&amp;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.

 4
Author: fuxia, 2013-04-03 16:47:40

Это ужасная идея, так как флэш-фильмы с прозрачным wmode больше не доступны слепым пользователям с программами чтения с экрана. Слепые люди действительно любят слушать видео, прежде чем снова всплывет этот старый каштан. Используйте встроенное видео HTML5, чтобы оно работало для всех, и пользователи IE8 получат ссылку на YouTube. Не заставляйте вашу доступность страдать из-за того, что старые IE были ужасны с внедрением.

 2
Author: user30934, 2013-04-03 16:45:21