J'ai une variable comme celle-ci:
$post_content = get_the_content();
Ici, je souhaite supprimer un shortcode spécifique de la variable $ post_content, par exemple, je souhaite supprimer uniquement ce [video height="300" width="300" mp4="localhost.com/video.mp4"]
. Tous les autres shortcodes et le formatage du contenu doivent rester intacts.
Comment cela pourrait-il être fait?
METTRE À JOUR:
Je suis capable de supprimer un shortcode spécifique en utilisant un code comme celui-ci ...
<?php
echo do_shortcode(
str_replace(
'[video height="300" width="300" mp4="localhost.com/video.mp4"]',
'',
get_the_content()
)
);
?>
Mais il supprime également tous les tags html/formatage de get_the_content()
. Comment l'éviter?
Si vous voulez exactement ce shortcode:
[video height="300" width="300" mp4="localhost.com/video.mp4"]
pour ne rien afficher, vous pouvez utiliser le filtre wp_video_shortcode_override
ou le filtre wp_video_shortcode
pour y parvenir.
Voici deux exemples:
/**
* Let the [video] shortcode output "almost" nothing (just a single space) for specific attributes
*/
add_filter( 'wp_video_shortcode_override', function ( $output, $attr, $content, $instance )
{
// Match specific attributes and values
if(
isset( $atts['height'] )
&& 300 == $atts['height']
&& isset( $atts['width'] )
&& 400 == $atts['width']
&& isset( $atts['mp4'] )
&& 'localhost.com/video.mp4' == $atts['mp4']
)
$output = ' '; // Must not be empty to override the output
return $output;
}, 10, 4 );
/**
* Let the [video] shortcode output nothing for specific attributes
*/
add_filter( 'wp_video_shortcode', function( $output, $atts, $video, $post_id, $library )
{
// Match specific attributes and values
if(
isset( $atts['height'] )
&& 300 == $atts['height']
&& isset( $atts['width'] )
&& 400 == $atts['width']
&& isset( $atts['mp4'] )
&& 'localhost.com/video.mp4' == $atts['mp4']
)
$output = '';
return $output;
}, 10, 5 );
Je recommanderais le premier exemple, car nous l'interceptons très tôt et n'avons pas besoin d'exécuter tout le code dans le rappel de code court.
Vous pouvez utiliser la fonction phppreg_replacecore pour rechercher votre code court dans le contenu et le supprimer afin que votre code puisse être:
$post_content_without_shortcodes = preg_replace ( '/\[video(.*?)\]/s' , '' , get_the_content() );
Ne serait-ce pas
$post_content_without_shortcodes = strip_shortcodes(get_the_content());
ou il y a aussi
$post_content_without_shortcodes = remove_all_shortcodes(get_the_content());