{"id":310490,"date":"2026-05-15T12:07:19","date_gmt":"2026-05-15T12:07:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bulk-media-downloader\/"},"modified":"2026-05-15T12:06:48","modified_gmt":"2026-05-15T12:06:48","slug":"zipmymedia","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/zipmymedia\/","author":20665832,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.0","stable_tag":"1.3.0","tested":"6.9.4","requires":"5.5","requires_php":"7.4","requires_plugins":null,"header_name":"ZipMyMedia","header_author":"Dhaval Verma","header_description":"Adds a \"Download Selected\" button to the WordPress Media Library when you're in bulk-select mode. Downloads selected files as a ZIP \u2014 works in both grid and list view.","assets_banners_color":"","last_updated":"2026-05-15 12:06:48","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/dhavalv3rma\/ZipMyMedia","header_author_uri":"https:\/\/dhavalverma.in","rating":0,"author_block_rating":0,"active_installs":0,"downloads":48,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.0":{"tag":"1.3.0","author":"dhavalv44","date":"2026-05-15 12:06:48"}},"upgrade_notice":{"1.3.0":"<p>Important performance fix. If you&#039;re on 1.2.0, please upgrade \u2014 this version eliminates a browser-freezing bug.<\/p>","1.2.0":"<p>Better UX: button is now disabled until you select something, with a live count.<\/p>","1.1.0":"<p>Fixes the button appearing outside of bulk-select mode.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3532975,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3532975,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The \"Download Selected\" button appears next to \"Delete permanently\" when you bulk-select media in grid view.","2":"In list view, \"Download Selected\" is added to the standard bulk actions dropdown.","3":"The button shows a live count of selected items and stays disabled until at least one is picked."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[3236,568,84,233,7343],"plugin_category":[50],"plugin_contributors":[263056],"plugin_business_model":[],"class_list":["post-310490","plugin","type-plugin","status-publish","hentry","plugin_tags-bulk","plugin_tags-download","plugin_tags-media","plugin_tags-media-library","plugin_tags-zip","plugin_category-media","plugin_contributors-dhavalv44","plugin_committers-dhavalv44"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/zipmymedia\/assets\/icon-128x128.png?rev=3532975","icon_2x":"https:\/\/ps.w.org\/zipmymedia\/assets\/icon-256x256.png?rev=3532975","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>WordPress lets you bulk-select media files in the Media Library, but only to delete them. <strong>ZipMyMedia<\/strong> adds the missing piece: a \"Download Selected\" button that zips up all the selected files and sends them to your browser as a single download.<\/p>\n\n<p>It works seamlessly in both grid view and list view, and uses WordPress's native UI patterns so the button feels like a built-in feature.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Adds a \"Download Selected\" button next to \"Delete permanently\" in grid view bulk-select mode<\/li>\n<li>Adds a \"Download Selected\" option in the bulk actions dropdown in list view<\/li>\n<li>Button stays disabled until you actually select something, with a live count of selected items<\/li>\n<li>Single files download directly (no unnecessary zipping)<\/li>\n<li>Multiple files are bundled into a timestamped ZIP archive<\/li>\n<li>Handles duplicate filenames automatically (appends attachment IDs)<\/li>\n<li>Uses nonce verification and capability checks for security<\/li>\n<li>No settings page, no database tables \u2014 install and it just works<\/li>\n<\/ul>\n\n<h4>Use cases<\/h4>\n\n<ul>\n<li>Migrating media from one site to another<\/li>\n<li>Downloading a batch of client photos in one go<\/li>\n<li>Backing up specific media files without grabbing the entire uploads folder<\/li>\n<li>Pulling assets for offline editing<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.5 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<li>PHP <code>ZipArchive<\/code> extension (available on virtually all hosts by default)<\/li>\n<\/ul>\n\n<!--section=installation-->\n<h4>Automatic install<\/h4>\n\n<ol>\n<li>Go to <strong>Plugins &gt; Add New<\/strong> in your WordPress admin<\/li>\n<li>Search for \"ZipMyMedia\"<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong><\/li>\n<li>Open your <strong>Media Library<\/strong> \u2014 the new button is ready to use<\/li>\n<\/ol>\n\n<h4>Manual install<\/h4>\n\n<ol>\n<li>Download the plugin ZIP file<\/li>\n<li>Go to <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong> in your WordPress admin<\/li>\n<li>Choose the ZIP file and click <strong>Install Now<\/strong><\/li>\n<li>Click <strong>Activate Plugin<\/strong><\/li>\n<\/ol>\n\n<h4>How to use it<\/h4>\n\n<p><strong>Grid view:<\/strong>\n1. Go to <strong>Media &gt; Library<\/strong>\n2. Click the <strong>Bulk Select<\/strong> button in the top toolbar\n3. Click on the media items you want to download\n4. Click the blue <strong>Download Selected<\/strong> button next to \"Delete permanently\"<\/p>\n\n<p><strong>List view:<\/strong>\n1. Switch to list view from the toggle near the search bar\n2. Tick the checkboxes next to the items you want to download\n3. Choose <strong>Download Selected<\/strong> from the <strong>Bulk actions<\/strong> dropdown\n4. Click <strong>Apply<\/strong><\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20the%20downloaded%20files%20come%20from%3F\"><h3>Where do the downloaded files come from?<\/h3><\/dt>\n<dd><p>The plugin downloads the original files from your <code>\/wp-content\/uploads\/<\/code> folder \u2014 the same files WordPress stored when you uploaded them.<\/p><\/dd>\n<dt id=\"are%20image%20thumbnails%20included%20in%20the%20zip%3F\"><h3>Are image thumbnails included in the ZIP?<\/h3><\/dt>\n<dd><p>No. Only the original full-size files are included. The smaller thumbnail versions (e.g. <code>image-150x150.jpg<\/code>) are skipped.<\/p><\/dd>\n<dt id=\"is%20there%20a%20file%20size%20or%20count%20limit%3F\"><h3>Is there a file size or count limit?<\/h3><\/dt>\n<dd><p>The plugin itself doesn't enforce a limit, but your server's PHP <code>memory_limit<\/code>, <code>max_execution_time<\/code>, and available disk space will. For very large batches (hundreds of MB or more), make sure your hosting allows long-running processes.<\/p><\/dd>\n<dt id=\"where%20is%20the%20zip%20file%20created%3F\"><h3>Where is the ZIP file created?<\/h3><\/dt>\n<dd><p>The ZIP is temporarily created in your <code>\/wp-content\/uploads\/<\/code> folder, streamed to your browser, and then immediately deleted. Nothing is left behind on your server.<\/p><\/dd>\n<dt id=\"who%20can%20use%20the%20download%20button%3F\"><h3>Who can use the download button?<\/h3><\/dt>\n<dd><p>Any user with the <code>upload_files<\/code> capability \u2014 by default that's Authors, Editors, and Administrators. The same group of users who can upload media can download it in bulk.<\/p><\/dd>\n<dt id=\"does%20this%20work%20on%20multisite%3F\"><h3>Does this work on multisite?<\/h3><\/dt>\n<dd><p>Yes. Each subsite's Media Library has its own button, and downloads are scoped to that subsite's uploads.<\/p><\/dd>\n<dt id=\"will%20this%20conflict%20with%20other%20media%20library%20plugins%3F\"><h3>Will this conflict with other media library plugins?<\/h3><\/dt>\n<dd><p>The plugin is intentionally non-invasive \u2014 it only adds a button and an AJAX handler. It shouldn't conflict with other plugins that modify the media library, but if you run into issues, please open a support ticket.<\/p><\/dd>\n<dt id=\"why%20does%20the%20button%20briefly%20show%20%22zipping%E2%80%A6%22%20after%20clicking%3F\"><h3>Why does the button briefly show \"Zipping\u2026\" after clicking?<\/h3><\/dt>\n<dd><p>Building the ZIP takes a moment for larger batches. Once the browser starts the download, the button resets.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Fixed an infinite-loop bug in the MutationObserver that caused the browser to slow down on busy admin pages<\/li>\n<li>Added requestAnimationFrame batching for DOM mutation handling<\/li>\n<li>Idempotent button state updates to prevent self-triggering observer callbacks<\/li>\n<li>Skip mutations originating from inside the plugin's own button<\/li>\n<li>Added cleanup on page unload to disconnect the observer<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Button now starts disabled and only enables when items are selected<\/li>\n<li>Live selection count shown in the button label, e.g. \"Download Selected (3)\"<\/li>\n<li>Removed dashicons icon (was rendering as a blank box on some setups) in favor of plain text<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Button now only appears when bulk-select mode is active (was previously visible all the time)<\/li>\n<li>Improved CSS to match WordPress native button styling<\/li>\n<li>Better DOM observation to react to mode toggles<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Grid view download button<\/li>\n<li>List view bulk action option<\/li>\n<li>Single-file direct download, multi-file ZIP archive<\/li>\n<\/ul>","raw_excerpt":"Adds a &quot;Download Selected&quot; button to the WordPress Media Library so you can bulk-download multiple media files as a single ZIP.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/310490","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=310490"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/dhavalv44"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=310490"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=310490"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=310490"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=310490"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=310490"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=310490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}