{"id":295189,"date":"2026-04-06T17:25:34","date_gmt":"2026-04-06T17:25:34","guid":{"rendered":"https:\/\/it.wordpress.org\/plugins\/expirepress-delete\/"},"modified":"2026-04-06T17:25:24","modified_gmt":"2026-04-06T17:25:24","slug":"dataprune","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/dataprune\/","author":23472815,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.1","stable_tag":"1.2.1","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"DataPrune","header_author":"AiReport","header_description":"Bulk-delete posts, pages, media, comments, users, taxonomy terms and metadata with flexible filters. Includes scheduled auto-deletion and recovery system.","assets_banners_color":"383741","last_updated":"2026-04-06 17:25:24","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.paypal.com\/donate\/?hosted_button_id=LSR9D3EA677KQ","header_plugin_uri":"","header_author_uri":"https:\/\/aireport.it","rating":0,"author_block_rating":0,"active_installs":0,"downloads":74,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.1":{"tag":"1.2.1","author":"aireport","date":"2026-04-06 17:25:24"}},"upgrade_notice":{"1.2.1":"<p>Plugin renamed to DataPrune. Update the plugin folder name to <code>dataprune<\/code> when upgrading manually. All data and settings are preserved.<\/p>","1.1.5":"<p>Plugin Check compliance release: fixes all i18n ERRORs, removes .DS_Store files, replaces date() with gmdate(), adds wp_unslash() on all user inputs, updates &quot;Tested up to: 6.8&quot;. Safe to update.<\/p>","1.1.4":"<p>GPL\/WP.org compliance release: adds uninstall cleanup, timezone fixes, i18n improvements, and a new Donation page. Safe to update.<\/p>","1.1.3":"<p>Important fix for fatal error on activation. Re-upload the plugin folder and reactivate. All data and settings are preserved.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3500032,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3500032,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3500032,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3500032,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3500032,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3500041,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3500032,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3500032,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3500032,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3500032,"resolution":"6","location":"assets","locale":""}},"screenshots":{"1":"Dashboard \u2014 panoramica con stat card (post, media, spam, revisioni, cestino) e stream delle ultime attivit\u00e0","2":"Elimina Contenuti \u2014 selettore dei tipi di contenuto con conteggi live e filtri avanzati","3":"Modulo Media \u2014 rilevamento orfani, filtro MIME type, dimensione minima e intervallo di date","4":"Automazione \u2014 lista task con stato, prossima esecuzione e form di creazione rapida","5":"Recupero \u2014 griglia visuale con anteprime, ricerca, filtri e ripristino in un click","6":"Barra di avanzamento AJAX \u2014 elaborazione batch in tempo reale, nessun timeout 503","7":"Impostazioni di sicurezza \u2014 modalit\u00e0 cestino, conferma operazioni, log attivit\u00e0"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[14810,3786,257137,18097,94876],"plugin_category":[],"plugin_contributors":[259568],"plugin_business_model":[],"class_list":["post-295189","plugin","type-plugin","status-publish","hentry","plugin_tags-bulk-delete","plugin_tags-cleanup","plugin_tags-delete-media","plugin_tags-delete-posts","plugin_tags-scheduled-delete","plugin_contributors-aireport","plugin_committers-aireport"],"banners":{"banner":"https:\/\/ps.w.org\/dataprune\/assets\/banner-772x250.png?rev=3500032","banner_2x":"https:\/\/ps.w.org\/dataprune\/assets\/banner-1544x500.png?rev=3500032","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/dataprune\/assets\/icon-128x128.png?rev=3500032","icon_2x":"https:\/\/ps.w.org\/dataprune\/assets\/icon-256x256.png?rev=3500032","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/dataprune\/assets\/screenshot-1.png?rev=3500032","caption":"Dashboard \u2014 panoramica con stat card (post, media, spam, revisioni, cestino) e stream delle ultime attivit\u00e0"},{"src":"https:\/\/ps.w.org\/dataprune\/assets\/screenshot-2.png?rev=3500041","caption":"Elimina Contenuti \u2014 selettore dei tipi di contenuto con conteggi live e filtri avanzati"},{"src":"https:\/\/ps.w.org\/dataprune\/assets\/screenshot-3.png?rev=3500032","caption":"Modulo Media \u2014 rilevamento orfani, filtro MIME type, dimensione minima e intervallo di date"},{"src":"https:\/\/ps.w.org\/dataprune\/assets\/screenshot-4.png?rev=3500032","caption":"Automazione \u2014 lista task con stato, prossima esecuzione e form di creazione rapida"},{"src":"https:\/\/ps.w.org\/dataprune\/assets\/screenshot-5.png?rev=3500032","caption":"Recupero \u2014 griglia visuale con anteprime, ricerca, filtri e ripristino in un click"},{"src":"https:\/\/ps.w.org\/dataprune\/assets\/screenshot-6.png?rev=3500032","caption":"Barra di avanzamento AJAX \u2014 elaborazione batch in tempo reale, nessun timeout 503"}],"raw_content":"<!--section=description-->\n<p><strong>DataPrune<\/strong> is a bulk-deletion and database-cleanup plugin for WordPress.\nIt lets you remove any type of content \u2014 posts, pages, media, comments, users, taxonomy terms, and metadata \u2014 with precise filters and conditions, without ever risking a 503 timeout thanks to its <strong>AJAX batch processing engine<\/strong>.<\/p>\n\n<p>Whether you manage an automated content site (e.g. WP Automatic \/ ValvePress), a high-traffic blog, or a large e-commerce store, DataPrune gives you full control over what stays and what goes.<\/p>\n\n<h4>\u2728 Key Features<\/h4>\n\n<p><strong>8 deletion modules, each with dedicated filters:<\/strong><\/p>\n\n<ul>\n<li>\ud83d\udcc4 <strong>Posts \/ Pages \/ CPT<\/strong> \u2014 filter by status (published, draft, private, pending, scheduled\u2026), date range, categories, tags, authors, post type. Option to also delete associated media in one click.<\/li>\n<li>\ud83d\uddbc\ufe0f <strong>Media &amp; Attachments<\/strong> \u2014 delete orphaned media (not linked to any post and not used as featured image), filter by MIME type, minimum file size, and upload date range. Protected media (site logo, favicon, header\/background image) are never deleted.<\/li>\n<li>\ud83d\udd01 <strong>Revisions<\/strong> \u2014 delete all post revisions or only those older than a specific date range.<\/li>\n<li>\ud83d\uddd1\ufe0f <strong>Trash<\/strong> \u2014 permanently empty the WordPress trash, by content type.<\/li>\n<li>\ud83d\udcac <strong>Comments<\/strong> \u2014 delete spam, pending, approved or trashed comments with date filter.<\/li>\n<li>\ud83d\udc64 <strong>Users<\/strong> \u2014 delete users by role, registration date, and activity (users with no published posts). Administrators and the currently logged-in user are always protected.<\/li>\n<li>\ud83c\udff7\ufe0f <strong>Taxonomy Terms<\/strong> \u2014 delete empty terms (no associated posts) for any taxonomy.<\/li>\n<li>\ud83d\udd11 <strong>Post Meta &amp; User Meta<\/strong> \u2014 delete metadata records by key and optional value.<\/li>\n<\/ul>\n\n<h4>\u23f1\ufe0f Scheduled Auto-Deletion<\/h4>\n\n<p>Create automatic deletion tasks that run on a recurring schedule (hourly, twice daily, daily, weekly, monthly):<\/p>\n\n<ul>\n<li>Choose deletion type, filters, and frequency<\/li>\n<li>Enable\/disable each task independently<\/li>\n<li>Run any task manually on demand<\/li>\n<li>Option to also delete associated media when auto-deleting posts<\/li>\n<li>Ideal for sites that auto-publish content (WP Automatic, RSS importers, etc.)<\/li>\n<\/ul>\n\n<h4>\u267b\ufe0f Recovery System<\/h4>\n\n<p>Every permanent deletion is saved in a dedicated database table before being executed:<\/p>\n\n<ul>\n<li><strong>Visual grid<\/strong> with thumbnail previews for media and posts<\/li>\n<li><strong>Text search<\/strong> by title<\/li>\n<li><strong>Filters<\/strong> by type (post\/media), deletion date range, restoration status<\/li>\n<li><strong>One-click restore<\/strong> \u2014 posts are restored as drafts with all meta and taxonomy terms<\/li>\n<li>Activity log with user, timestamp and item count for every operation<\/li>\n<\/ul>\n\n<h4>\ud83d\udd12 Security Features<\/h4>\n\n<ul>\n<li><strong>Safe mode (Trash)<\/strong> \u2014 move items to trash instead of permanent deletion (recoverable)<\/li>\n<li><strong>Confirmation dialog<\/strong> \u2014 JavaScript confirmation before every bulk operation<\/li>\n<li><strong>Protected media detection<\/strong> \u2014 automatically excludes site logo, favicon, header image, background image, WooCommerce placeholder, and any media protected via the <code>wbdp_protected_media_ids<\/code> filter<\/li>\n<li><strong>Admin protection<\/strong> \u2014 administrators and the current user can never be deleted<\/li>\n<li><strong>Nonce verification<\/strong> on every request<\/li>\n<li><strong><code>manage_options<\/code> capability<\/strong> check on every action<\/li>\n<li><strong>Activity log<\/strong> with configurable retention period<\/li>\n<\/ul>\n\n<h4>\u26a1 No More 503 Timeout<\/h4>\n\n<p>All deletion operations use <strong>AJAX batch processing<\/strong>: the browser sends small batches of 50\u2013100 items at a time, showing a real-time progress bar. No single request ever exceeds the server timeout, even with tens of thousands of items.<\/p>\n\n<h4>\ud83c\udf10 Multilingual<\/h4>\n\n<ul>\n<li>Default language: Italian<\/li>\n<li>Full English (en_US) translation included<\/li>\n<li>Ready for any language via standard <code>.po<\/code>\/<code>.mo<\/code> files<\/li>\n<\/ul>\n\n<h4>\ud83e\udd1d WP Automatic \/ ValvePress Integration<\/h4>\n\n<p>DataPrune is specifically optimized for sites using <strong>WP Automatic by ValvePress<\/strong>:\n* Auto-generated images are stored as WordPress attachments linked to posts\n* The \"Delete associated media\" option removes both the article and its generated image in a single operation\n* Orphaned images left by previously deleted articles are detected and cleaned up automatically\n* Scheduled tasks can be configured to delete posts + media on a recurring basis<\/p>\n\n<h4>\u2764\ufe0f Support the Project<\/h4>\n\n<p>DataPrune is free and open-source software, released under the GPL v2 license.\nIf it saves you time and keeps your database healthy, please consider making a small donation to support its continued development and maintenance.<\/p>\n\n<p><a href=\"https:\/\/www.paypal.com\/donate\/?hosted_button_id=LSR9D3EA677KQ\">Donate via PayPal<\/a><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>dataprune<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress<\/li>\n<li>Navigate to <strong>DataPrune<\/strong> in the admin sidebar<\/li>\n<li>Configure Security Settings before running your first deletion<\/li>\n<\/ol>\n\n<p><strong>Important:<\/strong> After activation, go to <strong>Settings<\/strong> and verify:\n- \u2705 Safe mode (Trash) is enabled for your first operations\n- \u2705 Logging is enabled\n- \u2705 Confirmation dialog is enabled<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20this%20plugin%20delete%20my%20site%20logo%20or%20favicon%3F\"><h3>Will this plugin delete my site logo or favicon?<\/h3><\/dt>\n<dd><p>No. DataPrune automatically detects and protects the site logo (<code>custom_logo<\/code>), favicon (<code>site_icon<\/code>), header image, background image, and WooCommerce placeholder image. These are never treated as orphans.<\/p><\/dd>\n<dt id=\"can%20i%20recover%20deleted%20items%3F\"><h3>Can I recover deleted items?<\/h3><\/dt>\n<dd><p>Yes, if the item was permanently deleted through this plugin. Before every permanent deletion, a snapshot of the item (all data, meta, and taxonomy terms) is saved to a dedicated recovery table. You can restore it from <strong>DataPrune \u2192 Recovery<\/strong> as a draft.<\/p>\n\n<p>Note: if Safe mode (Trash) is active, items go to the WordPress trash and can be recovered from there directly.<\/p><\/dd>\n<dt id=\"why%20use%20ajax%20batch%20processing%3F\"><h3>Why use AJAX batch processing?<\/h3><\/dt>\n<dd><p>With thousands of items to delete, a single PHP request would exceed the server's <code>max_execution_time<\/code> (usually 30\u201360 seconds) and return a 503 error. Batch processing splits the work into small chunks of 50\u2013100 items, each processed in a separate request, with a live progress bar.<\/p><\/dd>\n<dt id=\"can%20i%20automatically%20delete%20old%20auto-generated%20posts%3F\"><h3>Can I automatically delete old auto-generated posts?<\/h3><\/dt>\n<dd><p>Yes. Go to <strong>DataPrune \u2192 Scheduled<\/strong> and create a new task:\n- Type: Posts \/ Pages\n- Status: Published (or any)\n- Older than: 30 days (or your preferred period)\n- \u2705 Delete associated media\n- Frequency: Daily<\/p>\n\n<p>This will automatically delete posts and their images every day.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20woocommerce%3F\"><h3>Is it compatible with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. You can delete products (custom post type <code>product<\/code>), WooCommerce-specific meta, and product terms. The WooCommerce placeholder image is always protected.<\/p><\/dd>\n<dt id=\"what%20wordpress%20version%20is%20required%3F\"><h3>What WordPress version is required?<\/h3><\/dt>\n<dd><p>WordPress 5.8 or higher. PHP 7.4 or higher.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20free%3F\"><h3>Is the plugin free?<\/h3><\/dt>\n<dd><p>Yes, completely free and open-source (GPL v2). If you find it useful, a small <a href=\"https:\/\/www.paypal.com\/donate\/?hosted_button_id=LSR9D3EA677KQ\">donation<\/a> helps cover development and maintenance costs.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Plugin renamed to DataPrune (slug: dataprune, text domain: dataprune)<\/li>\n<li>Removed Plugin URI header (was identical to Author URI \u2014 WP.org requirement)<\/li>\n<li>Updated description: removed comparative marketing language per WP.org guidelines<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Fix CRITICO: il filtro \"Pi\u00f9 vecchi di\" nei task programmati veniva ignorato \u2014 tutti i contenuti corrispondenti al tipo\/stato venivano eliminati indipendentemente dall'et\u00e0. I parametri older_than_value\/older_than_unit ora vengono convertiti correttamente in datetime prima dell'esecuzione<\/li>\n<li>Fix: aggiornamento immediato di next_run all'avvio di ogni invocazione cron \u2014 previene la doppia esecuzione del task da parte di run_due_tasks() mentre il cron chaining \u00e8 ancora attivo<\/li>\n<li>Fix: il flag force_recovery ora viene correttamente gestito in delete_batch() \u2014 gli snapshot di recupero vengono salvati anche quando la modalit\u00e0 cestino \u00e8 attiva (per i task programmati)<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>New: \"Esegui ora\" usa AJAX batch con progress modal \u2014 nessun timeout 503, elabora l'intero dataset senza ricaricare la pagina<\/li>\n<li>New: Esecuzione automatica WP-Cron a catena \u2014 ogni invocazione elabora un batch, poi schedula automaticamente il successivo finch\u00e9 non rimangono elementi<\/li>\n<li>New: Snapshot di recupero forzata per i task di tipo \"Post\" \u2014 possibilit\u00e0 di ripristino dalla pagina Recovery in caso di errore (non applicabile al task \"Svuota Cestino\")<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>New: Filtro per categorie disponibile anche nel form dei task programmati (Automazione)<\/li>\n<li>Fix: Errore 503 durante l'esecuzione manuale dei task programmati \u2014 aggiunto time-guard di 20 secondi per invocazione; se rimangono elementi, verranno eliminati alla successiva esecuzione<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>New: Redesigned admin UI \u2014 Dashboard overview page with stat cards and activity stream; Bulk Delete page with content-type selector cards and live counts; Log page with stats header; Scheduled page with task card list<\/li>\n<li>Fix: Added <code>phpcs:ignore<\/code> for inherent <code>DirectDatabaseQuery<\/code>\/<code>NoCaching<\/code> in log, scheduler, recovery, comments, meta, posts, media classes (Plugin Check WARNINGs)<\/li>\n<li>Fix: Added <code>phpcs:ignore<\/code> for <code>NonceVerification.Missing<\/code>\/<code>Recommended<\/code> in admin page renderers \u2014 nonce is verified via <code>WBDP_Helper::verify_request()<\/code> (Plugin Check WARNING false positives)<\/li>\n<li>Fix: Added <code>phpcs:ignore<\/code> for <code>PostNotIn_exclude<\/code> in delete-users class \u2014 user exclusion is inherently required for admin safety (Plugin Check WARNING false positive)<\/li>\n<li>Fix: Added <code>NoCaching<\/code> suppression to <code>uninstall.php<\/code> DROP TABLE queries<\/li>\n<li>Fix: Rewrote <code>WBDP_Recovery::count_items()<\/code> to use explicit if\/else instead of ternary to resolve <code>NotPrepared<\/code> PHPCS ERROR<\/li>\n<li>Fix: Removed <code>.DS_Store<\/code> files and <code>.gitignore<\/code> from plugin assets (Plugin Check ERROR \u2014 hidden_files)<\/li>\n<li>Fix: Updated \"Tested up to\" to 6.9 in plugin header and readme (Plugin Check ERROR \u2014 outdated\/mismatched header)<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Fix: Added <code>\/* translators: *\/<\/code> comments to all i18n strings with placeholders (Plugin Check ERROR \u2014 WordPress.WP.I18n.MissingTranslatorsComment)<\/li>\n<li>Fix: Replaced unordered <code>%s, %d<\/code> placeholders with ordered <code>%1$s, %2$d<\/code> in recovery success message (Plugin Check ERROR \u2014 WordPress.WP.I18n.UnorderedPlaceholders)<\/li>\n<li>Fix: Wrapped <code>_n()<\/code> output in <code>esc_html()<\/code> in recovery page (Plugin Check ERROR \u2014 EscapeOutputDocumentedFunctions)<\/li>\n<li>Fix: Removed all <code>.DS_Store<\/code> files from the plugin directory (Plugin Check ERROR \u2014 hidden_files)<\/li>\n<li>Fix: Updated \"Tested up to: 6.8\" (Plugin Check ERROR \u2014 outdated WP version)<\/li>\n<li>Fix: Replaced <code>date()<\/code> with <code>gmdate()<\/code> in helper, log, and scheduler classes (Plugin Check WARNING \u2014 WordPress.DateTime.RestrictedFunctions)<\/li>\n<li>Fix: Added <code>wp_unslash()<\/code> before all <code>sanitize_*()<\/code> calls on <code>$_POST<\/code>\/<code>$_GET<\/code> data (Plugin Check WARNING \u2014 WordPress.Security.ValidatedSanitizedInput.MissingUnslash)<\/li>\n<li>Fix: Added <code>phpcs:disable WordPress.NamingConventions.PrefixAllGlobals<\/code> to all template files (local variables in included files)<\/li>\n<li>Fix: Removed deprecated <code>load_plugin_textdomain()<\/code> call \u2014 WordPress auto-loads translations for WP.org plugins since 4.6<\/li>\n<li>Fix: Added <code>phpcs:ignore<\/code> for inherent DirectDatabaseQuery\/SchemaChange in uninstall.php<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>New: Donation page inside the plugin admin (DataPrune \u2192 Donate)<\/li>\n<li>New: <code>uninstall.php<\/code> \u2014 custom tables and options are now removed on plugin deletion (GPL\/WP.org compliance)<\/li>\n<li>Fix: <code>date()<\/code> replaced with <code>wp_date()<\/code> throughout \u2014 dates now respect WordPress timezone settings<\/li>\n<li>Fix: HTML tags inside <code>esc_html_e()<\/code> in recovery page notes (tags were being escaped and shown as text)<\/li>\n<li>Fix: Unescaped CSS class echoes in recovery grid template<\/li>\n<li>Fix: Deprecated <code>get_users(['who'=&gt;'authors'])<\/code> replaced with <code>capability<\/code> parameter (WP 5.9+)<\/li>\n<li>Fix: Hardcoded Italian strings in admin.js moved to <code>wp_localize_script<\/code> for full i18n support<\/li>\n<li>Fix: Admin CSS header updated; GPL-2.0+ license header added to all PHP\/JS\/CSS files<\/li>\n<li>Fix: readme.txt \u2014 tags reduced to 5, short description shortened to \u2264150 chars (WP.org validator)<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Fix: Fatal error on activation \u2014 activation\/deactivation hooks moved to file scope (WordPress best practice)<\/li>\n<li>Fix: Scheduler \"revisions\" and \"trash\" task types now use batch processing (previously called non-existent methods)<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Plugin renamed from WP Bulk Delete Pro to ExpirePress Delete (historical)<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Scheduled tasks: added \"Delete associated media\" option for post deletion tasks<\/li>\n<li>Scheduler now uses batch processing (no timeout on large datasets)<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: Recovery System \u2014 snapshot and restore permanently deleted items<\/li>\n<li>New: Visual recovery grid with thumbnail previews<\/li>\n<li>New: Search and filter in recovery page<\/li>\n<li>Updated: Plugin metadata (Author: AiReport, Requires at least: 5.8, Requires PHP: 7.4)<\/li>\n<li>Added: English (en_US) translations<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fix: Protected media detection \u2014 site logo, favicon, header\/background images are now excluded from orphan queries<\/li>\n<li>New: <code>wbdp_protected_media_ids<\/code> filter for third-party extensions<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fix: AJAX nonce field name mismatch causing <code>-1<\/code> response on media deletion<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>New: Media tab with orphan detection, MIME type, size, and date range filters<\/li>\n<li>New: AJAX batch processing with progress modal (solves 503 timeout on large datasets)<\/li>\n<li>New: Date range filter (from\/to) replacing the simple \"older than\" field<\/li>\n<li>Updated: Tab slug for media changed to <code>media-files<\/code><\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Bulk delete: posts, pages, CPT, revisions, trash, comments, users, taxonomy terms, post meta, user meta<\/li>\n<li>Scheduled deletion with WP-Cron<\/li>\n<li>Activity log<\/li>\n<li>Security settings (trash mode, confirmation, log retention)<\/li>\n<li>English translation<\/li>\n<\/ul>","raw_excerpt":"Bulk-delete posts, pages, media, comments, users, taxonomy terms and metadata. Scheduled auto-deletion and recovery system included.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/295189","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=295189"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/aireport"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=295189"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=295189"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=295189"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=295189"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=295189"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=295189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}