I have a variable like this:

$post_content = get_the_content();

Here I want to remove some specific shortcode from the $post_content variable e.g I want to remove only this

all other shortcodes and content formatting should be leaved intact.

How could this be done?

UPDATE:

I’m able to remove some specific shortcode by using code something like this …

<?php 
    echo do_shortcode( 
        str_replace(
            '', 
            '', 
            get_the_content()
        ) 
    ); 
?>

But it is also removing all html tags/formatting of get_the_content(). How to avoid it?

3 s
3

If you want exactly this shortcode:


to output nothing, then you can use the wp_video_shortcode_override filter or the wp_video_shortcode filter to achieve that.

Here are two such examples:

Example #1

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

Example #2

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

Note

I would recommend the first example, because there we are intercepting it early on and don’t need to run all the code within the shortcode callback.

Leave a Reply

Your email address will not be published. Required fields are marked *