{"id":128499,"date":"2020-09-15T22:24:30","date_gmt":"2020-09-15T22:24:30","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/quick-download-button\/"},"modified":"2026-03-20T01:09:29","modified_gmt":"2026-03-20T01:09:29","slug":"quick-download-button","status":"publish","type":"plugin","link":"https:\/\/sq.wordpress.org\/plugins\/quick-download-button\/","author":17608993,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.3.0","stable_tag":"1.3.0","tested":"6.7.5","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"Quick Download Button","header_author":"Abidemi Kusimo","header_description":"Use to add download button link to post or page.","assets_banners_color":"b9a9b8","last_updated":"2026-03-20 01:09:29","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.buymeacoffee.com\/kusimo","header_plugin_uri":"https:\/\/github.com\/kusimo\/quick-download-button","header_author_uri":"","rating":4.6,"author_block_rating":0,"active_installs":2000,"downloads":40139,"num_ratings":12,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.5":{"tag":"1.0.5","author":"kusimo","date":"2022-07-23 16:53:05"},"1.0.6":{"tag":"1.0.6","author":"kusimo","date":"2022-07-24 13:57:22"},"1.0.7":{"tag":"1.0.7","author":"kusimo","date":"2022-08-06 15:23:44"},"1.0.8":{"tag":"1.0.8","author":"kusimo","date":"2022-08-13 15:10:02"},"1.0.9":{"tag":"1.0.9","author":"kusimo","date":"2022-08-28 19:22:47"},"1.2.0":{"tag":"1.2.0","author":"kusimo","date":"2022-08-28 20:40:43"},"1.2.1":{"tag":"1.2.1","author":"kusimo","date":"2022-08-28 22:52:39"},"1.2.2":{"tag":"1.2.2","author":"kusimo","date":"2022-08-28 22:55:36"},"1.2.3":{"tag":"1.2.3","author":"kusimo","date":"2022-08-29 20:38:59"},"1.2.4":{"tag":"1.2.4","author":"kusimo","date":"2023-03-14 18:46:04"},"1.2.5":{"tag":"1.2.5","author":"kusimo","date":"2023-04-19 11:13:24"},"1.2.6":{"tag":"1.2.6","author":"kusimo","date":"2023-11-24 19:32:55"},"1.2.7":{"tag":"1.2.7","author":"kusimo","date":"2026-03-15 01:20:39"},"1.3.0":{"tag":"1.3.0","author":"kusimo","date":"2026-03-20 01:09:29"}},"upgrade_notice":{"1.3.0":"<p>Major feature release. Three new button styles, popup modal with countdown, button row layout, manual file size, icon picker, and several CSS fixes. No breaking changes for existing buttons.<\/p>","1.2.7":"<p>Fixes a fatal error on download when using the Gutenberg block with internally hosted files. Recommended for all users.<\/p>"},"ratings":{"1":0,"2":1,"3":0,"4":2,"5":9},"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":2382467,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3486889,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":{"quick-download-button\/download-button":{"name":"quick-download-button\/download-button","title":"Download Button"},"quick-download-button\/button-row":{"name":"quick-download-button\/button-row","title":"Download Button Row"}},"tagged_versions":["1.0.5","1.0.6","1.0.7","1.0.8","1.0.9","1.2.0","1.2.1","1.2.2","1.2.3","1.2.4","1.2.5","1.2.6","1.2.7","1.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.gif":{"filename":"screenshot-1.gif","revision":2540774,"resolution":"1","location":"assets","locale":""},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3487296,"resolution":"2","location":"assets","locale":""},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3487296,"resolution":"3","location":"assets","locale":""},"screenshot-4.gif":{"filename":"screenshot-4.gif","revision":3487296,"resolution":"4","location":"assets","locale":""},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3487296,"resolution":"5","location":"assets","locale":""},"screenshot-6.jpg":{"filename":"screenshot-6.jpg","revision":3487296,"resolution":"6","location":"assets","locale":""},"screenshot-7.jpg":{"filename":"screenshot-7.jpg","revision":3487296,"resolution":"7","location":"assets","locale":""},"screenshot-8.jpg":{"filename":"screenshot-8.jpg","revision":3487296,"resolution":"8","location":"assets","locale":""}},"screenshots":{"1":"Large button style with file size and extension icon.","2":"Small, Mid, and Basic button styles.","3":"New Pill, Card, and Ghost button styles.","4":"Countdown timer with loading spinner.","5":"Popup modal during countdown \u2014 showing custom content.","6":"Gutenberg block settings panel \u2014 Countdown &amp; Popup section.","7":"Gutenberg block settings panel \u2014 Button Icon and colours section.","8":"Button Row block with multiple buttons in a horizontal layout."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[1912,12724,10142,24613,151844],"plugin_category":[],"plugin_contributors":[177527],"plugin_business_model":[],"class_list":["post-128499","plugin","type-plugin","status-publish","hentry","plugin_tags-access-control","plugin_tags-countdown-timer","plugin_tags-download-button","plugin_tags-file-download","plugin_tags-gutenberg-block","plugin_contributors-kusimo","plugin_committers-kusimo"],"banners":{"banner":"https:\/\/ps.w.org\/quick-download-button\/assets\/banner-772x250.png?rev=3486889","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/quick-download-button\/assets\/icon-256x256.png?rev=2382467","icon_2x":"https:\/\/ps.w.org\/quick-download-button\/assets\/icon-256x256.png?rev=2382467","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/quick-download-button\/assets\/screenshot-1.gif?rev=2540774","caption":"Large button style with file size and extension icon."},{"src":"https:\/\/ps.w.org\/quick-download-button\/assets\/screenshot-2.jpg?rev=3487296","caption":"Small, Mid, and Basic button styles."},{"src":"https:\/\/ps.w.org\/quick-download-button\/assets\/screenshot-3.jpg?rev=3487296","caption":"New Pill, Card, and Ghost button styles."},{"src":"https:\/\/ps.w.org\/quick-download-button\/assets\/screenshot-4.gif?rev=3487296","caption":"Countdown timer with loading spinner."},{"src":"https:\/\/ps.w.org\/quick-download-button\/assets\/screenshot-5.jpg?rev=3487296","caption":"Popup modal during countdown \u2014 showing custom content."},{"src":"https:\/\/ps.w.org\/quick-download-button\/assets\/screenshot-6.jpg?rev=3487296","caption":"Gutenberg block settings panel \u2014 Countdown &amp; Popup section."},{"src":"https:\/\/ps.w.org\/quick-download-button\/assets\/screenshot-7.jpg?rev=3487296","caption":"Gutenberg block settings panel \u2014 Button Icon and colours section."},{"src":"https:\/\/ps.w.org\/quick-download-button\/assets\/screenshot-8.jpg?rev=3487296","caption":"Button Row block with multiple buttons in a horizontal layout."}],"raw_content":"<!--section=description-->\n<p><strong>Quick Download Button<\/strong> lets you add professional download buttons anywhere on your WordPress site with minimal effort. Whether you are sharing PDFs, music, software, videos, or archives, every aspect of the button \u2014 style, colour, icon, countdown, and access rules \u2014 is controlled from a clean settings panel or a single shortcode.<\/p>\n\n\n\n<p><strong>Seven button styles<\/strong><\/p>\n\n<ul>\n<li><strong>Large<\/strong> \u2014 full-width panel with prominent icon area<\/li>\n<li><strong>Mid<\/strong> \u2014 compact horizontal layout<\/li>\n<li><strong>Small<\/strong> \u2014 minimal inline style<\/li>\n<li><strong>Basic<\/strong> \u2014 clean, no-frills button<\/li>\n<li><strong>Pill<\/strong> \u2014 modern rounded pill shape<\/li>\n<li><strong>Card<\/strong> \u2014 elevated card with a panel background<\/li>\n<li><strong>Ghost<\/strong> \u2014 outlined transparent style<\/li>\n<\/ul>\n\n\n\n<p><strong>Countdown timer and popup modal<\/strong><\/p>\n\n<p>Set a wait time in seconds before the download starts. During the countdown an animated spinner and optional message keep the visitor informed.<\/p>\n\n<p>Add a <strong>popup modal<\/strong> to display any content while the countdown runs \u2014 AdSense, banner ads, custom HTML, shortcodes, or any other embed code. You control whether the visitor can dismiss the popup early or whether it stays until the download fires automatically.<\/p>\n\n\n\n<p><strong>Full feature list<\/strong><\/p>\n\n<ul>\n<li>Works with both the <strong>Gutenberg block editor<\/strong> and the <strong>Classic Editor<\/strong> via shortcode<\/li>\n<li><strong>Button Row block<\/strong> and <code>[quick_download_button_group]<\/code> shortcode \u2014 place multiple buttons side by side with gap, alignment, and stack-on-mobile controls<\/li>\n<li><strong>Countdown timer<\/strong> \u2014 configurable wait time in seconds with a custom message<\/li>\n<li><strong>Popup modal during countdown<\/strong> \u2014 show ads or custom HTML\/shortcodes while the timer runs; optionally prevent dismissal until the download starts<\/li>\n<li><strong>File size display<\/strong> \u2014 auto-calculated from the WordPress uploads folder, or enter any text manually (works with external URLs too)<\/li>\n<li><strong>File type icon<\/strong> \u2014 automatically detected for common extensions<\/li>\n<li><strong>Custom download icons<\/strong> \u2014 choose from 10 built-in icons or supply your own SVG<\/li>\n<li><strong>Custom file size icons<\/strong> \u2014 same built-in set or custom SVG<\/li>\n<li><strong>Icon position<\/strong> \u2014 left or right of the button label<\/li>\n<li><strong>Access control<\/strong> \u2014 restrict downloads to logged-in users or specific roles<\/li>\n<li><strong>External URL support<\/strong> \u2014 link to files hosted anywhere<\/li>\n<li><strong>Hidden download links<\/strong> \u2014 the real file URL is never exposed in the page source<\/li>\n<li><strong>Force download<\/strong> \u2014 bypasses the browser's open-in-tab behaviour for supported file types<\/li>\n<li><strong>Open in new tab or same window<\/strong><\/li>\n<li><strong>Custom button colour, font colour, border, border-radius, padding, and alignment<\/strong><\/li>\n<li><strong>Panel colour<\/strong> for Card, Pill, and Ghost styles<\/li>\n<li><strong>Multisite compatible<\/strong><\/li>\n<li><strong>Optimised loading<\/strong> \u2014 CSS and JS only enqueue on pages that contain a download button<\/li>\n<\/ul>\n\n\n\n<p><strong>Supported file types for automatic icon display:<\/strong><\/p>\n\n<pre><code>pdf, `mp3`, `mov`, `zip`, `txt`, `doc`, `xml`, `mp4`, `ppt`, `htm`, `html`, `ps`, `tex`, `csv`, `xlsx`, `pptx`, `js`, `css`, `php`, and common images (`png`, `gif`, `jpg`, `jpeg`, `bmp`).\n<\/code><\/pre>\n\n\n\n<p><strong>Developer-friendly<\/strong><\/p>\n\n<p>The plugin exposes several action and filter hooks so add-on plugins can extend it without editing core files:<\/p>\n\n<ul>\n<li><code>qdb_editor_localize_data<\/code> \u2014 add data to the Gutenberg editor script<\/li>\n<li><code>qdb_localize_script_data<\/code> \u2014 add data to the frontend script<\/li>\n<li><code>qdb_shortcode_atts<\/code> \u2014 modify parsed shortcode attributes<\/li>\n<li><code>qdb_user_can_access<\/code> \u2014 override or extend the access check<\/li>\n<li><code>qdb_button_data_atts<\/code> \u2014 inject extra <code>data-*<\/code> attributes onto the button element<\/li>\n<li><code>qdb_shortcode_output<\/code> \u2014 filter the final button HTML before output<\/li>\n<\/ul>\n\n<h3>Basic Usage<\/h3>\n\n<h4>Gutenberg Block<\/h4>\n\n<ol>\n<li>Open the post or page editor and click the <strong>Add Block<\/strong> (+) icon.<\/li>\n<li>Search for <strong>Download Button<\/strong> (listed under the Media category).<\/li>\n<li>Click the block to set the button title, then click the upload icon to select or upload your file.<\/li>\n<li>Configure colours, countdown, file size, access control, and popup in the block settings sidebar.<\/li>\n<\/ol>\n\n<h4>Shortcode \u2014 minimal<\/h4>\n\n<pre><code>[quick_download_button title=\"Download\" url=\"https:\/\/yoursite.com\/wp-content\/uploads\/file.pdf\"]\n<\/code><\/pre>\n\n<h4>Shortcode \u2014 external file in a new tab<\/h4>\n\n<pre><code>[quick_download_button title=\"Download\" url_external=\"https:\/\/example.com\/file.zip\" open_new_window=\"true\"]\n<\/code><\/pre>\n\n<h4>Shortcode \u2014 countdown with wait message<\/h4>\n\n<pre><code>[quick_download_button title=\"Download\" url_external=\"https:\/\/example.com\/file.zip\" wait=\"15\" msg=\"Please wait 15 seconds...\"]\n<\/code><\/pre>\n\n<h4>Shortcode \u2014 popup modal during countdown<\/h4>\n\n<p>The popup content goes between the opening and closing shortcode tags. It can include HTML, shortcodes, or ad embed code.<\/p>\n\n<pre><code>[quick_download_button title=\"Download\" url_external=\"https:\/\/example.com\/file.zip\" wait=\"15\"]&lt;h3&gt;Sponsored by Example Co.&lt;\/h3&gt;&lt;p&gt;Check out our latest offer.&lt;\/p&gt;[\/quick_download_button]\n<\/code><\/pre>\n\n<p>To prevent the visitor from closing the popup before the download starts:<\/p>\n\n<pre><code>[quick_download_button title=\"Download\" url_external=\"https:\/\/example.com\/file.zip\" wait=\"15\" popup_closable=\"0\"]Ad or message here[\/quick_download_button]\n<\/code><\/pre>\n\n<h4>Shortcode \u2014 button group (multiple buttons in a row)<\/h4>\n\n<pre><code>[quick_download_button_group alignment=\"center\" gap=\"16\"]\n  [quick_download_button title=\"Download v1.0\" url_external=\"https:\/\/example.com\/v1.zip\"]\n  [quick_download_button title=\"Download v2.0\" url_external=\"https:\/\/example.com\/v2.zip\"]\n[\/quick_download_button_group]&lt;h3&gt;More Shortcode Examples&lt;\/h3&gt;\n<\/code><\/pre>\n\n<p><strong>Auto-calculate file size<\/strong> (file must be in your WordPress uploads folder)<\/p>\n\n<pre><code>[quick_download_button file_size=\"1\" title=\"Download\" url=\"https:\/\/yoursite.com\/wp-content\/uploads\/file.pdf\"]\n<\/code><\/pre>\n\n<p><strong>Manual file size<\/strong> (works with any URL, including external)<\/p>\n\n<pre><code>[quick_download_button file_size=\"14.5 MB\" title=\"Download\" url_external=\"https:\/\/example.com\/file.zip\"]\n<\/code><\/pre>\n\n<p><strong>Hide the file extension icon<\/strong><\/p>\n\n<pre><code>[quick_download_button title=\"Download\" extension=\"0\" url=\"https:\/\/yoursite.com\/wp-content\/uploads\/file.pdf\"]\n<\/code><\/pre>\n\n<p><strong>Show file extension icon and text label<\/strong><\/p>\n\n<pre><code>[quick_download_button title=\"Download\" extension=\"1\" extension_text=\"1\" url=\"https:\/\/yoursite.com\/wp-content\/uploads\/file.pdf\"]\n<\/code><\/pre>\n\n<p><strong>Change button style<\/strong><\/p>\n\n<pre><code>[quick_download_button button_type=\"pill\" title=\"Download Now\" url_external=\"https:\/\/example.com\/file.zip\"]\n<\/code><\/pre>\n\n<p>Available values: <code>large<\/code>, <code>mid<\/code>, <code>small<\/code>, <code>basic<\/code>, <code>pill<\/code>, <code>card<\/code>, <code>ghost<\/code><\/p>\n\n<p><strong>Custom colours<\/strong><\/p>\n\n<pre><code>[quick_download_button button_type=\"ghost\" color_bg=\"#0073aa\" color_font=\"#ffffff\" panel_color=\"#f0f8ff\" title=\"Download Now\" url_external=\"https:\/\/example.com\/file.zip\"]\n<\/code><\/pre>\n\n<p><strong>Custom border<\/strong><\/p>\n\n<pre><code>[quick_download_button button_type=\"small\" border_width=\"2\" border_style=\"solid\" border_color=\"#333333\" border_radius=\"9\" title=\"Download\" url_external=\"https:\/\/example.com\/file.zip\"]\n<\/code><\/pre>\n\n<p><strong>Change icon colour (dark\/light)<\/strong><\/p>\n\n<pre><code>[quick_download_button button_type=\"large\" color_icon_dark=\"false\" color_bg=\"#000000\" color_font=\"#ffffff\" title=\"Download\" url_external=\"https:\/\/example.com\/file.zip\"]\n<\/code><\/pre>\n\n<p><strong>Place icon on the right<\/strong><\/p>\n\n<pre><code>[quick_download_button icon_position=\"right\" title=\"Download\" url_external=\"https:\/\/example.com\/file.zip\"]\n<\/code><\/pre>\n\n<p><strong>Restrict to logged-in users<\/strong><\/p>\n\n<pre><code>[quick_download_button user_must_be=\"loggedin\" title=\"Members Only Download\" url_external=\"https:\/\/example.com\/file.zip\"]\n<\/code><\/pre>\n\n<p><strong>Restrict to a specific role<\/strong><\/p>\n\n<pre><code>[quick_download_button user_must_be=\"subscriber\" title=\"Download\" url_external=\"https:\/\/example.com\/file.zip\"]\n<\/code><\/pre>\n\n<p><strong>Countdown with file size and message<\/strong><\/p>\n\n<pre><code>[quick_download_button button_type=\"basic\" wait=\"10\" msg=\"Your download will begin shortly...\" file_size=\"40 MB\" title=\"Download Now\" url_external=\"https:\/\/example.com\/file.zip\"]\n<\/code><\/pre>\n\n<p><strong>Button alignment<\/strong><\/p>\n\n<pre><code>[quick_download_button align=\"center\" title=\"Download\" url_external=\"https:\/\/example.com\/file.zip\"]\n<\/code><\/pre>\n\n<p><strong>Stacked button group, mobile-friendly<\/strong><\/p>\n\n<pre><code>[quick_download_button_group layout=\"stack\" alignment=\"left\" gap=\"8\"]\n  [quick_download_button title=\"Windows\" url_external=\"https:\/\/example.com\/app-win.zip\"]\n  [quick_download_button title=\"macOS\"   url_external=\"https:\/\/example.com\/app-mac.zip\"]\n  [quick_download_button title=\"Linux\"   url_external=\"https:\/\/example.com\/app-linux.tar.gz\"]\n[\/quick_download_button_group]&lt;h3&gt;For Developers: Using in a Theme or Template File&lt;\/h3&gt;\necho do_shortcode('[quick_download_button title=\"Download\" url=\"https:\/\/yoursite.com\/wp-content\/uploads\/file.pdf\"]');&lt;h3&gt;Shortcode Attributes Reference&lt;\/h3&gt;\n<\/code><\/pre>\n\n<h4>[quick_download_button]<\/h4>\n\n\n\n\n  Attribute\n  Description\n  Default\n  Example value\n\n\n\n\n  <code>title<\/code>\n  Button label text\n  <code>\"Download\"<\/code>\n  <code>\"Download Now\"<\/code>\n\n\n  <code>url<\/code>\n  URL of a file in your WordPress uploads folder\n  \u2014\n  <code>\"https:\/\/yoursite.com\/wp-content\/uploads\/file.pdf\"<\/code>\n\n\n  <code>url_external<\/code>\n  URL of a file hosted outside WordPress\n  \u2014\n  <code>\"https:\/\/example.com\/file.zip\"<\/code>\n\n\n  <code>file_size<\/code>\n  <code>\"1\"<\/code> auto-detects size; any other value is displayed as-is\n  \u2014\n  <code>\"1\"<\/code> or <code>\"14.5 MB\"<\/code>\n\n\n  <code>extension<\/code>\n  Show (<code>\"1\"<\/code>) or hide (<code>\"0\"<\/code>) the file type icon\n  <code>\"1\"<\/code>\n  <code>\"0\"<\/code>\n\n\n  <code>extension_text<\/code>\n  Also show the extension as text next to the icon\n  <code>\"0\"<\/code>\n  <code>\"1\"<\/code>\n\n\n  <code>open_new_window<\/code>\n  Open link in a new tab\n  <code>\"false\"<\/code>\n  <code>\"true\"<\/code>\n\n\n  <code>wait<\/code>\n  Seconds before the download starts\n  <code>0<\/code>\n  <code>\"15\"<\/code>\n\n\n  <code>msg<\/code>\n  Message shown during the countdown\n  <code>\"Please wait...\"<\/code>\n  <code>\"Loading...\"<\/code>\n\n\n  <code>button_type<\/code>\n  Button style\n  <code>\"large\"<\/code>\n  <code>large<\/code> \/ <code>mid<\/code> \/ <code>small<\/code> \/ <code>basic<\/code> \/ <code>pill<\/code> \/ <code>card<\/code> \/ <code>ghost<\/code>\n\n\n  <code>color_bg<\/code>\n  Button background colour\n  \u2014\n  <code>\"#ffc107\"<\/code>\n\n\n  <code>panel_color<\/code>\n  Panel\/card background colour (pill, card, ghost styles)\n  \u2014\n  <code>\"#f0f8ff\"<\/code>\n\n\n  <code>color_font<\/code>\n  Button text colour\n  \u2014\n  <code>\"#ffffff\"<\/code>\n\n\n  <code>color_icon_dark<\/code>\n  Use dark icon (<code>\"true\"<\/code>) or light icon (<code>\"false\"<\/code>)\n  <code>\"true\"<\/code>\n  <code>\"false\"<\/code>\n\n\n  <code>icon_id<\/code>\n  Built-in download icon\n  <code>\"default\"<\/code>\n  <code>default<\/code> \/ <code>cloud<\/code> \/ <code>circle<\/code> \/ <code>file-dl<\/code> \/ <code>inbox<\/code> \/ <code>save<\/code> \/ <code>bolt<\/code> \/ <code>folder<\/code> \/ <code>archive<\/code> \/ <code>info<\/code> \/ <code>chip<\/code>\n\n\n  <code>file_size_icon_id<\/code>\n  Built-in file size icon\n  <code>\"folder\"<\/code>\n  same set as <code>icon_id<\/code>\n\n\n  <code>icon_position<\/code>\n  Icon side of the button label\n  <code>\"left\"<\/code>\n  <code>\"right\"<\/code>\n\n\n  <code>border_width<\/code>\n  Border thickness in pixels\n  \u2014\n  <code>\"2\"<\/code>\n\n\n  <code>border_style<\/code>\n  CSS border style\n  \u2014\n  <code>\"solid\"<\/code>\n\n\n  <code>border_color<\/code>\n  Border colour\n  \u2014\n  <code>\"#333333\"<\/code>\n\n\n  <code>border_radius<\/code>\n  Corner rounding in pixels\n  \u2014\n  <code>\"9\"<\/code>\n\n\n  <code>align<\/code>\n  Button alignment on the page\n  \u2014\n  <code>left<\/code> \/ <code>center<\/code> \/ <code>right<\/code>\n\n\n  <code>padding<\/code>\n  Vertical padding in pixels\n  \u2014\n  <code>\"12\"<\/code>\n\n\n  <code>user_must_be<\/code>\n  Restrict access by role or login\n  \u2014\n  <code>\"loggedin\"<\/code> \/ <code>\"subscriber\"<\/code>\n\n\n  <code>validate_msg<\/code>\n  Error message shown when access is denied\n  \u2014\n  <code>\"Members only.\"<\/code>\n\n\n  <code>popup_closable<\/code>\n  Allow (<code>\"1\"<\/code>) or prevent (<code>\"0\"<\/code>) dismissing the popup before countdown ends\n  <code>\"1\"<\/code>\n  <code>\"0\"<\/code>\n\n\n\n\n<p>The <code>popup_content<\/code> is passed as enclosed shortcode content (between the opening and closing tags), not as an attribute. This allows unrestricted HTML, ad code, and nested shortcodes.<\/p>\n\n<h4>[quick_download_button_group]<\/h4>\n\n\n\n\n  Attribute\n  Description\n  Default\n  Example value\n\n\n\n\n  <code>layout<\/code>\n  <code>\"horizontal\"<\/code> (side by side) or <code>\"stack\"<\/code> (column)\n  <code>\"horizontal\"<\/code>\n  <code>\"stack\"<\/code>\n\n\n  <code>stack_on_mobile<\/code>\n  Automatically stack buttons vertically on small screens\n  <code>\"true\"<\/code>\n  <code>\"false\"<\/code>\n\n\n  <code>alignment<\/code>\n  Justify the buttons within the row\n  <code>\"left\"<\/code>\n  <code>left<\/code> \/ <code>center<\/code> \/ <code>right<\/code>\n\n\n  <code>gap<\/code>\n  Gap between buttons in pixels\n  <code>\"12\"<\/code>\n  <code>\"20\"<\/code>\n\n\n\n\n<h3>Donations<\/h3>\n\n<p>If Quick Download Button saves you time and you'd like to support its development, <a href=\"https:\/\/www.buymeacoffee.com\/kusimo\">buy me a coffee<\/a>. Thank you!<\/p>\n\n<h3>Documentation &amp; Source Code<\/h3>\n\n<p>To report issues or contribute, visit the <a href=\"https:\/\/github.com\/kusimo\/quick-download-button\">GitHub repository<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>quick-download-button<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate <strong>Quick Download Button<\/strong> through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Add a download button using the Gutenberg block or the <code>[quick_download_button]<\/code> shortcode.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20this%20plugin%20protect%20%2F%20hide%20download%20links%3F\"><h3>Can this plugin protect \/ hide download links?<\/h3><\/dt>\n<dd><p>Yes. When a file is hosted in your WordPress uploads folder, the plugin stores the attachment ID rather than the URL. The real file URL is never printed in the page source. Downloads pass through a server-side check before the file is served.<\/p><\/dd>\n<dt id=\"does%20the%20countdown%20popup%20work%20with%20google%20adsense%3F\"><h3>Does the countdown popup work with Google AdSense?<\/h3><\/dt>\n<dd><p>Yes. Paste your AdSense or any other ad embed code as the shortcode content or enter it in the Popup Content textarea in the Gutenberg block. The plugin renders the content inside a modal overlay while the countdown runs. When the timer reaches zero the download fires and the popup closes automatically.<\/p><\/dd>\n<dt id=\"can%20i%20stop%20visitors%20from%20closing%20the%20popup%20early%3F\"><h3>Can I stop visitors from closing the popup early?<\/h3><\/dt>\n<dd><p>Yes. Set <code>popup_closable=\"0\"<\/code> in the shortcode or toggle <strong>Allow user to close popup<\/strong> off in the block settings. When disabled, the close button, overlay click, and Escape key are all inactive. The popup disappears only when the countdown ends.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20the%20timer%20finishes%3F\"><h3>What happens when the timer finishes?<\/h3><\/dt>\n<dd><p>The download opens automatically (in the same tab or a new one, depending on your setting), the loading indicator is removed, and the popup modal (if active) closes. No action is required from the visitor.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20classic%20editor%3F\"><h3>Does it work with the Classic Editor?<\/h3><\/dt>\n<dd><p>Yes. Use the <code>[quick_download_button]<\/code> shortcode in the Classic Editor or any text\/HTML widget.<\/p><\/dd>\n<dt id=\"can%20i%20display%20the%20file%20size%20for%20an%20external%20url%3F\"><h3>Can I display the file size for an external URL?<\/h3><\/dt>\n<dd><p>Yes. Enter the file size manually using the <code>file_size<\/code> attribute or the <strong>Manual file size<\/strong> field in the block editor. Auto-detection only works for files stored in the WordPress uploads folder.<\/p><\/dd>\n<dt id=\"can%20i%20group%20multiple%20buttons%20in%20one%20row%3F\"><h3>Can I group multiple buttons in one row?<\/h3><\/dt>\n<dd><p>Yes. Use the <strong>Button Row<\/strong> block in Gutenberg (add it, then add Download Button blocks inside it), or wrap shortcodes in <code>[quick_download_button_group]<\/code>.<\/p><\/dd>\n<dt id=\"can%20i%20restrict%20who%20can%20download%20the%20file%3F\"><h3>Can I restrict who can download the file?<\/h3><\/dt>\n<dd><p>Yes. Use <code>user_must_be=\"loggedin\"<\/code> to require login, or <code>user_must_be=\"subscriber\"<\/code> (or any role slug) to require a specific role. Visitors who do not meet the requirement see a configurable error message.<\/p><\/dd>\n<dt id=\"does%20loading%20the%20plugin%20slow%20down%20every%20page%3F\"><h3>Does loading the plugin slow down every page?<\/h3><\/dt>\n<dd><p>No. The plugin's CSS and JavaScript only load on pages that actually contain a download button (block or shortcode). All other pages are unaffected.<\/p><\/dd>\n<dt id=\"how%20do%20i%20hide%20the%20file%20size%20in%20the%20gutenberg%20block%3F\"><h3>How do I hide the file size in the Gutenberg block?<\/h3><\/dt>\n<dd><p>Toggle the <strong>Show file size<\/strong> option off in the block settings sidebar. In the shortcode, simply omit the <code>file_size<\/code> attribute.<\/p><\/dd>\n<dt id=\"can%20i%20use%20my%20own%20svg%20icon%3F\"><h3>Can I use my own SVG icon?<\/h3><\/dt>\n<dd><p>Yes. Both the download icon and the file size icon support custom SVG. In the shortcode use <code>custom_file_type_icon<\/code> or <code>custom_file_size_icon<\/code>. In the block editor use the <strong>Custom SVG<\/strong> textarea in the icon picker panel.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.0 - March 2025<\/h4>\n\n<ul>\n<li>New: Three additional button styles \u2014 <strong>Pill<\/strong>, <strong>Card<\/strong>, and <strong>Ghost<\/strong> \u2014 joining the original Large, Mid, Small, and Basic.<\/li>\n<li>New: <strong>Button Row block<\/strong> (Gutenberg) and <code>[quick_download_button_group]<\/code> shortcode \u2014 arrange multiple buttons horizontally or stacked, with gap and alignment controls and an optional stack-on-mobile mode.<\/li>\n<li>New: <strong>Popup modal during countdown<\/strong> \u2014 display ads, custom HTML, shortcodes, or any embed code in an overlay modal while the timer counts down. Configured via an enclosed shortcode or a textarea in the block editor.<\/li>\n<li>New: <strong>Popup closable control<\/strong> \u2014 choose whether visitors can dismiss the popup early (close button, overlay click, Escape key) or whether it stays until the download fires. Default: closable.<\/li>\n<li>New: <strong>Manual file size<\/strong> \u2014 override auto-detected file size with any text, or set a file size for external URLs where auto-detection is not possible.<\/li>\n<li>New: <strong>Built-in icon picker<\/strong> for both the download icon and the file size icon \u2014 choose from 11 icons (default arrow, cloud, circle, file-dl, inbox, save, bolt, folder, archive, info, chip) or supply a custom SVG.<\/li>\n<li>New: <strong>Icon position<\/strong> \u2014 place the download icon to the left or right of the button label.<\/li>\n<li>New: <strong>Panel colour<\/strong> \u2014 separate background colour for the info panel on Pill, Card, and Ghost styles.<\/li>\n<li>Fixed: File type icons (PDF, ZIP, MP3, etc.) not rendering correctly inside Pill, Card, and Ghost buttons due to overflow clipping.<\/li>\n<li>Fixed: File size icon and text not properly aligned on the Large, Small, Mid, and Basic styles (missing flex layout on <code>p.down<\/code>).<\/li>\n<li>Improved: Frontend JavaScript fully rewritten \u2014 single interval timer drives both the inline spinner countdown and the popup countdown simultaneously, preventing double-trigger on fast clicks.<\/li>\n<li>Improved: <code>data-qdb-running<\/code> guard prevents countdown from stacking if the button is clicked while a timer is already running.<\/li>\n<\/ul>\n\n<h4>1.2.7 - March 2025<\/h4>\n\n<ul>\n<li>Fixed: Fatal \"ValueError: Path cannot be empty\" when using the download block with internally hosted files.<\/li>\n<li>Technical: Removed incorrect <code>esc_url()<\/code> sanitisation that stripped local file paths.<\/li>\n<\/ul>\n\n<h4>1.2.6 - November 2023<\/h4>\n\n<ul>\n<li>Optimised: CSS and JavaScript now only load on pages that contain a download button, improving performance site-wide.<\/li>\n<\/ul>\n\n<h4>1.2.5 - April 2023<\/h4>\n\n<ul>\n<li>Fixed: 404 error when the Quick Download Button redirect page was deleted. Deactivate and reactivate the plugin to recreate it.<\/li>\n<\/ul>\n\n<h4>1.2.4 - March 2023<\/h4>\n\n<ul>\n<li>Fixed: Nonce verification failure when the download link is an external URL.<\/li>\n<\/ul>\n\n<h4>1.2.3 - August 2022<\/h4>\n\n<ul>\n<li>New: Access control \u2014 restrict downloads by user role and login status.<\/li>\n<\/ul>\n\n<h4>1.2.0 - August 2022<\/h4>\n\n<ul>\n<li>Fixed: Large button style CSS broken after upgrade.<\/li>\n<\/ul>\n\n<h4>1.0.9 - August 2022<\/h4>\n\n<ul>\n<li>New: Small, Mid, and Basic button styles.<\/li>\n<li>New: Button alignment \u2014 left, centre, right.<\/li>\n<\/ul>\n\n<h4>1.0.8 - August 2022<\/h4>\n\n<ul>\n<li>Fixed: Wait message not displaying during the countdown timer.<\/li>\n<\/ul>\n\n<h4>1.0.5 - July 2022<\/h4>\n\n<ul>\n<li>New: Multisite support.<\/li>\n<li>New: <code>wait<\/code> and <code>color_bg<\/code> shortcode attributes.<\/li>\n<\/ul>","raw_excerpt":"Add stylish download buttons to any post or page \u2014 7 styles, countdown, popup modal, access control. Gutenberg block and shortcode.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/128499","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=128499"}],"author":[{"embeddable":true,"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kusimo"}],"wp:attachment":[{"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=128499"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=128499"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=128499"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=128499"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=128499"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=128499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}