web-dev-qa-db-fra.com

Supprimer un shortcode spécifique de get_the_content ()

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?

6
Faisal Khurshid

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:

Exemple 1

/**
 * 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 );

Exemple n ° 2

/**
 * 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 );

Remarque

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.

4
birgire

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() );
0
Softmixt

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());
0
RCNeil