Remove first instance of a shortcode from a post or page in WordPress

I came up with this snippet that allows you to filter the_content
and remove the first instance of the [gallery]
shortcode.
Why is this in any way useful, you’re thinking. I used it in Gallerize Pro to replace the featured image with a slider based on the first gallery in a post.
function gallerize_pro_filter_the_content( $content ) { $pattern = get_shortcode_regex(); // https://php.net/manual/en/function.preg-match-all.php if ( preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches ) && array_key_exists( 2, $matches ) && in_array( 'gallery', $matches[2] ) ) { $index = 0; $count = 0; // Remove the first gallery shortcode from the content foreach( $matches[2] as $match ) { if( $match == 'gallery' ) { // Found our first gallery $index = $count; break; // We've done enough } $count++; }; // Remove first gallery from content $content = str_replace( $matches[0][$index], '', $content ); } return $content; } add_filter( 'the_content', 'gallerize_pro_filter_the_content' );
This uses get_shortcode_regex
to combine all shortcode tags into a regular expression. Then search for matches using preg_match_all
and assigns them to the $matches
variable. We check that ‘gallery’ is one of the terms allocated to $matches
and if it is we iterate through each element so that we can identify the first instance. Finally, we remove it from the_content
using str_replace
.