web-dev-qa-db-fra.com

Application d'un filtre oEmbed à un type de publication personnalisé

J'ai une fonction dans mon fichier functions.php qui prend n'importe quelle URL YouTube intégrée, ajoute &rel=0 à la fin de l'URL et l'enveloppe dans un <div>. Cela fonctionne parfaitement pour les URL YouTube que je colle dans n'importe quelle page ou publication:

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

J'ai également un type de publication personnalisé (ajouté via un plugin que j'utilise), qui a un filtre que je peux utiliser pour personnaliser la sortie des pages de type de publication personnalisé qu'il génère. J'ai donc ce filtre également dans mon fichier functions.php.

C'est un filtre assez long, mais une partie ressemble à ceci:

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

Le type de publication personnalisé utilise un ensemble de champs personnalisés, dont l'un est destiné à une URL YouTube (cpt_video_link). Ainsi, la partie du filtre que j'ai montrée ci-dessus devrait faire écho à l'URL YouTube en utilisant wp_oembed_get, qui - si je comprends bien - devrait fonctionner de la même manière que le collage d'une URL YouTube sur une page ou un message normal - dans le sens où il utilise oEmbed.

Mon hypothèse est que - parce qu'il utilise oEmbed - il devrait donc également fonctionner avec mon embed_youtube_parameters fonction (ci-dessus), ce qui signifie qu'elle devrait avoir &rel=0 ajouté à la fin de l'URL et enveloppé dans le <div class="video-container">.

Mais ce n'est pas le cas et je ne comprends pas pourquoi. Mon objectif est pour le embed_youtube_parameters fonction à appliquer à mon filtre CPT. Quelqu'un peut-il m'indiquer pourquoi cela ne se produit pas?

1
GermanKiwi

Après avoir regardé la référence du code pour wp_oembed_get (et WP_oEmbed::get_html() ) je ne pense pas embed_oembed_html fitler est renvoyé lorsque cette fonction est appelée. Mais j'ai peut-être raté quelque chose.

Vous pouvez essayer d'utiliser WP_Embed::shortcode( array $attr, string $url = '' ) au lieu de wp_oembed_get Car cela imiterait ce qui se passe avec les types de messages natifs et le filtre serait déclenché, je pense.

Quelque chose comme ça. Mis à jour le 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