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