{"id":298454,"date":"2026-04-16T13:26:00","date_gmt":"2026-04-16T13:26:00","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ultimate-revision-cleaner\/"},"modified":"2026-04-20T12:27:34","modified_gmt":"2026-04-20T12:27:34","slug":"biddut-revision-cleaner","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/biddut-revision-cleaner\/","author":21050307,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"6.9.4","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"Biddut Revision Cleaner","header_author":"Shahriar Ahmed Biddut","header_description":"Smart, Safe & Modern Revision Management for WordPress. Control, clean, and optimize post revisions safely without risking data loss.","assets_banners_color":"9ab9e4","last_updated":"2026-04-20 12:27:34","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/buymeacoffee.com\/shahriarabiddut","header_plugin_uri":"https:\/\/github.com\/shahriarabiddut\/biddut-revision-cleaner\/","header_author_uri":"https:\/\/github.com\/shahriarabiddut","rating":0,"author_block_rating":0,"active_installs":0,"downloads":136,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"shahriarabiddut","date":"2026-04-16 13:26:17"},"1.1.0":{"tag":"1.1.0","author":"shahriarabiddut","date":"2026-04-20 12:27:34"}},"upgrade_notice":{"1.1.0":"<p>Adds per-post-type cleanup frequencies, a preferred run hour for scheduled cleanup, and automated email notifications after each automated run. No database schema changes. Existing settings are fully preserved. Re-save your settings after upgrading to apply the new schedule options.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3508106,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3508106,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3508106,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3508106,"resolution":"1","location":"assets","locale":"","width":1543,"height":832},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3508106,"resolution":"2","location":"assets","locale":"","width":1121,"height":823},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3508106,"resolution":"3","location":"assets","locale":"","width":1527,"height":814},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3508106,"resolution":"4","location":"assets","locale":"","width":1544,"height":716},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3508106,"resolution":"5","location":"assets","locale":"","width":1539,"height":830},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3508106,"resolution":"6","location":"assets","locale":"","width":1692,"height":439}},"screenshots":{"1":"Dashboard \u2014 Analyze and Cleanup with live stats grid and breakdown table","2":"Analysis results with revision preview list","3":"Settings \u2014 Global limit, per-post-type limits, scheduled cleanup with hour picker and per-type frequencies, email notifications, and smart trigger configuration","4":"Cleanup Logs page with aggregate totals, paginated history, and trigger badges","5":"Post editor meta box showing revision count and per-post cleanup button","6":"Revision count column in the Posts list table"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[260373,17806,3937,260372,45880],"plugin_category":[],"plugin_contributors":[256077],"plugin_business_model":[],"class_list":["post-298454","plugin","type-plugin","status-publish","hentry","plugin_tags-clean-revisions","plugin_tags-database-cleanup","plugin_tags-revision","plugin_tags-revision-cleaner","plugin_tags-wordpress-optimization","plugin_contributors-shahriarabiddut","plugin_committers-shahriarabiddut"],"banners":{"banner":"https:\/\/ps.w.org\/biddut-revision-cleaner\/assets\/banner-772x250.png?rev=3508106","banner_2x":"https:\/\/ps.w.org\/biddut-revision-cleaner\/assets\/banner-1544x500.png?rev=3508106","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/biddut-revision-cleaner\/assets\/icon-256x256.png?rev=3508106","icon_2x":"https:\/\/ps.w.org\/biddut-revision-cleaner\/assets\/icon-256x256.png?rev=3508106","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/biddut-revision-cleaner\/assets\/screenshot-1.png?rev=3508106","caption":"Dashboard \u2014 Analyze and Cleanup with live stats grid and breakdown table"},{"src":"https:\/\/ps.w.org\/biddut-revision-cleaner\/assets\/screenshot-2.png?rev=3508106","caption":"Analysis results with revision preview list"},{"src":"https:\/\/ps.w.org\/biddut-revision-cleaner\/assets\/screenshot-3.png?rev=3508106","caption":"Settings \u2014 Global limit, per-post-type limits, scheduled cleanup with hour picker and per-type frequencies, email notifications, and smart trigger configuration"},{"src":"https:\/\/ps.w.org\/biddut-revision-cleaner\/assets\/screenshot-4.png?rev=3508106","caption":"Cleanup Logs page with aggregate totals, paginated history, and trigger badges"},{"src":"https:\/\/ps.w.org\/biddut-revision-cleaner\/assets\/screenshot-5.png?rev=3508106","caption":"Post editor meta box showing revision count and per-post cleanup button"},{"src":"https:\/\/ps.w.org\/biddut-revision-cleaner\/assets\/screenshot-6.png?rev=3508106","caption":"Revision count column in the Posts list table"}],"raw_content":"<!--section=description-->\n<p>Biddut Revision Cleaner helps you take full control of WordPress post revisions. Set smart retention rules per post type, analyze your database before touching anything, preview exactly what will be deleted, and clean with a single confirmed click \u2014 safely and without guesswork.<\/p>\n\n<p>The plugin covers <strong>all post types that support revisions<\/strong> \u2014 not just public ones. This includes Reusable Blocks (wp_block), Full Site Editing Templates (wp_template), Template Parts (wp_template_part), Navigation menus (wp_navigation), and any custom post type that registers revision support.<\/p>\n\n<h4>Smart Revision Retention Rules<\/h4>\n\n<ul>\n<li><strong>Global Retention Limit<\/strong> \u2014 Keep only the last X revisions per post site-wide. Set to -1 for unlimited, 0 to keep none.<\/li>\n<li><strong>Per-Post-Type Limits<\/strong> \u2014 Override the global limit for Posts, Pages, Reusable Blocks, FSE Templates, and any Custom Post Type individually<\/li>\n<li><strong>Age-Based Deletion<\/strong> \u2014 Optionally delete revisions older than a configurable number of days during cleanup<\/li>\n<li><strong>Auto-Draft Cleanup<\/strong> \u2014 Option to remove orphaned auto-drafts alongside revision cleanup<\/li>\n<\/ul>\n\n<h4>One-Click Safe Cleanup<\/h4>\n\n<ul>\n<li><strong>Analyze First<\/strong> \u2014 Scan your full database before making any changes<\/li>\n<li><strong>Live Stats<\/strong> \u2014 See total revision count, how many will be deleted, estimated space freed, and number of posts affected<\/li>\n<li><strong>Breakdown Table<\/strong> \u2014 Per-post-type summary showing total revisions, revisions to delete, and active retention limit per type<\/li>\n<li><strong>Preview List<\/strong> \u2014 See individual revisions (up to 50) queued for deletion \u2014 post title, date, and author shown<\/li>\n<li><strong>Confirmation Prompt<\/strong> \u2014 Explicit confirmation step before any deletion takes place<\/li>\n<\/ul>\n\n<h4>Scheduled Cleanup (v1.1.0)<\/h4>\n\n<ul>\n<li><strong>Enable Auto-Cleanup<\/strong> \u2014 Run cleanup automatically on a schedule, no manual action required<\/li>\n<li><strong>Daily \/ Weekly \/ Monthly<\/strong> \u2014 Choose the default frequency that suits your site<\/li>\n<li><strong>Preferred Run Hour<\/strong> \u2014 Set the hour of the day (0\u201323, site local time) when the scheduled cleanup fires. Choose an off-peak window to avoid busy traffic periods.<\/li>\n<li><strong>Per-Post-Type Frequency<\/strong> \u2014 Each post type can have its own cleanup schedule independent of the global default. Options: Use Default, Daily, Weekly, Monthly, or Disabled (excludes the type from scheduled cleanup entirely).<\/li>\n<li><strong>WP-Cron Integration<\/strong> \u2014 Runs silently via WordPress's built-in task scheduler<\/li>\n<li><strong>Next Run Indicator<\/strong> \u2014 Settings page shows when the next scheduled cleanup will fire<\/li>\n<\/ul>\n\n<h4>Post-Cleanup Email Notifications (v1.1.0)<\/h4>\n\n<ul>\n<li><strong>Enable Email Summary<\/strong> \u2014 Automatically receive a summary email after every scheduled or smart-triggered cleanup run<\/li>\n<li><strong>Configurable Recipients<\/strong> \u2014 Enter one or more email addresses (comma-separated). Invalid addresses are silently skipped.<\/li>\n<li><strong>Email Content<\/strong> \u2014 Summary includes: trigger type, revisions removed, auto-drafts removed, space freed, duration, and the date\/time of the next scheduled run<\/li>\n<li><strong>Manual cleanup runs do not trigger an email<\/strong> \u2014 only automated (scheduled or smart) runs send notifications<\/li>\n<\/ul>\n\n<h4>Smart Trigger Mode (v1.1.0)<\/h4>\n\n<ul>\n<li><strong>Enable Smart Triggers<\/strong> \u2014 Master toggle for all threshold-based auto-cleanup<\/li>\n<li><strong>Global Revision Count Threshold<\/strong> \u2014 Trigger a full site-wide cleanup when total revisions exceed a configured number<\/li>\n<li><strong>Per-Post-Type Revision Thresholds<\/strong> \u2014 Each post type can have its own threshold. Only that type is cleaned when its individual count is exceeded \u2014 without touching the rest of the site<\/li>\n<li><strong>Database Size Threshold<\/strong> \u2014 Trigger a full site-wide cleanup when the estimated revision table footprint exceeds a configured MB value<\/li>\n<li><strong>Asynchronous Execution<\/strong> \u2014 The threshold check on each page load is lightweight (at most two queries). When triggered, the actual cleanup is dispatched to a background WP-Cron job so the current page request is never blocked<\/li>\n<li><strong>Concurrency guard<\/strong> \u2014 A short-lived transient prevents multiple concurrent jobs from being queued simultaneously<\/li>\n<li><strong>Evaluation order<\/strong> \u2014 Global count \u2192 Per-type counts \u2192 DB size (each stage only evaluates if the previous did not trigger)<\/li>\n<li>All three thresholds can be enabled simultaneously or independently<\/li>\n<li>Every smart trigger run is logged in Cleanup Logs and triggers an email notification if enabled<\/li>\n<\/ul>\n\n<h4>Cleanup Logs<\/h4>\n\n<ul>\n<li><strong>Full Cleanup History<\/strong> \u2014 Every cleanup run (manual, scheduled, or smart-triggered) is logged<\/li>\n<li><strong>Log Details<\/strong> \u2014 Date and time, trigger type, number of revisions deleted, auto-drafts removed, estimated space freed, and duration<\/li>\n<li><strong>Aggregate Totals<\/strong> \u2014 Lifetime totals for runs, revisions cleaned, and space freed shown at the top of the logs page<\/li>\n<li><strong>Paginated Log Table<\/strong> \u2014 Proper WordPress-style pagination with Prev\/Next buttons, ellipsis for large page counts, and row count summary<\/li>\n<li><strong>Trigger Badges<\/strong> \u2014 Color-coded badges distinguish Manual, Scheduled, and Smart trigger runs<\/li>\n<li><strong>Clear All Logs<\/strong> \u2014 One-click log history reset with confirmation prompt<\/li>\n<\/ul>\n\n<h4>Post-Level Cleanup<\/h4>\n\n<ul>\n<li><strong>Per-Post Cleanup Button<\/strong> \u2014 Remove excess revisions for a single post directly from the post editor sidebar, without running a full site cleanup<\/li>\n<li><strong>Revision Count Meta Box<\/strong> \u2014 Displays the current stored revision count and active retention limit per post<\/li>\n<li><strong>Revision Count Column<\/strong> \u2014 See revision counts at a glance in the Posts, Pages, and Custom Post Type list tables<\/li>\n<\/ul>\n\n<h4>Automatic Revision Trimming<\/h4>\n\n<ul>\n<li>Every time a post is saved, the plugin automatically trims revisions that exceed the configured retention limit for that post type \u2014 no manual cleanup needed for new saves<\/li>\n<\/ul>\n\n<h4>Lightweight &amp; Secure<\/h4>\n\n<ul>\n<li>Covers all revision-supporting post types via post_type_supports() \u2014 not just public ones<\/li>\n<li>Built using WordPress native APIs only \u2014 no external libraries or dependencies<\/li>\n<li>Nonce verification on every AJAX request and every admin page GET interaction<\/li>\n<li>current_user_can() checks before every privileged action \u2014 manage_options for admin operations, edit_post for per-post cleanup<\/li>\n<li>Full input sanitization (sanitize_text_field, absint, sanitize_key, sanitize_textarea_field, wp_unslash) and output escaping throughout<\/li>\n<li>PHP 8.1+ with declare(strict_types=1)<\/li>\n<\/ul>\n\n<h3>License<\/h3>\n\n<p>Biddut Revision Cleaner is licensed under the GPL v2 or later.\nSee https:\/\/www.gnu.org\/licenses\/gpl-2.0.html for details.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>This plugin does not collect, store, or transmit any user data outside your own WordPress database. Cleanup log entries are stored locally in a custom database table ({prefix}_bdrc_cleanup_logs) and can be cleared at any time from the Cleanup Logs page. Email notifications are sent using the site's own wp_mail() function and do not involve any third-party services.<\/p>\n\n<h4>Support or Feature Requests<\/h4>\n\n<ul>\n<li><a href=\"https:\/\/github.com\/shahriarabiddut\/biddut-revision-cleaner\">GitHub Repository<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.org\/support\/plugin\/biddut-revision-cleaner\/\">WordPress Support Forum<\/a><\/li>\n<\/ul>\n\n<h4>Contributing<\/h4>\n\n<p>Contributions are welcome! Visit the GitHub repository to submit a pull request or open an issue.<\/p>\n\n<h4>Credits<\/h4>\n\n<ul>\n<li>Built with WordPress<\/li>\n<li>Follows WordPress coding standards and best practices<\/li>\n<li>WordPress Dashicons used<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong><\/li>\n<li>Click <strong>Install Now<\/strong> then <strong>Activate Plugin<\/strong><\/li>\n<li>Navigate to <strong>Revision Cleaner \u2192 Settings<\/strong> to configure your retention rules and optional schedule<\/li>\n<li>Go to <strong>Revision Cleaner<\/strong> (Dashboard) to run an analysis and cleanup<\/li>\n<li>Check <strong>Revision Cleaner \u2192 Cleanup Logs<\/strong> to review cleanup history<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20it%20safe%20to%20delete%20revisions%3F\"><h3>Is it safe to delete revisions?<\/h3><\/dt>\n<dd><p>Yes. WordPress revisions are historical snapshots of your content. Deleting old ones does not affect your published posts, pages, drafts, or any live content in any way. The plugin always shows you a full preview before any deletion occurs.<\/p><\/dd>\n<dt id=\"which%20post%20types%20does%20this%20plugin%20cover%3F\"><h3>Which post types does this plugin cover?<\/h3><\/dt>\n<dd><p>All post types that support revisions \u2014 not just public ones. This includes Posts, Pages, Custom Post Types with revision support, and built-in WordPress types like Reusable Blocks (wp_block), Full Site Editing Templates (wp_template), Template Parts (wp_template_part), and Navigation menus (wp_navigation).<\/p><\/dd>\n<dt id=\"will%20revisions%20be%20automatically%20managed%20going%20forward%3F\"><h3>Will revisions be automatically managed going forward?<\/h3><\/dt>\n<dd><p>Yes, in two ways. First, the plugin trims excess revisions automatically every time a post is saved, enforcing your configured limits in real time. Second, if you enable Scheduled Cleanup or Smart Trigger Mode, periodic full-site cleanups run automatically.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20the%20global%20limit%20and%20a%20per-post-type%20limit%3F\"><h3>What is the difference between the global limit and a per-post-type limit?<\/h3><\/dt>\n<dd><p>The global limit applies to all post types by default. Per-post-type limits override the global setting for specific types \u2014 for example, keep 10 revisions for Posts but only 3 for Pages, and use the global default for everything else. Leave a per-post-type field blank to fall back to the global limit.<\/p><\/dd>\n<dt id=\"what%20does%20%22delete%20older%20than%22%20do%3F\"><h3>What does \"Delete Older Than\" do?<\/h3><\/dt>\n<dd><p>During any cleanup run, revisions created more than the configured number of days ago will also be deleted, in addition to any that exceed the count-based limit. Set to 0 to disable age-based deletion entirely.<\/p><\/dd>\n<dt id=\"what%20are%20auto-drafts%3F\"><h3>What are auto-drafts?<\/h3><\/dt>\n<dd><p>Auto-drafts are temporary copies WordPress creates automatically while you write a post. They accumulate over time and are safe to remove. Enable the \"Remove Auto-Drafts\" option in Settings to include them in cleanup runs.<\/p><\/dd>\n<dt id=\"can%20i%20undo%20a%20cleanup%3F\"><h3>Can I undo a cleanup?<\/h3><\/dt>\n<dd><p>No. Deletion is permanent. Always use the Analyze step to review exactly what will be deleted before running a cleanup.<\/p><\/dd>\n<dt id=\"what%20is%20the%20preferred%20run%20hour%20setting%3F\"><h3>What is the Preferred Run Hour setting?<\/h3><\/dt>\n<dd><p>When a scheduled cleanup is enabled, the first event will be anchored to the next occurrence of your chosen hour (in the site's local timezone). After that, the cleanup repeats at the configured frequency. Choosing an off-peak hour (for example, 02:00 at night) helps avoid running the cleanup during busy traffic windows. Note that WP-Cron is page-load driven, so the actual fire time may be a few minutes later than the target hour if no page load occurs exactly then.<\/p><\/dd>\n<dt id=\"what%20do%20per-post-type%20frequencies%20do%3F\"><h3>What do Per-Post-Type Frequencies do?<\/h3><\/dt>\n<dd><p>Each post type can have an independent cleanup schedule. \"Use Default\" follows the global frequency. \"Daily\", \"Weekly\", or \"Monthly\" override it for that type only. \"Disabled\" excludes that type from scheduled cleanup entirely \u2014 it will only be cleaned manually or via Smart Trigger. When a per-type frequency is shorter than the global frequency, the cron fires at the shorter interval automatically.<\/p><\/dd>\n<dt id=\"will%20i%20receive%20emails%20for%20every%20cleanup%20run%3F\"><h3>Will I receive emails for every cleanup run?<\/h3><\/dt>\n<dd><p>No. Emails are sent only for Scheduled and Smart trigger runs, not for manual cleanup runs (since you are already watching the results in the browser). You can disable email notifications entirely from the Settings page.<\/p><\/dd>\n<dt id=\"what%20is%20smart%20trigger%20mode%3F\"><h3>What is Smart Trigger Mode?<\/h3><\/dt>\n<dd><p>Smart Trigger Mode watches two thresholds: total revision count and estimated revision table size. When either threshold is exceeded, a cleanup runs automatically in the background on a page load \u2014 without you needing to do anything. Every such run is logged in the Cleanup Logs page, and an email summary is sent if notifications are enabled.<\/p><\/dd>\n<dt id=\"what%20is%20scheduled%20cleanup%3F\"><h3>What is Scheduled Cleanup?<\/h3><\/dt>\n<dd><p>Scheduled Cleanup uses WordPress's built-in WP-Cron to run a full cleanup automatically at your chosen frequency (daily, weekly, or monthly). It applies the same retention rules as a manual cleanup. Every scheduled run is logged, and an email summary is sent if notifications are enabled.<\/p><\/dd>\n<dt id=\"what%20trigger%20types%20appear%20in%20the%20cleanup%20logs%3F\"><h3>What trigger types appear in the Cleanup Logs?<\/h3><\/dt>\n<dd><p>Three: Manual (you clicked Run Cleanup), Scheduled (WP-Cron fired), and Smart (a threshold was exceeded automatically).<\/p><\/dd>\n<dt id=\"does%20this%20affect%20site%20performance%3F\"><h3>Does this affect site performance?<\/h3><\/dt>\n<dd><p>No. The plugin has zero frontend footprint \u2014 no scripts or styles are loaded for visitors. Admin operations only run during manual cleanup actions, scheduled cron events, or the lightweight smart trigger check on non-admin page loads.<\/p><\/dd>\n<dt id=\"is%20the%20revision%20count%20column%20shown%20for%20custom%20post%20types%3F\"><h3>Is the Revision Count column shown for custom post types?<\/h3><\/dt>\n<dd><p>The revision count column is added to all post type list tables that support revisions, including custom post types.<\/p><\/dd>\n<dt id=\"where%20is%20the%20per-post%20cleanup%20button%3F\"><h3>Where is the per-post cleanup button?<\/h3><\/dt>\n<dd><p>In the post editor sidebar. Open any post or page in the editor, look for the \"Revisions\" meta box in the sidebar, and you will see the current revision count, the active retention limit, and a \"Clean Revisions\" button to remove excess revisions for that post only.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Automation Update \u2014 Scheduled Cleanup enhancements and Email Notifications<\/li>\n<li>New: Smart Trigger Mode \u2014 per-post-type revision count thresholds; each type can have its own threshold and is cleaned independently without triggering a full site-wide cleanup<\/li>\n<li>New: Smart Trigger Mode \u2014 asynchronous execution via wp_schedule_single_event; the threshold check is at most two queries and the actual cleanup is deferred to a background WP-Cron job so the triggering page load is never blocked<\/li>\n<li>New: Smart Trigger concurrency guard via a short-lived transient prevents multiple jobs from being queued at the same time<\/li>\n<li>New: Smart trigger evaluation order: Global count threshold \u2192 Per-type count thresholds \u2192 DB size threshold (each stage only evaluated if the previous did not fire)<\/li>\n<li>New: Preferred Run Hour \u2014 schedule the cleanup to fire at a specific hour of the day (site local time) to avoid peak traffic windows<\/li>\n<li>New: Per-Post-Type Frequency \u2014 each post type can now have an independent cleanup schedule (Use Default \/ Daily \/ Weekly \/ Monthly \/ Disabled), fully independent of the global setting<\/li>\n<li>New: When any per-type schedule is shorter than the global frequency, the WP-Cron event automatically fires at the shorter interval so all schedules are honoured<\/li>\n<li>New: Per-type last-cleaned timestamps tracked separately so each type is cleaned at its own configured interval<\/li>\n<li>New: Post-Cleanup Email Notifications \u2014 receive an automatic email summary after every scheduled or smart-triggered cleanup run<\/li>\n<li>New: Email summary includes trigger type, revisions removed, auto-drafts removed, space freed, duration, and next scheduled run date\/time<\/li>\n<li>New: Configurable recipient list (comma-separated email addresses); invalid addresses are silently skipped<\/li>\n<li>New: Email notifications apply to Scheduled and Smart trigger runs; manual cleanup runs do not trigger emails<\/li>\n<li>New: Invalid email warning shown inline in the recipients field when a saved address fails validation<\/li>\n<li>New: Sample email preview shown directly in the settings form so you can see the email format before enabling it<\/li>\n<li>Improvement: Schedule hour select shows both 24-hour and 12-hour (AM\/PM) labels for clarity<\/li>\n<li>Improvement: First cron event is anchored to the next occurrence of the chosen hour in the site's local timezone<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Smart revision retention rules \u2014 global and per-post-type limits<\/li>\n<li>Covers all revision-supporting post types including wp_block, wp_template, wp_template_part, wp_navigation, and any CPT with revision support<\/li>\n<li>Age-based deletion \u2014 delete revisions older than X days during cleanup<\/li>\n<li>Auto-draft cleanup option<\/li>\n<li>One-click safe cleanup with analyze-first workflow<\/li>\n<li>Live stats grid: total revisions, deletable count, estimated space freed, posts affected<\/li>\n<li>Per-post-type breakdown table with active retention limit shown per type<\/li>\n<li>Preview list of revisions queued for deletion (up to 50 shown) with post title, date, and author<\/li>\n<li>Confirmation prompt before any deletion takes place<\/li>\n<li>Scheduled cleanup \u2014 daily, weekly, or monthly via WP-Cron<\/li>\n<li>Next scheduled run indicator on Settings page<\/li>\n<li>Smart Trigger Mode \u2014 auto-clean on revision count or DB size threshold breach<\/li>\n<li>Cleanup Logs \u2014 full history with date, trigger type, revisions deleted, auto-drafts removed, space freed, and duration<\/li>\n<li>Paginated log table with WordPress-style pagination (Prev\/Next, ellipsis, row count summary)<\/li>\n<li>Color-coded trigger badges: Manual (grey), Scheduled (blue), Smart (green)<\/li>\n<li>Aggregate lifetime totals on Logs page: runs, revisions cleaned, space freed, next scheduled run<\/li>\n<li>Clear All Logs button with confirmation prompt<\/li>\n<li>Post-level cleanup button in the post editor meta box<\/li>\n<li>Revision count meta box in post editor showing stored count and active retention limit<\/li>\n<li>Revision count column in Posts, Pages, and Custom Post Type list tables<\/li>\n<li>Automatic revision trimming on every post save<\/li>\n<li>Admin sidebar with plugin info and quick tips<\/li>\n<li>Full nonce verification on all AJAX and paginated admin GET requests<\/li>\n<li>current_user_can() checks before every privileged action<\/li>\n<li>Full input sanitization and output escaping throughout<\/li>\n<li>PHP 8.1+ with declare(strict_types=1)<\/li>\n<\/ul>","raw_excerpt":"Smart, Safe &amp; Modern Revision Management for WordPress. Control, clean, and optimize post revisions safely without risking data loss.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/298454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=298454"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/shahriarabiddut"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=298454"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=298454"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=298454"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=298454"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=298454"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=298454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}