{"id":334907,"date":"2026-07-14T21:34:17","date_gmt":"2026-07-14T21:34:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/batchpilot\/"},"modified":"2026-07-14T21:36:17","modified_gmt":"2026-07-14T21:36:17","slug":"batchpilot","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/batchpilot\/","author":7640281,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.1","requires":"6.9","requires_php":"7.4","requires_plugins":null,"header_name":"BatchPilot","header_author":"Jean Galea","header_description":"Bulk delete, bulk edit, and bulk duplicate WordPress content with preview, undo, and full audit history. Driveable via admin UI, WP-CLI, REST API, and the Abilities API.","assets_banners_color":"","last_updated":"2026-07-14 21:36:17","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/jgalea\/batchpilot","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":32,"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":"jeangalea","date":"2026-07-14 21:36:17"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3608042,"resolution":"1","location":"assets","locale":"","width":1440,"height":1594},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3608042,"resolution":"2","location":"assets","locale":"","width":1440,"height":2361},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3608042,"resolution":"3","location":"assets","locale":"","width":1440,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3608042,"resolution":"4","location":"assets","locale":"","width":1440,"height":2104}},"screenshots":{"1":"Operations Builder. Pick a target, add filters, choose an operation, preview, execute.","2":"Live preview panel showing matched count and sample rows.","3":"History screen with one-click undo and re-run.","4":"Dashboard with quick actions, weekly stats, and environment checks for Action Scheduler, Abilities API, and database tables."}},"plugin_section":[],"plugin_tags":[14810,11143,271563,10218,18329],"plugin_category":[],"plugin_contributors":[78515],"plugin_business_model":[],"class_list":["post-334907","plugin","type-plugin","status-publish","hentry","plugin_tags-bulk-delete","plugin_tags-bulk-edit","plugin_tags-bulk-operations","plugin_tags-duplicate-posts","plugin_tags-undo","plugin_contributors-jeangalea","plugin_committers-jeangalea"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/batchpilot.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/batchpilot\/assets\/screenshot-1.png?rev=3608042","caption":"Operations Builder. Pick a target, add filters, choose an operation, preview, execute."},{"src":"https:\/\/ps.w.org\/batchpilot\/assets\/screenshot-2.png?rev=3608042","caption":"Live preview panel showing matched count and sample rows."},{"src":"https:\/\/ps.w.org\/batchpilot\/assets\/screenshot-3.png?rev=3608042","caption":"History screen with one-click undo and re-run."},{"src":"https:\/\/ps.w.org\/batchpilot\/assets\/screenshot-4.png?rev=3608042","caption":"Dashboard with quick actions, weekly stats, and environment checks for Action Scheduler, Abilities API, and database tables."}],"raw_content":"<!--section=description-->\n<p>BatchPilot is a single plugin that replaces the usual stack of bulk-delete, bulk-edit, and duplicate-post plugins. Every action is previewed before it runs, can be undone, and is recorded in a history log you can re-run.<\/p>\n\n<p>Three operations on posts, pages, and any registered public post type:<\/p>\n\n<ul>\n<li>Delete. Trash by default, with a separate permanent option.<\/li>\n<li>Duplicate. Copies meta, taxonomies, featured image, and optionally child posts.<\/li>\n<li>Bulk edit. Change status, author, publish dates, taxonomies, password, comment status, or menu order.<\/li>\n<\/ul>\n\n<p>Twelve filters narrow the matching set: post type, status, author, date ranges (modified, published), taxonomy terms, has comments, has featured image, parent, children.<\/p>\n\n<p>Four ways to drive it:<\/p>\n\n<ul>\n<li>Admin UI. Stepper-driven Operations Builder with live preview.<\/li>\n<li>WP-CLI. <code>wp batchpilot delete<\/code>, <code>duplicate<\/code>, <code>edit<\/code>, <code>history<\/code>, <code>undo<\/code>, <code>doctor<\/code>.<\/li>\n<li>REST API. <code>\/wp-json\/batchpilot\/v1\/*<\/code> endpoints with capability-gated permissions.<\/li>\n<li>WordPress Abilities API. Each Target \u00d7 Operation pair is exposed as a registered ability so AI agents and other clients can drive operations.<\/li>\n<\/ul>\n\n<p>Safety features:<\/p>\n\n<ul>\n<li>Every operation is previewed (count plus sample rows) before it runs.<\/li>\n<li>Preview tokens (HMAC-signed, 5-minute TTL) prevent stale state from being executed.<\/li>\n<li>Snapshots are written before mutation so Undo restores the previous state.<\/li>\n<li>Operations over a configurable threshold (default 100 items) run in the background via Action Scheduler.<\/li>\n<li>Per-operation capabilities: <code>batchpilot_delete<\/code>, <code>batchpilot_edit<\/code>, <code>batchpilot_duplicate<\/code>, <code>batchpilot_move<\/code>, <code>batchpilot_schedule<\/code>. Grant per-role or per-user.<\/li>\n<\/ul>\n\n<p>Use cases:<\/p>\n\n<ul>\n<li>Trash old drafts, auto-drafts, or revisions on a schedule.<\/li>\n<li>Re-attribute posts from a departing author.<\/li>\n<li>Shift publish dates on a backlog.<\/li>\n<li>Add or remove taxonomy terms across a content set.<\/li>\n<li>Duplicate templates or landing pages.<\/li>\n<\/ul>\n\n<h3>Development<\/h3>\n\n<p>Source code, including the un-minified JavaScript sources for the admin app, lives at https:\/\/github.com\/jgalea\/batchpilot<\/p>\n\n<p>The compiled assets in <code>assets\/build\/<\/code> are generated with <a href=\"https:\/\/www.npmjs.com\/package\/@wordpress\/scripts\">@wordpress\/scripts<\/a> from the sources in <code>assets\/src\/<\/code>. To rebuild:<\/p>\n\n<pre><code>npm install &amp;&amp; npm run build\n<\/code><\/pre>\n\n<p>PHP dependencies are managed with Composer (<code>composer install<\/code>).<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload BatchPilot to <code>\/wp-content\/plugins\/batchpilot\/<\/code> or install via the Plugins screen.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Open BatchPilot \u2192 Operations from the admin sidebar.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20everything%20undoable%3F\"><h3>Is everything undoable?<\/h3><\/dt>\n<dd><p>Yes, except a permanent delete (which you have to enable explicitly). Trash, bulk edits, and duplicates all write before-state snapshots and can be reversed from the History screen.<\/p><\/dd>\n<dt id=\"how%20long%20is%20the%20history%20kept%3F\"><h3>How long is the history kept?<\/h3><\/dt>\n<dd><p>Configurable in Settings. Default is 90 days. Snapshots older than the retention window are pruned on a daily cron.<\/p><\/dd>\n<dt id=\"will%20it%20work%20on%20a%20large%20site%3F\"><h3>Will it work on a large site?<\/h3><\/dt>\n<dd><p>Operations exceeding the async threshold (default 100 items) run in the background via Action Scheduler, batched at 50 items per chunk. The plugin defers to WooCommerce's bundled Action Scheduler when present.<\/p><\/dd>\n<dt id=\"can%20ai%20agents%20use%20it%3F\"><h3>Can AI agents use it?<\/h3><\/dt>\n<dd><p>Yes. With the WordPress Abilities API installed, each Target \u00d7 Operation pair is registered as an ability under the <code>batchpilot<\/code> category. Agents can query the catalog, preview, execute, and undo via the standard abilities surface.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>WooCommerce HPOS is detected (see the Doctor screen). Direct Woo product\/order operations are on the roadmap; current release covers posts, pages, and any registered public post type.<\/p><\/dd>\n<dt id=\"how%20do%20i%20uninstall%20cleanly%3F\"><h3>How do I uninstall cleanly?<\/h3><\/dt>\n<dd><p>By default, uninstall leaves your operation history in place. To drop everything on uninstall, enable Settings \u2192 Delete data on uninstall before removing the plugin.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<p>Initial release.<\/p>\n\n<ul>\n<li>Three operations on posts, pages, and any registered public post type: Delete (trash or permanent), Duplicate (meta, taxonomies, featured image, optional child posts), Bulk Edit (status, author, dates, taxonomies, password, comment status, menu order).<\/li>\n<li>Thirteen filters: specific IDs, post type, status, author, modified before\/after, published before\/after, taxonomy term, has comments, has featured image, post parent, has children.<\/li>\n<li>Stepper-driven Operations Builder with live preview, smart widgets per param type, and a destructive-action confirmation guard for unfiltered or large deletes.<\/li>\n<li>Snapshot-based undo for every operation except permanent deletes. Full audit history with one-click re-run.<\/li>\n<li>Preview tokens (HMAC-signed, 5-minute TTL) prevent stale state from being executed.<\/li>\n<li>Async execution via Action Scheduler when matched count exceeds the configurable threshold.<\/li>\n<li>Surfaces: admin UI, WP-CLI (<code>wp batchpilot<\/code>), REST API (<code>\/wp-json\/batchpilot\/v1\/*<\/code>), WordPress Abilities API.<\/li>\n<li>Post-list integration: row action (\"Duplicate with BatchPilot\") and bulk actions deep-link into the Operations Builder pre-filled with the selected IDs.<\/li>\n<li>Per-operation capability gates: <code>batchpilot_delete<\/code>, <code>batchpilot_edit<\/code>, <code>batchpilot_duplicate<\/code>, <code>batchpilot_move<\/code>, <code>batchpilot_schedule<\/code>.<\/li>\n<li>Doctor screen and <code>wp batchpilot doctor<\/code> for environment checks.<\/li>\n<\/ul>","raw_excerpt":"Bulk delete, edit, and duplicate WordPress content with preview, undo, and full audit history.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/334907","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=334907"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jeangalea"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=334907"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=334907"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=334907"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=334907"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=334907"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=334907"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}