WP Oembed non passa la variabile "autoplay=1"

14 dic 2010, 20:17:41
Visualizzazioni: 15.5K
Voti: 8

Sto avendo un problema:

Sto passando questo attraverso un campo personalizzato: http://www.youtube.com/watch?v=E6P1Q-UycHA&autoplay=1

(notare il autoplay=1)

Ma quando carico il video sul mio tema usando wp_oembed_get... il video viene visualizzato correttamente, ma non risponde alla variabile autoplay=1 che sto passando.

Ho bisogno che i video partano automaticamente al caricamento della pagina.

Qualche idea?

Grazie, Alain Fontaine

1
Commenti

Prova questa risposta:

http://stackoverflow.com/a/16801334/2721050

È stata molto utile per me

Erez Lieberman Erez Lieberman
22 feb 2015 15:26:22
Tutte le risposte alla domanda 8
0

Questi non sono veramente argomenti come per YouTube, ma piuttosto argomenti per WordPress stesso.

Un modo per gestirlo sarebbe accedere all'argomento in un secondo momento all'interno di un filtro e modificare l'output HTML.

Passa l'array di argomenti:

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

E filtra:

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

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

    // $args include l'argomento personalizzato
    // modifica $html come necessario

    return $html;
}
15 dic 2010 09:17:38
1

So che questa domanda è piuttosto vecchia, ma ho una soluzione funzionante che penso possa essere utile a chiunque altro stia cercando queste informazioni e non trovi nulla nelle ricerche Google.

Questa soluzione è stata testata in WordPress 3.7.1+:

/**
 * Aggiunge l'argomento `autoplay` alla stringa di query dei video YouTube incorporati
 */
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);

Aggiungi il codice sopra nel file functions.php del tuo tema per far sì che tutti i video YouTube aggiunti tramite oEmbed partano automaticamente.


Come Funziona

In class-oembed.php alla riga 212, il metodo fetch() applica il filtro oembed_fetch_url per consentire modifiche all'URL.

Per evitare di aggiungere parametri inutili ad altri provider oEmbed, controlliamo la presenza di "youtube" nell'URL del provider — potremmo anche cercare "vimeo" e/o altri servizi video — e, se quella stringa è presente, aggiunge un argomento autoplay alla stringa di query.

23 dic 2013 00:01:13
Commenti

Questa soluzione non funziona per me. Aggiunge &autoplay=1 all'URL del provider. Questo NON è l'src dell'iframe, e il sistema oembed di YouTube non lo trasferisce. Il valore viene perso durante _fetch_with_format che viene chiamato dopo oembed_fetch_url. Forse in passato funzionava ma YouTube ha cambiato la loro API oembed?

Radley Sustaire Radley Sustaire
22 nov 2016 03:19:20
0

Ripubblico la mia risposta da https://stackoverflow.com/a/55053642/799327, spero vada bene dato che proviene dallo stesso OP:


Dopo alcune ricerche, il modo migliore per farlo è sfruttare l'hook filter oembed_fetch_url per aggiungere argomenti extra all'URL della richiesta oEmbed. Il mio obiettivo specifico era consentire un parametro di autoplay, ma questo metodo è costruito per essere facilmente adattabile a qualsiasi argomento oEmbed di cui hai bisogno.

Prima di tutto, aggiungi questo al tuo functions.php:

<?php
/**
 * Aggiungi parametri agli 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);

Questa funzione prende l'URL oEmbed generato e i suoi argomenti corrispondenti e li confronta con un elenco hard-coded di argomenti consentiti, in questo caso ['autoplay']. Se rileva una di queste parole chiave negli argomenti passati al filtro oEmbed, le aggiunge con il loro valore dato all'URL oEmbed.

Poi, tutto ciò che devi fare è aggiungere il parametro oEmbed al tuo shortcode nell'editor di Wordpress, in questo modo:

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

Tieni presente che la classe oEmbed in WP utilizza il postmeta come cache per queste richieste, quindi se hai già incorporato l'URL di destinazione prima, potresti dover svuotare la cache del postmeta in qualche modo o aggiungere un cache buster di qualche tipo all'URL di destinazione. Se il link è nella cache, l'hook filter non verrà mai eseguito.

Spero che questo abbia senso, poiché ritengo che sia una funzionalità piuttosto utile che è sorprendentemente difficile capire come ottenere.

8 mar 2019 00:14:19
1

Questa è la mia soluzione 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

divertiti

12 dic 2014 18:30:32
Commenti

Per favore non incollare un blocco di codice, magari [modificalo] e aggiungi qualche spiegazione.

Mayeenul Islam Mayeenul Islam
13 dic 2014 07:01:54
5

Qualsiasi cosa dopo il primo parametro deve essere inviata come un array di argomenti.

Vedi l'esempio fornito nella pagina del codex.
http://codex.wordpress.org/Function_Reference/wp_oembed_get

Se stai cercando di prendere il valore di un campo personalizzato e convertirlo in codice embed per un video (cioè quello che accadrebbe se lo inserissi nel contenuto), puoi fare qualcosa come questo...

/*
   N - sostituisci con un ID di post valido
   key - sostituisci con una chiave di campo personalizzato valida (nome)
*/
$data = get_post_meta( N, 'key', true );
if( $data )
   echo apply_filters( 'the_content', $data );

Questo ovviamente applicherà diversi filtri ai dati che potresti non necessitare, ma funziona comunque..

14 dic 2010 22:56:13
Commenti

Sfortunatamente, gli unici argomenti che wp_oembed_get accetta sono 'width' e 'height'

John P Bloch John P Bloch
14 dic 2010 23:00:45

Immagino che non si possa passare quell'argomento allora... almeno non usando wp_oembed_get..

t31os t31os
14 dic 2010 23:10:26

Sì; per quanto ne so (anche se potrei sbagliarmi) l'API oEmbed di YouTube non permette affatto quell'argomento.

John P Bloch John P Bloch
14 dic 2010 23:56:32

Ho fatto un po' di ricerche sull'embed e, per quanto ne so (come hai detto tu), gli unici argomenti che vengono passati sono altezza e larghezza... (facile da testare, chiama la funzione con un array passato, non funziona con autoplay, mentre larghezza e altezza funzionano).

t31os t31os
15 dic 2010 00:05:49

Grazie a tutti, dovrò cercare un'altra soluzione.

criticerz criticerz
15 dic 2010 06:44:44
0

Dopo tutte le ricerche, quello che ho trovato è questo. Di seguito il codice.

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

Crediti a https://gist.github.com/mustardBees/7704269#file-functions-php.

Grazie!

17 ott 2018 14:18:49
0

Non so se sia ancora necessario, ma posterò la risposta qui

<?php
/**
 * Script ACF oEmbed con parametri del player
 * @link https://www.advancedcustomfields.com/resources/oembed/
 */

$video = get_field('video');

// usa preg_match per trovare lo src dell'iframe
preg_match('/src="(.+?)"/', $video, $matches);
$src = $matches[1];

// aggiungi parametri extra allo src dell'iframe
$params = array(
    'background'    => 1,
    'autoplay'      => 1,
    'controls'      => 0,
    'loop'          => 0,
    'color'         => '178395',
    'title'         => 0,
    'byline'        => 0,
    'portrait'      => 0,
    'rel'           => 0,
    'showinfo'      => 0,
);

$new_src = add_query_arg($params, $src);                
$video = str_replace($src, $new_src, $video);

// aggiungi attributi extra all'html dell'iframe
$attributes = 'frameborder="0"';

$video = str_replace('></iframe>', ' ' . $attributes . '></iframe>', $video);

if($video) :
    echo '<div class='video-wrapper'>'.$iframe.'</div>';
endif;

anche come Gist: https://gist.github.com/zachakbar/3100e093cb8484d47586a259f9f960dc

9 feb 2023 22:37:34
3
-7

Questo può essere facilmente risolto modificando la funzione wp_oembed_get() in wp-includes/media.php in questo modo:

function wp_oembed_get( $url, $args = '' ) {
    // Costruisce manualmente l'embed IFRAME con l'opzione dei video correlati disabilitata e l'autoplay attivato
    if(preg_match("/youtube.com\/watch\?v=([^&]+)/i", $url, $aMatch)){
        return '<iframe width="560" height="315" src="http://www.youtube.com/embed/' . $aMatch[1] . '?rel=0&autoplay=1" frameborder="0" allowfullscreen></iframe>';
    }

    require_once( ABSPATH . WPINC . '/class-oembed.php' );
    $oembed = _wp_oembed_get_object();
    return $oembed->get_html( $url, $args );
}
12 apr 2012 10:33:23
Commenti

Assicurati inoltre di eseguire la seguente query SQL dopo aver apportato questa modifica in modo che l'embed venga aggiornato:

DELETE FROM wp_postmeta WHERE meta_key LIKE 'oembed%'

interimpulso interimpulso
12 apr 2012 10:38:13

Non potrai più aggiornare WP dopo aver fatto questo. Non raccomandato.

fuxia fuxia
13 apr 2012 04:32:47

Modificare il core è semplicemente una cattiva idea.

Philip Downer Philip Downer
1 apr 2013 20:57:48