WP Oembed nu transmite variabila "autoplay=1" | WordPress Developer

14 dec. 2010, 20:17:41
Vizualizări: 15.5K
Voturi: 8

Am o problemă aici:

Transmit acest URL printr-un câmp personalizat: http://www.youtube.com/watch?v=E6P1Q-UycHA&autoplay=1

(observați parametrul autoplay=1)

Dar când încarc videoclipul în tema mea folosind wp_oembed_get... afișează videoclipul corect, dar nu ia în considerare parametrul autoplay=1 pe care îl transmit.

Am nevoie ca videoclipurile să pornească automat la încărcarea paginii.

Idei?

Mulțumesc, Alain Fontaine

1
Comentarii

Încearcă acest răspuns:

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

A fost foarte util pentru mine

Erez Lieberman Erez Lieberman
22 feb. 2015 15:26:22
Toate răspunsurile la întrebare 8
0

Acestea nu sunt chiar argumente precum cele pentru YouTube, ci mai degrabă argumente pentru WordPress în sine.

O modalitate de a gestiona acest lucru ar fi să accesați argumentul mai târziu în cadrul unui filtru și să modificați output-ul HTML.

Transmiteți un array de argumente:

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

Și filtrați:

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

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

    // $args include argumentul personalizat
    // modificați $html după cum aveți nevoie

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

Știu că această întrebare este destul de veche, dar am o soluție funcțională care cred că ar putea fi utilă pentru oricine încearcă să găsească această informație și nu găsește nimic în căutările Google.

Această soluție a fost testată în WordPress 3.7.1+:

/**
 * Adaugă argumentul `autoplay` în șirul de interogare pentru videoclipurile YouTube incorporate
 */
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);

Adăugați codul de mai sus în functions.php al temei pentru a face ca toate videoclipurile YouTube adăugate prin oEmbed să pornească automat.


Cum funcționează

În class-oembed.php la linia 212, metoda fetch() aplică filtrul oembed_fetch_url pentru a permite modificări ale URL-ului.

Pentru a evita adăugarea de parametri inutili la alți furnizori oEmbed, verificăm dacă în URL-ul furnizorului există "youtube" — am putea verifica și "vimeo" sau/sau alte servicii de videoclipuri — și, dacă acel șir este prezent, adăugăm un argument autoplay la șirul de interogare.

23 dec. 2013 00:01:13
Comentarii

Această soluție nu funcționează pentru mine. Adaugă &autoplay=1 la URL-ul furnizorului. Acesta NU este src-ul iframe-ului, iar sistemul de oembed al YouTube nu îl transferă. Valoarea se pierde în timpul _fetch_with_format care este apelat după oembed_fetch_url. Poate că aceasta funcționa în trecut, dar YouTube și-a modificat API-ul de oembed?

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

Postez răspunsul meu de pe https://stackoverflow.com/a/55053642/799327, sper că e în regulă deoarece este de la același OP:


După ce am cercetat acest subiect, cea mai bună metodă este să folosim hook-ul de filtrare oembed_fetch_url pentru a adăuga argumente suplimentare la URL-ul de solicitare oEmbed. Scopul meu specific a fost să permit un parametru de autoplay, dar această metodă este concepută pentru a fi ușor de adaptat la orice argument oEmbed de care ai nevoie.

Mai întâi, adaugă acest cod în functions.php:

<?php
/**
 * Adaugă parametri la 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);

Această funcție preia URL-ul generat oEmbed și argumentele corespunzătoare, apoi le verifică împotriva unei liste predefinite de argumente permise, în acest caz ['autoplay']. Dacă identifică oricare dintre aceste cuvinte cheie permise în argumentele transmise filtrului oEmbed, le adaugă cu valoarea lor la URL-ul oEmbed.

Apoi, tot ce trebuie să faci este să adaugi parametrul oEmbed în shortcode-ul din editorul WordPress, astfel:

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

Fii atent că clasa oEmbed din WP folosește postmeta ca cache pentru aceste cereri, așa că dacă ai încorporat URL-ul țintă anterior, poate fi necesar să ștergi cache-ul postmeta sau să adaugi un cache buster la URL-ul țintă. Dacă link-ul este în cache, hook-ul de filtrare nu va fi executat niciodată.

Sper că acest lucru are sens, deoarece consider că este o funcționalitate destul de utilă, dar surprinzător de greu de realizat.

8 mar. 2019 00:14:19
1

Aceasta este soluția mea în 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

sper să vă folosească

12 dec. 2014 18:30:32
Comentarii

Te rog să nu copiezi un bloc de cod, poate [editează] și adaugă o explicație pentru el.

Mayeenul Islam Mayeenul Islam
13 dec. 2014 07:01:54
5

Orice după primul parametru trebuie trimis ca un array de argumente.

Vezi exemplul dat pe pagina codex.
http://codex.wordpress.org/Function_Reference/wp_oembed_get

Dacă încerci să iei o valoare din câmpul personalizat și să o convertești în cod de embed (adică ceea ce s-ar întâmpla dacă ai plasa conținutul în postare), atunci poți face ceva de genul acesta...

/*
   N - înlocuiește cu un ID valid de postare  
   key - înlocuiește cu o cheie validă de câmp personalizat(nume)
*/
$data = get_post_meta( N, 'key', true );
if( $data )
   echo apply_filters( 'the_content', $data );

Desigur, acest lucru va rula mai mulți filtre asupra datelor pe care nu ai nevoie, dar funcționează la fel de bine..

14 dec. 2010 22:56:13
Comentarii

Din păcate, singurele argumente pe care wp_oembed_get le va asculta sunt 'width' și 'height'

John P Bloch John P Bloch
14 dec. 2010 23:00:45

Presupun că nu se poate pasa acel argument atunci... cel puțin nu folosind wp_oembed_get..

t31os t31os
14 dec. 2010 23:10:26

Da; din câte știu eu (deși aș putea greși în privința asta) API-ul oEmbed de la YouTube nu permite deloc acel argument.

John P Bloch John P Bloch
14 dec. 2010 23:56:32

Am făcut o mică investigație în legătură cu embed și, din câte am înțeles (așa cum ai spus), singurele argumente care sunt transmise sunt înălțimea și lățimea... (este ușor de testat, apelează funcția cu un array transmis, nu funcționează cu autoplay, dar lățimea și înălțimea funcționează).

t31os t31os
15 dec. 2010 00:05:49

Mulțumesc tuturor, va trebui să caut o altă soluție.

criticerz criticerz
15 dec. 2010 06:44:44
0

După toate cercetările, ceea ce am găsit este acest lucru. Mai jos este codul.

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

Credite către https://gist.github.com/mustardBees/7704269#file-functions-php.

Mulțumesc!

17 oct. 2018 14:18:49
0

Nu știu dacă mai este nevoie, dar voi posta răspunsul aici

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

$video = get_field('video');

// folosește preg_match pentru a găsi src-ul iframe-ului
preg_match('/src="(.+?)"/', $video, $matches);
$src = $matches[1];

// adaugă parametri suplimentari la src-ul iframe-ului
$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);

// adaugă atribute suplimentare iframe-ului HTML
$attributes = 'frameborder="0"';

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

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

de asemenea, ca Gist: https://gist.github.com/zachakbar/3100e093cb8484d47586a259f9f960dc

9 feb. 2023 22:37:34
3
-7

Aceasta poate fi rezolvată ușor prin modificarea funcției wp_oembed_get() din wp-includes/media.php astfel:

function wp_oembed_get( $url, $args = '' ) {
    // Construim manual embed-ul IFRAME cu opțiunea de videoclipuri recomandate dezactivată și autoplay pornit
    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
Comentarii

De asemenea, asigură-te să rulezi următoarea interogare SQL după ce faci această modificare, astfel încât embed-ul să fie actualizat:

DELETE FROM wp_postmeta WHERE meta_key LIKE 'oembed%'

interimpulso interimpulso
12 apr. 2012 10:38:13

Nu vei mai putea actualiza WP după ce faci asta. Nu este recomandat.

fuxia fuxia
13 apr. 2012 04:32:47

Modificarea fișierelor de nucleu este pur și simplu o idee proastă.

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