web-dev-qa-db-fra.com

Afficher uniquement les vidéos et les images dans the_content () dans la boucle

Le problème que j'essaie de résoudre se situe au sein de la boucle WordPress. Je souhaite uniquement que les vidéos incorporées ou les images s'affichent, pas n'importe quel texte.

Actuellement, lors de la création d'un nouveau message (format standard) dans l'éditeur WordPress, la plupart de mes messages ressemblent à ceci:

http://youtube.com/somevideo

Some supporting text below the video

Et bien sûr, WordPress créera ensuite automatiquement une vidéo intégrée en utilisant le lien YouTube ou Vimeo que je mets là.

Lors de l'affichage de la liste des publications, je ne souhaite pas que Some supporting text below the video affiche uniquement la vidéo.

Actuellement, ma page content.php est assez basique et affiche simplement le contenu à l'aide de <?php the_content(); ?>

Existe-t-il un moyen de supprimer ce texte sur chaque message?

1
jamez14

Nous pouvons le faire avec l’aide de la fonction get_media_embedded_in_content() :

/**
 * Display only the first media item in the content
 *
 * @link http://wordpress.stackexchange.com/a/199398/26350
 */
! is_admin() && add_filter( 'the_content', function( $content )
{
    // Get the avialable media items from the content
    add_filter( 'media_embedded_in_content_allowed_types', 'wpse_media_types' );
    $media = get_media_embedded_in_content( $content );
    remove_filter( 'media_embedded_in_content_allowed_types', 'wpse_media_types' );

    // Only use the first media item if available 
    if( $media ) 
        $content = array_shift( $media );   

    return $content;
} , 99 );

où nous pouvons définir notre media types personnalisé avec:

function wpse_media_types( $types )
{
   return [ 'audio', 'video', 'object', 'embed', 'iframe', 'img' ];
}

Voici une autre approche où nous extrayons toutes les URL du contenu et vérifions s'il s'agit d'un oEmbed disponible:

/**
 * Display only the first oEmbed in the content
 *
 * @link http://wordpress.stackexchange.com/a/199398/26350
 */
! is_admin() && add_filter( 'the_content', function( $content )
{
    require_once( ABSPATH . WPINC . '/class-oembed.php' );
    $wp_oembed = _wp_oembed_get_object();
    $urls = wp_extract_urls( $content );
    foreach( (array) $urls as $url )
    {
        if( $wp_oembed->get_provider( $url ) )
            $content = $url;
    }
    return $content;
}, 1 );

Notez que vous voudrez peut-être ajouter une restriction supplémentaire quant à l'endroit où vous souhaitez utiliser ceci.

1
birgire