Tag a release, and it handles the rest.

Sometimes you want to keep a shortcode even if it’s not registered. Maybe you’re planning to reinstall a plugin, or maybe it’s intentional placeholder text.
What’s New in Remove Empty Shortcodes 1.0.0
I finally set up the 10up WordPress.org deploy action. Now when I publish a GitHub release, it automatically deploys to WordPress.org. No more manual SVN commits.
Admin Scanner
If you’re running an older version, update through the WordPress admin. If you’re new to the plugin, install it from the repository and activate. It’s a large update but it still “just works.” That is, there’s still no configuration needed. The automatic cleanup works immediately. Use the scanner when you want to see what’s happening.

As with most plugins, you can grab it from WordPress.org.
- Which shortcodes are orphaned
- How many posts are affected
- The surrounding context so you can see exactly where each one lives
Back in March 2025, I wrote about reviving Remove Empty Shortcodes after letting it collect dust for a few years. At the time, I’d rewritten it, added support for multi-line shortcodes, and pushed it back to the WordPress plugin repository.
Ignore List
There are two views: By Shortcode (grouped by shortcode name) and By Post (grouped by affected content). You can expand any row to see the full context and jump directly to the post editor.

It shows you:
Fixed False Positives
And if you’re not familiar, Brain Monkey lets you mock WordPress functions without spinning up a full WordPress installation. Tests run in milliseconds instead of seconds. If you’re writing WordPress plugins and haven’t tried it, take a look.

That was version 0.6.0. This is 1.0.0 and it’s a much more significant release.
Under the Hood
Unit Tests
The scanner includes an Ignore action for each shortcode. Ignored shortcodes won’t be flagged in future scans, and the automatic removal feature will leave them alone.
The setup is straightforward:
Automated Deployment
The fix was straightforward: use WordPress’s native get_shortcode_regex() instead of a custom pattern. Now the plugin only touches actual registered shortcodes, leaving everything else alone.
Under Tools > Empty Shortcodes, you’ll find a scanner that searches your entire site for unregistered shortcodes.
- Add your SVN credentials as GitHub secrets
- Create a
.distignorefile listing what to exclude - Put your banner, icon, and screenshots in a
.wordpress-orgdirectory
I added a proper test suite using PHPUnit and Brain Monkey. There are 46 tests covering the core functions, the scanner, and the cache manager.
Get It
This one was embarrassing. The previous version would incorrectly remove text like [at] and [dot]—common patterns in obfuscated email addresses. If you had user[at]domain[dot]com in a post, the plugin would strip it down to userdomaincom.
The plugin has always worked automatically in the background, quietly removing orphaned shortcodes when content is displayed. That’s still true. But now there’s visibility into what it’s actually finding.