it-swarm.com.de

Setzen Sie das wmode-Attribut für den eingebetteten Shortcode auf transparent, damit das Dropdown-Menü in Internet Explorer über YouTube eingebettet wird

Wenn du mit IE8 oder IE9 über mein Dropdown-Menü fährst, wird das Menü div hinter der YouTube-Einbettung angezeigt. Es funktioniert gut in allen anderen Browsern.

Nachforschungen haben ergeben, dass viele andere dasselbe Problem haben und die Lösung darin besteht, das Attribut wmode auf transparent zu setzen. Also zum Beispiel <iframe width="578" height="325" src="http://www.youtube.com/embed/XXXX?wmode=transparent"></iframe> oder <param name="wmode" value="transparent" />.

Meine Frage ist, wie kann ich den Wordpress [embed]-Shortcode anpassen, um das Attribut wmode auf transparent zu setzen?

3

Sie können die HTML-Ausgabe für oEmbed mit oembed_result filtern. Testen Sie nun den HTTP-Host der URL für www.youtube.com und fügen Sie den Parameter hinzu.

Das oEmbed-Ergebnis wird in einem Post-Meta-Feld zwischengespeichert, um zu viele Anforderungen zu vermeiden. Um alte Beiträge zu aktualisieren, habe ich einen Aktivierungshelfer hinzugefügt, der die zwischengespeicherten Inhalte nur für Youtube-Einbettungen löscht.

<?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 );
    /**/
}

Beachten Sie, dass dieses Attribut die Videos für Benutzer von Bildschirmleseprogrammen unzugänglich macht, sodass sie nicht wiedergegeben werden können. Die bessere Option wäre also, stattdessen die HTML5-Ausgabe von Youtube zu verwenden.

4
fuxia

Das ist eine schreckliche Idee, da Flash-Filme mit wmode transparent nicht mehr für blinde Benutzer mit Screenreadern verfügbar sind. Blinde hören gerne Videos, bevor die alte Kastanie wieder auftaucht. Verwenden Sie das eingebettete HTML5-Video, damit es für alle und IE8-Benutzer funktioniert, die einen Link zu YouTube erhalten. Beeinträchtigen Sie nicht Ihre Zugänglichkeit, da die alten IE beim Einbetten schrecklich waren.

2
user30934