{"id":257511,"date":"2025-10-24T11:52:27","date_gmt":"2025-10-24T11:52:27","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bulk-trash-by-url\/"},"modified":"2025-11-25T13:55:03","modified_gmt":"2025-11-25T13:55:03","slug":"bulk-trash-by-url","status":"publish","type":"plugin","link":"https:\/\/pcd.wordpress.org\/plugins\/bulk-trash-by-url\/","author":18824462,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.1","stable_tag":"1.1","tested":"6.8.5","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Bulk Trash by URL","header_author":"Ivan Trendafilov","header_description":"Bulk\u2011trash posts, pages and custom post types from pasted URLs. Fast URL mapping, batched processing with pause\/resume, and an optional summary.","assets_banners_color":"","last_updated":"2025-11-25 13:55:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":20,"downloads":259,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"ivantrendafilov","date":"2025-10-24 11:52:30"},"1.1":{"tag":"1.1","author":"ivantrendafilov","date":"2025-11-25 13:55:03"}},"upgrade_notice":{"1.0":"<p>Initial release on WordPress.org as \u201cBulk Trash by URL\u201d.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":0},"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0","1.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Paste URLs and click \u201cFind Items\u201d.","2":"Mapping progress with unmatched URLs preview.","3":"Select items to trash and monitor progress.","4":"Settings: adjust page size, max URLs, and summary."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[14810,243,166,4667,539],"plugin_category":[],"plugin_contributors":[249675],"plugin_business_model":[],"class_list":["post-257511","plugin","type-plugin","status-publish","hentry","plugin_tags-bulk-delete","plugin_tags-pages","plugin_tags-posts","plugin_tags-trash","plugin_tags-urls","plugin_contributors-ivantrendafilov","plugin_committers-ivantrendafilov"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/bulk-trash-by-url.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Bulk Trash by URL helps editors and SEOs quickly clean up content by trashing items based on a list of URLs. Paste your URLs, let the plugin map each URL to a post ID (handles common variations like trailing slashes and marketing query params), select what you want to remove, and process in efficient batches with progress feedback.<\/p>\n\n<p>Key features:<\/p>\n\n<ul>\n<li>Paste URLs to find matching posts, pages, and custom post types.<\/li>\n<li>Fast URL-to-post mapping in AJAX batches with progress bar.<\/li>\n<li>Select exactly which items to trash before running.<\/li>\n<li>Batched trashing with live progress, pause\/resume controls.<\/li>\n<li>Optional completion summary with counts and lists (trashed, failed, no permission, invalid).<\/li>\n<li>Settings to tune performance and limits:\n\n<ul>\n<li>Max Page Size (mapping batch size)<\/li>\n<li>Max URLs per run<\/li>\n<li>Toggle completion summary<\/li>\n<li>Optional mode to set matched items to Private instead of Trash<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<p>Built for large lists and long-running jobs. Everything goes to the WordPress Trash, so you can restore or permanently delete as you normally would.<\/p>\n\n<p>Capabilities &amp; security:<\/p>\n\n<ul>\n<li>Restricted to users who can <code>manage_options<\/code>.<\/li>\n<li>Nonce-protected AJAX endpoints.<\/li>\n<li>Conservative sanitization and server-side validation.<\/li>\n<\/ul>\n\n<p>Compatibility notes:<\/p>\n\n<ul>\n<li>Works with sites using pretty permalinks. Mapping relies on WordPress <code>url_to_postid()<\/code> and common URL variants.<\/li>\n<li>Custom post types are supported if they use public, front-end URLs.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/bulk-trash-by-url\/<\/code>, or install from the Plugins screen.<\/li>\n<li>Activate the plugin through the \u201cPlugins\u201d screen in WordPress.<\/li>\n<li>Go to Tools \u2192 Bulk Trash by URL.<\/li>\n<li>Paste URLs (one per line), click \u201cFind Items\u201d, review the matched items, and start trashing.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='will%20this%20permanently%20delete%20my%20posts%3F'><h3>Will this permanently delete my posts?<\/h3><\/dt>\n<dd><p>No. Items are moved to the WordPress Trash. You can restore or permanently delete them from there.<\/p><\/dd>\n<dt id='does%20it%20support%20custom%20post%20types%3F'><h3>Does it support custom post types?<\/h3><\/dt>\n<dd><p>Yes, provided the post type is public and has front-end URLs that <code>url_to_postid()<\/code> can resolve.<\/p><\/dd>\n<dt id='what%20happens%20if%20a%20url%20doesn%E2%80%99t%20map%20to%20a%20post%3F'><h3>What happens if a URL doesn\u2019t map to a post?<\/h3><\/dt>\n<dd><p>Unmatched URLs are listed after the mapping phase so you can review and resolve them.<\/p><\/dd>\n<dt id='i%20get%20timeouts.%20what%20can%20i%20do%3F'><h3>I get timeouts. What can I do?<\/h3><\/dt>\n<dd><p>Reduce \u201cMax Page Size\u201d in Settings to make each AJAX batch smaller. You can also lower \u201cMax URLs per run\u201d.<\/p><\/dd>\n<dt id='who%20can%20use%20the%20tool%3F'><h3>Who can use the tool?<\/h3><\/dt>\n<dd><p>Only administrators (users with <code>manage_options<\/code>) can access it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1<\/h4>\n\n<ul>\n<li>New option: set matched items to Private instead of moving them to the Trash (disabled by default).<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial release under the new name.<\/li>\n<li>Two-step flow with URL mapping, selection, and batched trashing with pause\/resume.<\/li>\n<li>Summary screen with detailed results.<\/li>\n<li>Settings tab for Mapping Batch Size, Max URLs per run, and summary toggle.<\/li>\n<li>Performance improvements for large lists.<\/li>\n<\/ul>","raw_excerpt":"Bulk\u2011trash posts, pages and custom post types from pasted URLs. Fast URL mapping, batched processing with pause\/resume, and an optional summary.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/257511","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=257511"}],"author":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ivantrendafilov"}],"wp:attachment":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=257511"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=257511"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=257511"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=257511"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=257511"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=257511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}