web-dev-qa-db-ja.com

自動的に埋め込まれたYouTubeにラッパーを追加する?

WordPressの新しいバージョンでは、YouTubeが自動的にオーバーエンディングします。私が取り組んでいるこの特定のサイトでは、埋め込みdivを囲むユニークなiframeラッパーが必要です。私は自分のfunctions.phpを調べましたが、YouTubeに関連するものは何も見えませんでした。 HTMLを追加するために必要なコードはどこにありますか。

2
MVS

あなたのサイト用に カスタムプラグイン を作成し、その中にこのコードを入れてください。

add_filter('oembed_dataparse','oembed_youtube_add_wrapper',10,3);
function oembed_youtube_add_wrapper($return, $data, $url) {
    if ($data->provider_name == 'YouTube') {
        return "<div class='whatever'>{$return}</div>";
    } else {
        return $return;
    }
}

注:フィルタは、データが埋め込みプロバイダから収集されたときに実行されます。ですから、既に投稿を埋め込んでいて、埋め込んだデータがキャッシュされているのであれば、それは変更されません。

4
Otto

個人的には、私はoembed_dataparseフィルタを使うのがかなり面倒だと思いました。時にはうまくいったし、時にはうまくいかなかった。カスタムTinyMCEインスタンスと組み合わせて使用​​すると、追加のラッパーが出力時にフィルターを介して追加されるのではなく、コンテンツにハードベイクされたように見えます。

私はembed_oembed_htmlフィルタがはるかに信頼性が高く、毎回動作することを発見しました。

function vnmFunctionality_embedWrapper($html, $url, $attr, $post_id) {
    return '<div class="embedwrapper">' . $html . '</div>';
}

add_filter('embed_oembed_html', 'vnmFunctionality_embedWrapper', 10, 4);

これが all oEmbedsをラップすることに注意してください。特にYouTubeをターゲットにしたい場合は、

function vnmFunctionality_embedWrapper($html, $url, $attr, $post_id) {

    if (strpos($html, 'youtube') !== false) {
        return '<div class="youtubewrapper">' . $html . '</div>';
    }

    return $html;
}
3
indextwo