web-dev-qa-db-ja.com

WP "autoplay = 1"変数を通過しない

私はここで問題を抱えています:

これをカスタムフィールドに渡します:http://www.youtube.com/watch?v=E6P1Q-UycHA&autoplay=1

autoplay=1に注意してください)

しかし、wp_oembed_getを使用して自分のテーマにビデオをロードすると...ビデオは正常に表示されますが、通過しているautoplay=1変数は聞こえません。

ページの負荷で動画を再生する必要があります。

何か案は?

ありがとう、アランフォンテーヌ

7
criticerz

これらは、YouTubeの場合のように実際には議論ではなく、WordPress自体のための議論である。

これを処理する1つの方法は、後でフィルタ内で引数にアクセスしてHTML出力を変更することです。

引数配列を渡します。

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

そしてフィルタする:

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

私はこの質問がかなり古くからあると知っています、しかし私がこの情報を見つけようとしていてグーグル検索で空になることを誰かに役に立つかもしれないと私が思う実用的な解決策を持っています。

このソリューションは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);

OEmbedで追加したすべてのYouTube動画を自動再生するには、テーマのfunctions.phpに上記を追加します。


この仕組み

212行目の class-oembed.php では、fetch()メソッドはフィルタoembed_fetch_urlを適用してURLの変更を許可しています。

他のoEmbedプロバイダに無用なパラメータが追加されないようにするために、プロバイダのURLで "youtube"をチェックします - "vimeo"や他のビデオサービスもチェックできます - そしてその文字列が存在する場合はautoplay引数を追加します。クエリ文字列。

3
jlengstorf

これは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

楽しい

1
Federico

https://stackoverflow.com/a/55053642/799327 からの回答をクロスポストします。それが同じOPからのものであるのでそれが問題ないことを願っています:


そのため、これについていくつか調べた後、これを行うための最良の方法は、oEmbedリクエストURLに追加の引数を追加するためにoembed_fetch_url filterフックを利用することです。私の特定の目標は自動再生パラメータを許可することでしたが、このメソッドはあなたが必要とするoEmbed引数に合わせて調整するのが簡単になるように作られています。

まず、これを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);

この関数は、生成されたoEmbed URLとそれに対応する引数を受け取り、再度、ホワイトリストに登録された引数のハードコードされたリスト(この場合は['autoplay'])をチェックします。 oEmbedフィルタに渡された引数でこれらのホワイトリストに登録されたキーワードのいずれかが見つかると、指定された値でそれらをoEmbed URLに追加します。

それから、あなたがする必要があるのは、このようにWordpressエディタであなたのショートコードにoEmbedパラメータを追加することです:

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

WPのoEmbedクラスはpostmetaをこれらのリクエストのキャッシュとして使用するので、以前にターゲットURLを埋め込んだことがある場合は、postmetaキャッシュを何らかの方法で消去するか、キャッシュを追加する必要があります。ターゲットURLに何らかのバスター。リンクがキャッシュにある場合、フィルタフックは実行されません。

これが理にかなっていることを願っています。これは非常に便利な機能であり、達成方法を理解するのが驚くほど難しいからです。

0
Laust Deleuran

結局私が見つけたのはこれだ。以下はそのコードです。

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

https://Gist.github.com/mustardBees/7704269#file-functions-php へのクレジット。

ありがとうございます。

0
achchu93

最初のパラメータの後 は引数の配列として送信する必要があります。

コーデックスページにある例を参照してください。
http://codex.wordpress.org/Function_Reference/wp_oembed_get

カスタムフィールドの値を取得して埋め込みコードで動画に変換しようとしている場合(つまり、コンテンツに配置した場合に起こること)、次のようなことができます。

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

もちろんこれはあなたが必要としないデータに対していくつかのフィルタを実行しますが、それはすべて同じトリックを行います..

0
t31os