web-dev-qa-db-fra.com

WP Oembed ne passant pas par la variable "autoplay = 1"

J'ai un problème ici:

Je passe ceci à travers un champ personnalisé: http://www.youtube.com/watch?v=E6P1Q-UycHA&autoplay=1

(notez le autoplay=1)

Mais lorsque je charge la vidéo sur mon thème à l'aide de wp_oembed_get ..., la vidéo s'affiche correctement, mais elle n'écoute pas la variable autoplay=1 que je suis en train de transmettre.

J'ai besoin des vidéos pour jouer sur le chargement de la page.

Des idées?

Merci Alain Fontaine

7
criticerz

Ce ne sont pas vraiment des arguments comme pour YouTube, mais plutôt des arguments pour WordPress lui-même.

Une solution consiste à accéder à votre argument ultérieurement dans un filtre et à modifier la sortie HTML.

Passer le tableau des arguments:

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

Et filtrer:

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

Je sais que cette question est assez ancienne, mais j’ai une solution efficace qui, je pense, pourrait être utile à tous ceux qui essaient de trouver cette information et ne consultent pas les recherches Google.

Cette solution a été testée dans WordPress 3.7.1+:

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

Ajoutez ce qui précède dans le functions.php de votre thème pour que toutes les vidéos YouTube ajoutées via oEmbed soient lues automatiquement.


Comment ça marche

Dans class-oembed.php à la ligne 212, la méthode fetch() applique le filtre oembed_fetch_url pour autoriser les modifications de l'URL.

Pour éviter d'ajouter des paramètres inutiles à d'autres fournisseurs oEmbed, nous vérifions "youtube" dans l'URL du fournisseur. Nous pourrions également rechercher "vimeo" et/ou d'autres services vidéo. Si cette chaîne est présente, nous ajoutons un argument autoplay au paramètre chaîne de requête.

3
jlengstorf

Ceci est ma solution dans 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

prendre plaisir

1
Federico

Poster ma réponse de https://stackoverflow.com/a/55053642/799327 , espérons que ça ira, car c'est du même OP: _


Ainsi, après quelques recherches à ce sujet, le meilleur moyen de le faire est d'utiliser le hook de filtre oembed_fetch_url pour ajouter des arguments supplémentaires à l'URL de la requête oEmbed. Mon objectif spécifique était de permettre à un paramètre de lecture automatique, mais cette méthode est conçue pour être facile à adapter à tout argument oEmbed dont vous avez besoin.

Tout d'abord, ajoutez ceci à votre functions.php:

<?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);

Cette fonction prend l'URL oEmbed générée et ses arguments correspondants et la vérifie en fonction d'une liste codée en dur des arguments figurant sur la liste blanche, dans ce cas ['autoplay']. S'il voit l'un de ces mots clés figurant sur la liste blanche dans les arguments transmis au filtre oEmbed, il les ajoute avec leur valeur donnée à l'URL oEmbed.

Ensuite, tout ce que vous avez à faire est d’ajouter le paramètre oEmbed à votre shortcode dans l’éditeur Wordpress, comme ceci:

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

Sachez que la classe oEmbed dans WP utilise postmeta comme cache pour ces demandes. Par conséquent, si vous avez déjà incorporé l'URL cible, vous devrez peut-être vider votre cache postmeta ou ajouter un cache buster d'une certaine sorte à l'URL cible. Si le lien est dans le cache, le hook de filtre ne pourra jamais être exécuté.

J'espère que cela a du sens, car je pense que c'est une fonctionnalité très utile qui est étonnamment difficile à comprendre.

0
Laust Deleuran

Après toutes les recherches que j'ai trouvées est la suivante. ci-dessous est le 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 );

Crédits à https://Gist.github.com/mustardBees/7704269#file-functions-php .

Merci!

0
achchu93

Anything après le premier paramètre doit être envoyé sous forme de tableau d'arguments.

Voir l'exemple donné sur la page du codex.
http://codex.wordpress.org/Function_Reference/wp_oembed_get

Si vous essayez de prendre une valeur de champ personnalisé et de faire en sorte que le code incorporé le convertisse en vidéo (c.-à-d. Que se passerait-il si vous le plaçiez dans le contenu), alors vous pouvez faire quelque chose comme ça ...

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

Bien sûr, cela va faire passer plusieurs filtres sur les données dont vous n’avez pas besoin, mais ça marche quand même.

0
t31os