Delete Duplicate Posts


This plugin searches and removes duplicate posts and their meta data. You can change in the settings how many at a time and if the plugin should run automatically.

You can delete posts, pages and other Custom Post Types enabled on your website.

The plugin deletes not only the post, but post meta and other references to the post, cleaning up space in your WordPress website.

Read more on the plugin page on


  • Duplicate posts were found
  • Details in the log


  1. Upload the delete-duplicate-posts folder to the /wp-content/plugins/ directory
  2. Activate the Delete Duplicate Posts plugin through the \’Plugins\’ menu in WordPress
  3. Use the plugin by going to Tools -> Delete Duplicate Posts


Should I take a backup before using this tool?

Yes! You should always take a backup before deleting posts or pages on your website.

What happens if it deletes something I do not want to delete?

You should restore the backup you took of your website before you ran this tool.


November 19, 2020
I have used this plugin for delete duplicate products from WooCommerce from an import that went a little wrong. It was a timer saver.
October 17, 2020
Great app for a news Site platform with multiple staff, editors, authors and reports all working from Home and different area across the world. Something the unexpected happens as the same topic, the article is published 2 and this magic up does all the job. This is how much work it has done for my site: 3,535 duplicates deleted! So, I big thanks to the brains behind this great app/plugin.
August 3, 2020
Let me start by saying that this is a 5* plugin. It saved me a ton of time. That said, however, I had a ton of duplicate posts after running an import. And while the plugin did exactly as advertised it suffers from some small issues: There is no clear navigation or workflow There is no progress indicator, timer or spinner letting the user know what is going on Not sure what the limits are for the plugin. Like I said I had a ton of dup's (over 1000) and I had to run the plugin 5 times. It wasn't until the 3rd run that I saw that it found 382 dup's, 4th run 417 dups', final run 19. Just a little confusing. Deletions are permanent. I'd gladly pay for a trash bin or recovery type option These are just my observations. Absolutely fantastic plugin though.
June 9, 2020
It only compares the post title and if two posts have the same title it's considered a duplicate. The content isn't compared so it's not really that useful in some cases.
Read all 66 reviews

Contributors & Developers

“Delete Duplicate Posts” is open source software. The following people have contributed to this plugin.


“Delete Duplicate Posts” has been translated into 1 locale. Thank you to the translators for their contributions.

Translate “Delete Duplicate Posts” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.



  • 2020/11/09
  • Introducing Multisite compatibility
  • Updated 3rd party Freemius library to v. 2.4.1
  • Tested with WordPress 5.5.3


  • 2020/08/06
  • Code cleanup
  • Tested with WordPress 5.5
  • Updated SDK Freemius to


  • 2020/07/06
  • Fix – automatically deactivate free version if pro version is activated – Thank you Jordi.
  • Fix – Missing link to privacy data.
  • Fix – Not correctly identifying original post when comparing with post meta values – Thank you Reinhard.
  • New – more details how long a process took is now stored in the log.


  • 2020/06/08
  • Code cleanup and security hardening.

  • 2020/05/08
  • Removes some debug code, whoopsie.


  • 2020/05/07
  • Plugin now looks for duplicates in posts and pages per default, no need to set it after activating plugin.
  • Fix: “Error deleting post” showing even if the post was deleted. Thank you Murray 🙂
  • The log is now updated when list of duplicates is updated.


  • 2020/05/04
  • Fixing activation bugs – Thank you @locutus45 and @paul1427
  • Fixing code not working with PHP 5.6
  • Fixed missing translation strings – Thank you Canny for translating to Korean! 😀
  • Added automatic reload when manually deleting duplicates.


  • 2020/05/03
  • Fixing bug in install routines


  • 2020/05/02
  • Tested up to WP 5.4.1
  • Pro: Choose different post stati to look for; publish, draft, scheduled, pending, private and any other custom post status.
  • Code improvement, works faster.


  • 2020/04/25
  • Rewrote plugin to better handle big sites with lots of duplicate content.
  • Fixed automatic deletion (cron job) not working properly on some sites.
  • Security fixes and hardening throughout the plugin.
  • Log is now AJAX based to help load on big sites.
  • Duplicate list now loads via AJAX to help with load on big sites.
  • Added inline help – Helpscout
  • Updated Freemius 3rd party SDK to 2.3.2
  • Added option to upgrade to Pro version.
  • Updated language files.
  • Removed option to run every minute – Sorry, but not a good idea for many websites and hosting companies do not like it either.


  • Direct link to support forum
  • Fixed missing file in 3rd party SDK.


  • Fix – the limitation on how many posts were deleted per batch did not always work, it does not.
  • PHP notices removed from the log thank you @brianbrown

  • Security fix

  • Added two more intervals, every minute and every 5 minutes.
  • Updated 3rd party script Freemius

  • Fixed bugs introduced with updating to WordPress 4.9.1 – Thank you to all who reported the problem.

  • Fixed esc_sql() for WordPress 4.8.3

  • Fix missing 3rd party scripts.


  • Optimized delete routines – Thank you Claire and Vaclav 🙂 Up to 20-30% faster deleting.
  • Added timing functions so you can see how long it takes to delete in the log.
  • Permanently delete posts and pages – no longer goes to trash.
  • Fix – The log is now shown with latest events at top.
  • Updated 3rd party scripts – Freemius update to


  • Updated Freemius SDK.
  • Fixing problem with keeping latest or oldests posts.


  • Fixed PHP Notification – Logs were not automatically cleaned.


  • Fixed missing icon
  • Listed freemius as contributer


  • Fixing PHP Warning if no post types selected


  • Fixed a mistake in Freemius configuration :-/


  • Added language .pot file
  • Improved Danish translation
  • Added Fremius for more usage details – Opt-in


  • Fix PHP notices
  • Clean up code comments
  • Logo now in Retina


  • Fixes which kinds of posts that can be cleaned- Thanks Mark –
  • Option up from max 250 posts to 500 – Thanks Mark.
  • Improved visual style in the table listing.


  • Fixes problem with cron job not working properly.
  • New: Choose interval for automated cron job to run.
  • Adds 3 cron interval 10 min, 15 min and 30 minutes to WordPress.
  • Minor PHP Notice fix.
  • Code cleaning up


  • Added log notes for cron jobs and manual cleaning.
  • Added missing screenshots, banners and icons.


  • Big rewrite, long overdue, many bugs fixed
  • NEW: Choose between post types.
  • Optional cron job now runs every hour, not every half hour.
  • The log was broken, it has now been fixed.
  • Removed unused and old code.
  • Improved plugin layout.


  • Fix for deleting any dupes but posts – ie. not menu items :-/
  • Fix for PHP warnings.
  • Fix for old user capabilities code.


  • Code refactoring and updates – Basically rewrote most of the plugin.
  • Removed link in footer.
  • Removed dashboard widget.
  • Internationalization – Now plugin can be translated
  • Danish language file added.


  • Bugfixes


  • Bugfix: Problem with the link-donation logic. Hereby fixed.


  • Bugfix: Could not access the settings page from the Plugins page.
  • Ads are no longer optional. Sorry about that 🙂
  • Changes to the amount of duplicates you can delete using CRON.


  • Bugfix : A minor speed improvement.


  • Bugfix : Minor logic error fixed.


  • Bugfix : Now actually deletes duplicate posts when clicking the button manually.. Doh…


  • Design interface updated
  • New automatic CRON feature as per many user requests
  • Optional: E-mail notifications


  • Fixes problem with dashboard widget. Thanks to Derek for pinpointing the error.


  • Ensures all post meta for the deleted blogposts are also removed…


  • Uses internal delete function, which also cleans up leftover meta-data. Takes a lot more time to complete however and might time out on some hosts.


  • First release