web-dev-qa-db-ja.com

oEmbedフィルターをカスタム投稿タイプに適用する

私のfunctions.phpファイルには、埋め込まれたYouTube URLを受け取り、URLの最後に&rel=0を追加し、それを<div>でラップする関数があります。これは、任意のページまたは投稿に貼り付けたYouTube URLに対して完全に機能します。

function embed_youtube_parameters( $code ) {
    if( strpos( $code, 'youtu.be' ) !== false || strpos( $code, 'youtube.com' ) !== false || strpos( $code, 'youtube-nocookie.com' ) !== false ) {
        $return = preg_replace( '@embed/([^"&]*)@', 'embed/$1&rel=0', $code );
    }
    return '<div class="video-container">' . $return . '</div>';
}
add_filter( 'embed_oembed_html', 'embed_youtube_parameters' );

また、私が使用するプラグインを介して追加されたカスタム投稿タイプがあります。これには、生成する単一のカスタム投稿タイプページの出力をカスタマイズするために使用できるフィルターがあります。そのため、私はfunctions.phpファイルにもそのフィルターを持っています。

かなり長いフィルターですが、一部は次のようになります。

<?php if ( get_cpt_meta( 'cpt_video_link' ) ) : ?>
<div class="cpt-video">
    <?php echo wp_oembed_get( get_cpt_meta( 'cpt_video_link' ) ); ?>
</div>
<?php endif; ?>

カスタム投稿タイプは一連のカスタムフィールドを使用します。そのうちの1つはYouTube URL(cpt_video_link)用です。したがって、上記で示したフィルタの一部は、wp_oembed_getを使用してYouTube URLをエコーする必要があります。これは、私が理解している限り、YouTubeのURLを通常のページまたは投稿に貼り付けるのと同じように機能するはずです。 oEmbed。

私の仮定は-それはoEmbedを使用しているため-したがって、embed_youtube_parameters関数(上記)でも機能する必要があります。つまり、&rel=0がURLの末尾に追加され、<div class="video-container">でラップされる必要があります。

しかし、これはそうではなく、私はその理由を理解することができません。私の目標は、embed_youtube_parameters関数をCPTフィルターに適用することです。なぜこれが起こらないのかについて誰かが私にいくつかの指針を与えることができますか?

1
GermanKiwi

_wp_oembed_get_ (および WP_oEmbed::get_html() )のコードリファレンスを調べた後、私は思いません _embed_oembed_html_ その関数が呼び出されると、fitlerが起動されます。しかし、私は何かを逃したかもしれません。

_wp_oembed_get_の代わりに WP_Embed::shortcode( array $attr, string $url = '' ) を使用してみてください。これは、ネイティブの投稿タイプで何が起こるかを模倣し、フィルターが起動するためだと思います。

このようなもの。 更新23.12.19

_<?php if ( get_cpt_meta( 'cpt_video_link' ) ) : ?>
  <div class="cpt-video">
    <?php
      $embed = new WP_Embed();
      echo $embed->shortcode(array(), get_cpt_meta( 'cpt_video_link' ));
    ?>
  </div>
<?php endif; ?>
_
1
Antti Koskinen