web-dev-qa-db-ja.com

Oembed_dataparseを操作すると、YouTubeの埋め込みに機能しなくなりました

YouTubeの埋め込みを操作するための私のgo-toコードはもう機能しません。誰が私が間違っていることを私に説明できますか?

これはfunctions.phpの私のコードです。

// OEMBED FILTER
function bolster_oembed_filter( $return, $data ) {
    // YOUTUBE (ADD PARAMS, NOCOOKIE DOMAIN)
    if(
            is_object( $data ) 
        &&  property_exists( $data, 'provider_name' )
        &&  'YouTube' === $data->provider_name
    ){
        $return = preg_replace("@src=(['\"])?([^'\">\s]*)@", "src=$1$2?rel=0&showinfo=0&wmode=opaque", $return);
        $return = preg_replace('/youtube\.com\/(v|embed)\//s', 'youtube-nocookie.com/$1/', $return);
    }
    // VIDEO (ADD WRAPPER)
    if(
            is_object( $data ) 
        &&  property_exists( $data, 'type' )
        &&  'video' === $data->type
    ){
        $return = '<figure class="media">'.$return.'</figure>';
    }
    return $return;
}
add_filter('oembed_dataparse', 'bolster_oembed_filter', 10, 2 );

ご覧のとおり、プロバイダがYouTubeであるかどうかを確認し、それがtrueを返すときに出力を操作します。埋め込みタイプがvideoの場合、出力を<figure>タグでラップします。

Vimeoのビデオを埋め込むと、埋め込みコードが<figure>タグにラップされます。 YouTubeの動画を埋め込むと、埋め込まれますが、私の操作は適用されません。私はこれが機能していたことを知っています、それはWordPressの最近のバージョンがもうoembed_dataparseの影響を受けないようにする原因となる何かを変えたようです。

テストの前に埋め込みキャッシュを消去したので、それが原因ではないと確信しています。

3
Florian

これで解決したと思います。

add_filter('oembed_dataparse', 'bolster_oembed_filter', 0, 2 );

add_filter ステートメントの優先順位を0に変更しましたが、これで再び機能します。

2
Florian