web-dev-qa-db-de.com

WP Oembed geht nicht durch die Variable "autoplay = 1"

Ich habe hier ein Problem:

Ich übergebe dies durch ein benutzerdefiniertes Feld: http://www.youtube.com/watch?v=E6P1Q-UycHA&autoplay=1

(beachte den autoplay=1)

Aber wenn ich das Video mit wp_oembed_get auf mein Theme lade ... wird das Video gut angezeigt, aber die autoplay=1-Variable, die ich gerade durchlaufe, wird nicht angehört.

Ich brauche die Videos zum Abspielen beim Laden der Seite.

Irgendwelche Ideen?

Danke, Alain Fontaine

7
criticerz

Das sind keine wirklichen Argumente wie für YouTube, eher Argumente für WordPress.

Eine Möglichkeit wäre, später innerhalb eines Filters auf Ihr Argument zuzugreifen und die HTML-Ausgabe zu ändern.

Übergeben Sie das Argument-Array:

wp_oembed_get( 'http://www.youtube.com/watch?v=', array( 'autoplay' => 1 ) );

Und Filter:

add_filter('oembed_result','oembed_result', 10, 3);

function oembed_result($html, $url, $args) {

    // $args includes custom argument
    // modify $html as you need

    return $html;
}
6
Rarst

Ich weiß, dass diese Frage ziemlich alt ist, aber ich habe eine funktionierende Lösung, die möglicherweise für alle anderen hilfreich ist, die versuchen, diese Informationen zu finden, und die in Google-Suchen leer sind.

Diese Lösung wurde in WordPress 3.7.1+ getestet:

/**
 * Adds the `autoplay` query string argument to embedded YouTube videos
 */
function wpse5362_autoplay_youtube_oembed( $provider, $url, $args ) {
    if (strpos($provider, 'youtube')!==FALSE) {
        $provider = add_query_arg('autoplay', 1, $provider);
    }

    return $provider;
}
add_filter('oembed_fetch_url', 'wpse5362_autoplay_youtube_oembed', 10, 3);

Fügen Sie den obigen Code in den functions.php Ihres Themas ein, damit alle über oEmbed hinzugefügten YouTube-Videos automatisch wiedergegeben werden.


Wie das funktioniert

In class-oembed.php in Zeile 212 wendet die Methode fetch() den Filter oembed_fetch_url an, um Änderungen an der URL zuzulassen.

Um zu vermeiden, dass anderen oEmbed-Anbietern unnötige Parameter hinzugefügt werden, überprüfen wir die Anbieter-URL auf "youtube" - wir können auch nach "vimeo" und/oder anderen Videodiensten suchen - und fügen dem Argument "autoplay" hinzu, wenn diese Zeichenfolge vorhanden ist Abfragezeichenfolge.

3
jlengstorf

Das ist meine Lösung in functions.php

function embed_responsive_autoplay($code){
    if(strpos($code, 'youtu.be') !== false || strpos($code, 'youtube.com') !== false){
        $return = preg_replace('@embed/([^"&]*)@', 'embed/$1&showinfo=0&autoplay=1', $code);
        return '<div class="embed-container">' . $return . '</div>';
    }
    return '<div class="embed-container">' . $code . '</div>';
}

add_filter( 'embed_oembed_html', 'embed_responsive_autoplay');
add_filter( 'video_embed_html', 'embed_responsive_autoplay' ); // Jetpack

genießen

1
Federico

Crossposting meiner Antwort von https://stackoverflow.com/a/55053642/799327 , hoffe, das ist in Ordnung, da es vom selben OP stammt:


Nach einigen Nachforschungen zu diesem Thema ist es daher am besten, den Filter-Hook oembed_fetch_url zu verwenden, um der oEmbed-Anforderungs-URL zusätzliche Argumente hinzuzufügen. Mein spezielles Ziel war es, einen Autoplay-Parameter zuzulassen, aber diese Methode ist so aufgebaut, dass sie sich leicht an jedes von Ihnen benötigte OEmbed-Argument anpassen lässt.

Fügen Sie dies zunächst zu Ihrem functions.php hinzu:

<?php
/**
 * Add parameters to embed
 * @src https://foxland.fi/adding-parameters-to-wordpress-oembed/
 * @src https://github.com/WordPress/WordPress/blob/ec417a34a7ce0d10a998b7eb6d50d7ba6291d94d/wp-includes/class-oembed.php#L553
 */
$allowed_args = ['autoplay'];

function koa_oembed_args($provider, $url, $args) {
    global $allowed_args;

    $filtered_args = array_filter(
        $args,
        function ($key) use ($allowed_args) {
            return in_array($key, $allowed_args);
        },
        ARRAY_FILTER_USE_KEY
    );

    foreach ($filtered_args as $key => $value) {
        $provider = add_query_arg($key, $value, $provider);
    }

    return $provider;
}

add_filter('oembed_fetch_url', 'koa_oembed_args', 10, 3);

Diese Funktion verwendet die generierte oEmbed-URL und die zugehörigen Argumente und überprüft sie anhand einer hartcodierten Liste von Argumenten auf der Positivliste, in diesem Fall ['autoplay']. Wenn eines dieser Whitelist-Schlüsselwörter in den Argumenten angezeigt wird, die an den oEmbed-Filter übergeben wurden, werden sie mit dem angegebenen Wert zur oEmbed-URL hinzugefügt.

Dann müssen Sie nur noch den oEmbed-Parameter wie folgt zu Ihrem Shortcode im Wordpress-Editor hinzufügen:

[embed autoplay="true"]https://vimeo.com/1234567890/1234567890[/embed]

Beachten Sie, dass die oEmbed-Klasse in WP das Postmeta als Cache für diese Anforderungen verwendet. Wenn Sie also die Ziel-URL zuvor eingebettet haben, müssen Sie möglicherweise den Postmeta-Cache löschen oder einen Cache hinzufügen Buster irgendeiner Art an die Ziel-URL. Befindet sich der Link im Cache, wird der Filter-Hook niemals ausgeführt.

Ich hoffe, dies macht Sinn, da ich der Meinung bin, dass es ein ziemlich nützliches Feature ist, das überraschend schwer herauszufinden ist, wie es erreicht werden kann.

0
Laust Deleuran

Nach all der Forschung, was ich gefunden habe, ist dies. Unten ist der Code.

function iWeb_modest_youtube_player( $html, $url, $args ) {
    return str_replace( '?feature=oembed', '? 
    feature=oembed&modestbranding=1&showinfo=0&rel=0', $html );
}
add_filter( 'oembed_result', 'iWeb_modest_youtube_player', 10, 3 );

Credits an https://Gist.github.com/mustardBees/7704269#file-functions-php .

Vielen Dank!

0
achchu93

Alles nach dem ersten Parameter muss als Array von Argumenten gesendet werden.

Siehe das Beispiel auf der Codex-Seite.
http://codex.wordpress.org/Function_Reference/wp_oembed_get

Wenn Sie versuchen, einen benutzerdefinierten Feldwert zu verwenden und den Einbettungscode in ein Video umwandeln zu lassen (dh was würde passieren, wenn Sie ihn in den Inhalt einfügen), können Sie so etwas tun ...

/*
   N - replace with a valid post ID
   key - replace with a valid custom field key(name)
*/
$data = get_post_meta( N, 'key', true );
if( $data )
   echo apply_filters( 'the_content', $data );

Dies führt natürlich mehrere Filter über die Daten aus, die Sie nicht benötigen, aber es macht den Trick trotzdem.

0
t31os