{"id":356170,"date":"2026-09-01T14:59:18","date_gmt":"2026-09-01T14:59:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/discount-rules-box-quantity-breaks-upsell-for-woocommerce\/"},"modified":"2026-09-03T06:07:34","modified_gmt":"2026-09-03T06:07:34","slug":"drbu-discount-rules-box-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/ky.wordpress.org\/plugins\/drbu-discount-rules-box-for-woocommerce\/","author":23470525,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.9.49","stable_tag":"2.9.49","tested":"7.1","requires":"6.4","requires_php":"8.0","requires_plugins":null,"header_name":"DRBU Discount Rules Box for WooCommerce","header_author":"Predrag Vujnovi\u0107","header_description":"Quantity breaks, volume discounts and discount rules for WooCommerce. Buy box with 2 or 3 packs (configurable) with tiered pricing applied automatically in the cart. Shortcode: [drbu_tiered_buy_box]","assets_banners_color":"f6f8fd","last_updated":"2026-09-03 06:07:34","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/discountrulesbox.com","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":110,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.9.48":{"tag":"2.9.48","author":"predragvujnovic88","date":"2026-09-01 14:59:03","revision":3676381},"2.9.49":{"tag":"2.9.49","author":"predragvujnovic88","date":"2026-09-03 06:07:34","revision":3679065}},"upgrade_notice":{"2.6.1":"<p>Minor update with refined badge text defaults and enhanced price calculation precision. Recommended for all users.<\/p>","2.6.0":"<p>Major release introducing Analytics Dashboard, Live Admin Preview Builder, and 1-Click Quick Language Presets.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3676427,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3676427,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3676427,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3676427,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.9.48","2.9.49"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3676404,"resolution":"1","location":"assets","locale":"","width":1600,"height":1000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3676404,"resolution":"2","location":"assets","locale":"","width":1600,"height":1400},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3676404,"resolution":"3","location":"assets","locale":"","width":1600,"height":1400},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3676404,"resolution":"4","location":"assets","locale":"","width":1600,"height":1400}},"screenshots":{"1":"High-converting 3-Tiered Buy Box on product page with savings highlights, unit pricing, and trust badges.","2":"Live Interactive Admin Preview Builder with real-time settings and color controls.","3":"Built-in Analytics Dashboard showing AOV boost, tier distribution, and upsell revenue metrics.","4":"1-Click Quick Language Presets for instant international store deployment."}},"plugin_section":[],"plugin_tags":[274335,166977,1311,247123,286],"plugin_category":[45],"plugin_contributors":[78154,278679],"plugin_business_model":[],"class_list":["post-356170","plugin","type-plugin","status-publish","hentry","plugin_tags-quantity-breaks","plugin_tags-tiered-pricing","plugin_tags-upsell","plugin_tags-volume-discount","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-freemius","plugin_contributors-predragvujnovic88","plugin_committers-predragvujnovic88"],"banners":{"banner":"https:\/\/ps.w.org\/drbu-discount-rules-box-for-woocommerce\/assets\/banner-772x250.png?rev=3676427","banner_2x":"https:\/\/ps.w.org\/drbu-discount-rules-box-for-woocommerce\/assets\/banner-1544x500.png?rev=3676427","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/drbu-discount-rules-box-for-woocommerce\/assets\/icon-128x128.png?rev=3676427","icon_2x":"https:\/\/ps.w.org\/drbu-discount-rules-box-for-woocommerce\/assets\/icon-256x256.png?rev=3676427","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/drbu-discount-rules-box-for-woocommerce\/assets\/screenshot-1.png?rev=3676404","caption":"High-converting 3-Tiered Buy Box on product page with savings highlights, unit pricing, and trust badges."},{"src":"https:\/\/ps.w.org\/drbu-discount-rules-box-for-woocommerce\/assets\/screenshot-2.png?rev=3676404","caption":"Live Interactive Admin Preview Builder with real-time settings and color controls."},{"src":"https:\/\/ps.w.org\/drbu-discount-rules-box-for-woocommerce\/assets\/screenshot-3.png?rev=3676404","caption":"Built-in Analytics Dashboard showing AOV boost, tier distribution, and upsell revenue metrics."},{"src":"https:\/\/ps.w.org\/drbu-discount-rules-box-for-woocommerce\/assets\/screenshot-4.png?rev=3676404","caption":"1-Click Quick Language Presets for instant international store deployment."}],"raw_content":"<!--section=description-->\n<p>Discount Rules Box adds a tiered \"Buy Box\" to your WooCommerce product pages \u2014 customers pick a 1, 2, or 3-pack quantity, see the exact price and savings for each option before adding to cart, and the discount is applied automatically at checkout. No coupon codes, no manual cart math, no page builder required.<\/p>\n\n<p><strong>Free<\/strong> gives you a fully working 2-pack buy box (1 &amp; 2 pieces), automatic cart discounts, a live admin preview builder, all 4 pricing models, and every text\/display toggle \u2014 this is a complete tool, not a crippled trial.<\/p>\n\n<p><strong>Pro<\/strong> (30-day free trial, no credit card) adds a 3rd pack tier, a Sales Analytics dashboard, full Appearance customization, product\/category restrictions, and 1-Click language presets for 13+ languages.<\/p>\n\n<p><a href=\"https:\/\/discountrulesbox.com\/#demo\">View Demo<\/a> | <a href=\"https:\/\/discountrulesbox.com\/docs\/\">Documentation<\/a> | <a href=\"https:\/\/discountrulesbox.com\/#pricing\">PRO version<\/a> | <a href=\"https:\/\/discountrulesbox.com\/docs\/faq\/\">FAQ<\/a><\/p>\n\n<h4>What customers see on your store<\/h4>\n\n<ul>\n<li>A tiered Buy Box with 2 or 3 pack options, strikeout pricing, per-unit cost, savings highlights, and stock\/urgency badges.<\/li>\n<li>The discounted price on the cart and checkout, with the original price crossed out.<\/li>\n<li>A \"Most Popular\" \/ \"Best Value\" badge pointing shoppers to the pack you want them to pick.<\/li>\n<li>Free shipping badges, or a progress bar toward your free-shipping threshold.<\/li>\n<li>Footer trust badges (shipping time, guarantee, payment options) in your own words.<\/li>\n<\/ul>\n\n<h4>PRICING MODELS AND FEATURES WITH EXAMPLE SCENARIOS<\/h4>\n\n<p>Free version features<\/p>\n\n<ul>\n<li><strong>Discount on 2nd &amp; 3rd Item<\/strong> \u2014 only the additional items are discounted, so the value is obvious. Example: $18 item, 40% off the 2nd \u2192 1 piece $18, 2 pieces $28.80 ($14.40\/unit).<\/li>\n<li><strong>Discount on Entire Quantity<\/strong> \u2014 the same discount applies across every item in the pack. Example: 40% off both items in a 2-pack \u2192 $21.60 total ($10.80\/unit).<\/li>\n<li>Percentage or fixed-amount discount, set independently per tier.<\/li>\n<li>Live admin preview builder \u2014 every color, text, and badge change updates instantly before you save.<\/li>\n<li>Compatible with Block Checkout, Classic Checkout, and WooCommerce High-Performance Order Storage (HPOS).<\/li>\n<li><code>[drbu_tiered_buy_box]<\/code> shortcode for any page, or automatic replacement of the default \"Add to cart\" button.<\/li>\n<li>Manually edit every string (CTA buttons, badges, notes, shipping text) for full control over the copy.<\/li>\n<\/ul>\n\n<p>Get the <a href=\"https:\/\/discountrulesbox.com\/#pricing\">PRO version<\/a> for a 3rd tier, Sales Analytics, and Appearance customization.<\/p>\n\n<p>Pro features<\/p>\n\n<p>All Free features, plus:<\/p>\n\n<ul>\n<li><strong>3rd pack tier<\/strong> \u2014 add a \"Buy 3\" option with its own quantity and discount, e.g. 25% off the 3rd item on top of the 2nd-item discount.<\/li>\n<li><strong>Fixed Total Package Price<\/strong> \u2014 Example: sell a 3-pack for a flat $39.99, regardless of the per-unit price.<\/li>\n<li><strong>Fixed Price Per Unit<\/strong> \u2014 Example: price the 2-pack at exactly $14.40\/unit, whatever total that produces.<\/li>\n<li><strong>Sales Analytics dashboard<\/strong> \u2014 total upsell revenue, average-order-value lift, and sales share per tier, so you can see which pack is actually converting.<\/li>\n<li><strong>Appearance customization<\/strong> \u2014 brand colors, button\/card radius, and style presets, no CSS required.<\/li>\n<li><strong>Product &amp; category restrictions<\/strong> \u2014 run the buy box only on selected products or categories, e.g. Category A and Category B only, everything else untouched.<\/li>\n<li><strong>1-Click language presets<\/strong> \u2014 instantly fill every text, badge, and button field in 13+ languages; every field stays 100% editable afterward.<\/li>\n<\/ul>\n\n<h4>Buy Box examples using the 4 pricing models<\/h4>\n\n<p><strong>Discount on 2nd &amp; 3rd Item (Model A)<\/strong>\nThe default, most conversion-tested model \u2014 only the extra items get cheaper, so the savings are obvious at a glance.\n* 1 piece $18 \u00b7 2 pieces $28.80 (2nd item 40% off) \u00b7 3 pieces $42.30 (2nd item 40% off, 3rd item 25% off)<\/p>\n\n<p><strong>Discount on Entire Quantity (Model B)<\/strong>\nThe whole pack is discounted by the same percentage or fixed amount, item by item.\n* 2-pack at 40% off both items \u2192 $21.60 total instead of $36.00<\/p>\n\n<p><strong>Fixed Total Package Price (Model C, Pro)<\/strong>\nSet an exact total price for the whole pack, independent of the per-unit math.\n* \"3-pack for $39.99\" regardless of the base unit price<\/p>\n\n<p><strong>Fixed Price Per Unit (Model D, Pro)<\/strong>\nSet an exact per-unit price for a given tier.\n* 2-pack priced at $14.40\/unit \u2192 $28.80 total<\/p>\n\n<h4>Configurable display elements<\/h4>\n\n<p>Each of these can be toggled independently:\n* \"Most Popular\" \/ \"Best Value\" badge with custom text.\n* Stock and urgency labels (e.g. \"In stock\", \"Only 5 left\").\n* Free shipping badges or progress bars toward a free-shipping threshold.\n* Per-pack savings amount and per-unit price.\n* Footer trust badges (shipping time, guarantee, payment options \u2014 your own text).<\/p>\n\n<h4>Developer hooks<\/h4>\n\n<ul>\n<li>Filter <code>drbu_tier_total<\/code> \u2014 override tier price calculations.<\/li>\n<li>Filter <code>drbu_pack_discounts_enabled<\/code> \u2014 enable\/disable discounts based on custom conditions.<\/li>\n<li>Template override: copy <code>templates\/tiered-buy-box.php<\/code> to your theme at <code>woocommerce\/tiered-buy-box.php<\/code>.<\/li>\n<li>Frontend styles are scoped under <code>.drbu-buy<\/code>.<\/li>\n<\/ul>\n\n<h4>Need help?<\/h4>\n\n<p>Check the <a href=\"https:\/\/discountrulesbox.com\/docs\/\">documentation<\/a> first \u2014 it covers setup, every pricing model, and shortcodes with worked examples. Still stuck? Open a thread on the <a href=\"https:\/\/wordpress.org\/support\/plugin\/drbu-discount-rules-box-for-woocommerce\/\">support forum<\/a> and we'll help you get it running.<\/p>\n\n<p>Quick Links: <a href=\"https:\/\/discountrulesbox.com\/#pricing\">PRO version<\/a> | <a href=\"https:\/\/discountrulesbox.com\/docs\/\">Documentation<\/a> | <a href=\"https:\/\/wordpress.org\/support\/plugin\/drbu-discount-rules-box-for-woocommerce\/\">Support<\/a><\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin uses Freemius to manage licensing, the 30-day Pro trial, and Pro purchases.<\/p>\n\n<ul>\n<li>On every load of this plugin's own admin pages, the site URL, plugin version, and PHP\/WordPress version are sent to Freemius (<code>api.freemius.com<\/code>) to check license\/trial status. No data is sent on the site's public-facing pages.<\/li>\n<li>If you open the Pro pricing\/checkout screen, the checkout form itself (<code>checkout.freemius.com<\/code>) is loaded from Freemius, and any billing details you enter there are sent directly to Freemius to process the purchase \u2014 this plugin does not see or store payment details.<\/li>\n<li>Freemius Terms of Service: https:\/\/freemius.com\/terms\/<\/li>\n<li>Freemius Privacy Policy: https:\/\/freemius.com\/privacy\/<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Download the plugin ZIP file.<\/li>\n<li>In your WordPress admin, navigate to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Select the downloaded ZIP file and click <strong>Install Now<\/strong>.<\/li>\n<li>Activate the plugin. (WooCommerce must be installed and active).<\/li>\n<li>Navigate to <strong>Discount Rules Box<\/strong> in the admin menu to configure your tiers, colors, language presets, and display settings.<\/li>\n<li>Choose how the buy box appears \u2014 three options, pick any combination:\n\n<ul>\n<li><strong>Automatic, storewide<\/strong> \u2014 turn on \"Replace default Add to cart button &amp; price\" to swap the default price\/Add to cart on every simple product.<\/li>\n<li><strong>Automatic, specific products or categories only<\/strong> \u2014 leave storewide replacement off and list the product IDs or categories in <strong>Specific Product Restrictions<\/strong> (Pro); only those products get the buy box, everything else keeps the default WooCommerce price and Add to cart.<\/li>\n<li><strong>Manual placement anywhere<\/strong> \u2014 embed the <code>[drbu_tiered_buy_box]<\/code> shortcode on any page, post, or template (<code>[drbu_tiered_buy_box id=\"123\"]<\/code> to target a specific product), independent of the automatic settings above.<\/li>\n<\/ul><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20does%20discount%20rules%20box%20calculate%20discounts%3F\"><h3>How does Discount Rules Box calculate discounts?<\/h3><\/dt>\n<dd><p>Discounts are calculated dynamically based on your chosen pricing model (Percentage or Fixed amount per additional unit). When a customer selects a multi-pack, the discount is automatically applied to the cart line item.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20plugin%20on%20specific%20products%20only%3F\"><h3>Can I use the plugin on specific products only?<\/h3><\/dt>\n<dd><p>Yes. In <strong>Discount Rules Box \u2192 Specific Product Restrictions<\/strong>, search and select specific product IDs or categories (Pro feature). Leave it blank to apply to all simple products.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20block%20checkout%20and%20hpos%3F\"><h3>Does it work with Block Checkout and HPOS?<\/h3><\/dt>\n<dd><p>Yes! The plugin applies discounts natively to the WooCommerce Cart object (<code>WC_Cart<\/code>), making it fully compatible with Block Checkout, Classic Checkout, and WooCommerce High-Performance Order Storage (HPOS).<\/p><\/dd>\n<dt id=\"how%20do%20i%20hide%20the%20default%20woocommerce%20price%20on%20product%20pages%3F\"><h3>How do I hide the default WooCommerce price on product pages?<\/h3><\/dt>\n<dd><p>The <strong>\"Replace default Add to cart button &amp; price header\"<\/strong> option automatically removes both the standard add-to-cart form and old price header when the buy box is active.<\/p><\/dd>\n<dt id=\"can%20i%20translate%20all%20texts%20into%20my%20own%20language%3F\"><h3>Can I translate all texts into my own language?<\/h3><\/dt>\n<dd><p>Yes! You can use our <strong>1-Click Quick Language Presets<\/strong> in the settings dashboard or customize every string manually (CTA buttons, badge texts, stock labels, notes, shipping prefixes). A <code>.pot<\/code> translation file is also included in <code>\/languages\/<\/code>.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20shortcodes%3F\"><h3>Does it work with shortcodes?<\/h3><\/dt>\n<dd><p>Yes! You can place <code>[drbu_tiered_buy_box]<\/code> anywhere on your site. To specify a product, use <code>[drbu_tiered_buy_box id=\"123\"]<\/code>.<\/p><\/dd>\n<dt id=\"is%20the%20free%20version%20limited%3F\"><h3>Is the Free version limited?<\/h3><\/dt>\n<dd><p>No. The Free version is a fully working plugin for a 2-pack buy box (1 &amp; 2 pieces) with automatic cart discounts and full display\/text customization. Pro features are additive: a 3rd pack tier, the Analytics dashboard, Appearance customization, product\/category restrictions, and 1-click language presets.<\/p><\/dd>\n<dt id=\"how%20do%20i%20upgrade%20to%20pro%20or%20start%20the%20trial%3F\"><h3>How do I upgrade to Pro or start the trial?<\/h3><\/dt>\n<dd><p>From your admin, open <strong>Discount Rules Box \u2192 License<\/strong> and click <strong>Start 30-Day Free Trial<\/strong> (no credit card required), or open the <strong>Upgrade<\/strong> tab to buy a plan directly. The trial unlocks every Pro feature for 30 days. After the trial you can purchase a Pro license or continue using the Free version.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.9.49<\/h4>\n\n<ul>\n<li>Fixed: a tier's \"Quantity\" could be saved lower than or equal to the tier before it (e.g. Tier 2 set to 1, same as Tier 1) \u2014 since the pricing engine gates each discount purely on quantity thresholds, this silently priced that tier as if it were the lower quantity, so the discount never applied even though its label (\"2 pieces\") suggested it did. <code>sanitize()<\/code> now enforces a strictly increasing quantity across tiers and auto-corrects an invalid value, with an admin notice explaining the correction.<\/li>\n<li>Added: a \"View Live Site\" link in the settings header, next to the Free\/Pro status pill, opening the store's shop page in a new tab \u2014 lets you check a change on the real storefront right after saving, without leaving the settings screen.<\/li>\n<\/ul>\n\n<h4>2.9.48<\/h4>\n\n<ul>\n<li>Changed: the Freemius SDK's <code>slug<\/code> was updated from <code>discount-rules-box<\/code> to <code>drbu-discount-rules-box<\/code>, matching the product slug now set on the Freemius Dashboard \u2014 keeps the Free package's own folder name and Freemius's update mechanism aligned with the plugin's actual name\/slug going forward.<\/li>\n<\/ul>\n\n<h4>2.9.47<\/h4>\n\n<ul>\n<li>Added: <code>premium_slug<\/code> in the Freemius SDK config, so a Pro install lives in its own folder (<code>drbu-discount-rules-box-for-woocommerce-premium<\/code>) instead of sharing the Free version's folder name \u2014 prevents a folder collision if a site ever has both installed during an upgrade.<\/li>\n<li>Added: Freemius's <code>wp_org_gatekeeper<\/code> build-time marker, per Freemius's own integration instructions for the auto-generated Free ZIP (removed automatically from the Free package by Freemius's Deployment tool; has no effect on the GA\/Premium code).<\/li>\n<\/ul>\n\n<h4>2.9.46<\/h4>\n\n<ul>\n<li>Fixed: clicking \"Deactivate License\" on the License tab did nothing \u2014 it silently failed to detach the license from Freemius because it called a Freemius SDK method (<code>_delete_account()<\/code>) that doesn't actually exist. Now uses Freemius's own native deactivation flow directly, verified live to actually deactivate the license and revert the site to the Free plan.<\/li>\n<\/ul>\n\n<h4>2.9.45<\/h4>\n\n<ul>\n<li>Fixed: the DRBU Analytics page loaded with none of the plugin's own CSS\/JS (reported by the user as \"no styling\"). WordPress derives the admin <code>$hook_suffix<\/code> for a submenu page from its page <em>title<\/em> rather than its slug in some cases \u2014 for Analytics that produced <code>discount-rules-box_page_discount-rules-box-upsell-analytics<\/code>, which doesn't contain \"drbu\" anywhere, so the plugin's own check for \"is this one of my admin pages\" never matched. Fixed by also matching the Analytics page's own slug explicitly (now a shared <code>DRBU_Settings::ANALYTICS_SLUG<\/code> constant), in both the CSS\/JS enqueue check and the favicon check.<\/li>\n<\/ul>\n\n<h4>2.9.44<\/h4>\n\n<ul>\n<li>Fixed: Freemius's own Account\/Pricing admin pages, hidden from the sidebar menu via <code>remove_submenu_page()<\/code>, were completely inaccessible (\"Sorry, you are not allowed to access this page\") even to administrators \u2014 this broke the \"Manage Billing\"\/\"Open Customer Portal\" links on the plugin's own Account tab, and the redirect Freemius sends after a successful trial\/license activation. Switched to hiding those sidebar links with CSS instead, which keeps the pages themselves fully functional.<\/li>\n<li>Changed: after activating a license (via the \"Activate License\" dialog), the redirect now lands on the plugin's own settings page instead of Freemius's native Account page, since that's where this plugin's own Account\/Upgrade tabs already live.<\/li>\n<\/ul>\n\n<h4>2.9.43<\/h4>\n\n<ul>\n<li>Fixed: the Freemius webhook secret was still leaking, in a different spot than the one fixed in 2.9.38 \u2014 the full saved settings array (including the raw secret) was embedded as JSON in every plugin admin page's <code>&lt;script&gt;<\/code> tag for the live preview builder, regardless of which tab was open. The secret field is now stripped out of that JS data.<\/li>\n<\/ul>\n\n<h4>2.9.42<\/h4>\n\n<ul>\n<li>Fixed: the \"Activate License\" dialog got permanently stuck on \"Activating license...\" for a site that had never connected\/opted in to Freemius (the plugin's default, privacy-friendly starting state). The native dialog assumes the site is already registered; it now falls back to registering the site and activating the license together in one step when that isn't the case yet \u2014 verified live against a real Freemius trial license.<\/li>\n<\/ul>\n\n<h4>2.9.41<\/h4>\n\n<ul>\n<li>Fixed: <strong><code>is_premium<\/code> was hardcoded to <code>false<\/code><\/strong> in the Freemius SDK init call (<code>discount-rules-box-upsell.php<\/code>). This is a separate mechanism from the <code>__premium_only<\/code> file\/method stripping \u2014 Freemius's Deployment tool does not rewrite this literal automatically \u2014 so <code>Freemius::is_premium()<\/code>, and therefore <code>is__premium_only()<\/code> (which every <code>__premium_only<\/code>-gated feature in this plugin checks before rendering: 3rd tier, Appearance panel, restriction pickers, Sales Analytics), could never return <code>true<\/code>, for any user, including a real customer with a fully valid paid license. Changed to dynamically detect the running package by checking whether a <code>__premium_only<\/code> file physically exists on disk \u2014 <code>true<\/code> in the Premium package, <code>false<\/code> in the Free package, exactly mirroring how Freemius's own stripping already works.<\/li>\n<\/ul>\n\n<h4>2.9.40<\/h4>\n\n<ul>\n<li>Changed: <strong>every Pro plan on the Upgrade tab now always starts with the 30-day free trial<\/strong> instead of charging immediately. The \"Buy Now \u2014 $X\/yr\" buttons on the Single Site \/ 5 Sites \/ 10 Sites pricing cards previously opened Freemius Checkout with <code>trial: false<\/code> (instant purchase, no trial) \u2014 they're now \"Start 30-Day Free Trial\" buttons using the same trial-first checkout flow already used everywhere else in the plugin.<\/li>\n<\/ul>\n\n<h4>2.9.39<\/h4>\n\n<ul>\n<li>Changed: two Free-mode upgrade prompts still said the generic \"Upgrade to Pro\" with no mention of the 30-day free trial (the Plugins-list \"Start Free Trial\" row action link, and the 1-Click Quick Language Presets CTA\/tooltip) \u2014 verified after the full <code>__premium_only<\/code> refactor that every other Pro-gated feature already correctly nudges toward \"Start Free Trial\", and brought these two in line for consistency.<\/li>\n<li>Changed: added a \ud83d\udd12 lock icon to the Sales Analytics upsell panel's heading, matching the lock-icon convention used on every other Pro-gated feature's Free-mode messaging.<\/li>\n<\/ul>\n\n<h4>2.9.38<\/h4>\n\n<ul>\n<li>Fixed: <strong>critical pricing bug<\/strong> \u2014 Pricing Model C (\"Fixed Package Price\") charged the same fixed total no matter how many units a customer set on the WooCommerce Cart page's quantity field (e.g. editing a \"3-pack, $39.99\" line to quantity 300 still charged $39.99 total). The fixed price now scales proportionally with the actual cart quantity, matching how Models B\/D already behave.<\/li>\n<li>Fixed: stored XSS in the admin product-restriction picker \u2014 a product title containing HTML\/script tags (settable by any user who can edit products) executed when an admin searched for it while adding product restrictions. Product names are now HTML-escaped before being inserted into the picker.<\/li>\n<li>Fixed: the Freemius webhook secret (License tab) was echoed into the page's HTML source in full, readable via view-source by any Shop Manager despite being a masked password field. The field is now always rendered blank; leaving it blank on save keeps the existing stored value.<\/li>\n<li>Fixed: the cart's \"you saved $X\" text could show a bigger discount than what was actually charged if a Pro license\/trial expired while an item was already in the cart. It's now clamped the same way the actual charged price already was.<\/li>\n<li>Fixed: \"Deactivate License\" required <code>manage_options<\/code> while the rest of the License tab only requires <code>manage_woocommerce<\/code>, so a Shop Manager's click silently did nothing.<\/li>\n<li>Fixed: the plugin's own <code>Version:<\/code> header and <code>DRBU_VERSION<\/code> constant had fallen behind this readme's Stable tag\/changelog since 2.9.36 (only the built ZIP's copy was ever version-stamped, not the tracked source file).<\/li>\n<li>Fixed: uninstalling no longer leaves the <code>drbu_license_last_sync<\/code> option orphaned in the database.<\/li>\n<li>Added: <code>build.sh<\/code> now also produces an unpacked, ready-to-inspect copy of the release (<code>release\/drbu-discount-rules-box-for-woocommerce\/<\/code>) alongside the ZIP.<\/li>\n<\/ul>\n\n<h4>2.9.37<\/h4>\n\n<ul>\n<li>Fixed: two more non-standard file types were still shipping in the built ZIP after the prior review pass \u2014 39 Sass <code>.scss<\/code> source files under the bundled Freemius SDK's <code>assets\/scss\/<\/code> folder (the compiled <code>.css<\/code> the SDK actually loads already ships separately) and a root-level <code>keyword.csv<\/code> working file. Both excluded from <code>build.sh<\/code>.<\/li>\n<li>Fixed: the Sales Analytics dashboard's full rendering (KPI cards, tier breakdown, top-products table, recent-orders table) was still present in the Free-shipped <code>class-drbu-settings.php<\/code>, gated only by a runtime license check \u2014 same \"Pro code physically present, merely disabled\" pattern already fixed elsewhere in 2.9.36. Extracted into <code>render_analytics_page__premium_only()<\/code>, physically stripped from the Free ZIP by Freemius's deployment pipeline; Free users still see only the existing \"Analytics is a Pro Feature\" upsell panel.<\/li>\n<\/ul>\n\n<h4>2.9.36<\/h4>\n\n<ul>\n<li>Fixed: readme.txt \"Tested up to\" was still 6.7; updated to the current WordPress stable release (7.1), per a WordPress.org plugin review.<\/li>\n<li>Fixed: the bundled Freemius SDK's dev-only <code>patches\/<\/code> folder (a Composer patch file, not needed at runtime) was shipping inside the built ZIP; excluded from <code>build.sh<\/code>.<\/li>\n<li>Changed: the buy box shortcode is now registered only under the prefixed tag <code>[drbu_tiered_buy_box]<\/code>, per WordPress.org's unique-naming guideline. The previous generic tags (<code>[tiered_buy_box]<\/code>, <code>[order_now_5]<\/code>, <code>[poruci_odmah_5]<\/code>, <code>[poruci_odmah_4]<\/code>) were removed \u2014 the plugin has no published users yet, so no back-compat aliasing was needed.<\/li>\n<li>Fixed: several Pro-only features (3rd buy-box tier row, Appearance color\/preset panel, product &amp; category restriction pickers, and their AJAX product-search backend) had their full working markup\/logic present in the free-shipped PHP files, merely disabled\/hidden at runtime \u2014 flagged by WordPress.org as not permitted for a hosted Free listing. Moved into <code>__premium_only<\/code>-suffixed methods (the real Freemius SDK convention, <code>freemius()-&gt;is__premium_only()<\/code>), which the Freemius deployment pipeline physically strips from the Free ZIP.<\/li>\n<\/ul>\n\n<h4>2.9.35<\/h4>\n\n<ul>\n<li>Fixed: Freemius's own \"Account\" and \"Upgrade\" sidebar submenu items (redundant with the Account\/Upgrade tabs on the main Discount Rules Box page) were reappearing in the WordPress admin menu. The code that hides them ran on <code>admin_menu<\/code> priority 999 \u2014 far earlier than Freemius's own priority (999999999) for registering them \u2014 so the removal silently had nothing to remove yet. Now runs after Freemius registers its menu items.<\/li>\n<\/ul>\n\n<h4>2.9.34<\/h4>\n\n<ul>\n<li>Changed: Split the \"Pro\" tab into two dedicated tabs \u2014 <strong>Account<\/strong> (email, plan, billing\/payment method, invoices \u2014 via Freemius) and <strong>Upgrade<\/strong> (the same Single\/5-Site\/10-Site pricing cards, prices, and guarantee badges shown on discountrulesbox.com). The License tab keeps license key activation\/deactivation\/sync only. All three now share consistent styling with the marketing site.<\/li>\n<\/ul>\n\n<h4>2.9.33<\/h4>\n\n<ul>\n<li>Changed: Renamed to \"DRBU Discount Rules Box for WooCommerce\" (from \"Discount Box \u2013 Quantity Discounts for WooCommerce\"), slug drbu-discount-rules-box-for-woocommerce \u2014 keeps \"Discount Rules\" in the name for search findability, while placing the distinctive \"DRBU\" prefix at the start and \"WooCommerce\" at the end (the safe pattern WordPress.org's own guidance recommends) to reduce similarity to the existing \"Discount Rules for WooCommerce\" plugin.<\/li>\n<\/ul>\n\n<h4>2.9.32<\/h4>\n\n<ul>\n<li>Changed: Replaced remaining \"Discount Rules Box\" mentions across the admin UI (menu labels, notices, header text) with the new \"Discount Box\" name for full consistency.<\/li>\n<li>Fixed: readme.txt's \"Tested up to\" WordPress version.<\/li>\n<\/ul>\n\n<h4>2.9.31<\/h4>\n\n<ul>\n<li>Changed: Renamed to \"Discount Box \u2013 Quantity Discounts for WooCommerce\" (from \"Discount Rules Box \u2013 Quantity Breaks &amp; Upsell for WooCommerce\") and new slug, per a WordPress.org naming-guideline review.<\/li>\n<li>Changed: Pro-only code (Analytics dashboard, the 3rd buy-box tier, 1-Click language presets) is now split out using Freemius's <code>__premium_only<\/code> convention instead of being shipped everywhere and hidden behind a runtime check \u2014 required by WordPress.org's guideline that no disabled\/locked code may exist in the hosted Free version.<\/li>\n<li>Fixed: The full 1-Click language preset dataset previously shipped unlocked in the shared admin JS, with only a client-side <code>disabled<\/code> attribute standing between a Free install and using it. It's now served from the backend only when a Pro license is active.<\/li>\n<li>Removed: The \"Category &amp; Shop Quick Modal\" feature, which never had a working server-side handler for either Free or Pro.<\/li>\n<li>Fixed: The admin menu icon's sizing CSS is now enqueued via <code>wp_add_inline_style()<\/code> instead of being echoed as a raw <code>&lt;style&gt;<\/code> tag.<\/li>\n<li>Changed: Rewrote the readme description and added an External Services section documenting Freemius.<\/li>\n<\/ul>\n\n<h4>2.9.30<\/h4>\n\n<ul>\n<li>Fixed: The Freemius webhook endpoint (License tab \u2192 Webhook secret) never actually worked \u2014 it checked for a signature header Freemius doesn't send and documented the wrong kind of secret. Now reads the correct <code>X-Signature<\/code> header and the field is documented as your product's own Secret Key (Freemius Dashboard \u2192 your product \u2192 Settings), matching Freemius's own reference implementation.<\/li>\n<li>Fixed: The webhook's event allow-list contained four event names that don't exist in the Freemius API (silently never matching anything since it was written) and was missing several real, relevant ones \u2014 including <code>license.deleted<\/code>, which is what happens when a license is removed from the Freemius Dashboard. The list now matches Freemius's real event catalog.<\/li>\n<li>Changed: A supported webhook event now immediately forces a real Freemius license\/plan sync for this site (previously it only refreshed a local, mostly-inert cache), so a change made on the Freemius Dashboard (cancel, delete, downgrade a license, etc.) is reflected here right away instead of waiting for the next automatic sync or a lucky page load.<\/li>\n<li>Added: A \"\ud83d\udd04 Sync License Now\" button on the License tab that forces the same real sync on demand.<\/li>\n<li>Fixed: The AJAX handler behind the post-checkout sync (and the new button) now performs a real Freemius sync itself, instead of relying only on a separate JS-side fetch happening first.<\/li>\n<\/ul>\n\n<h4>2.9.29<\/h4>\n\n<ul>\n<li>Added: After starting a Pro trial through the Freemius Checkout overlay, the admin page now shows a persistent notice confirming whether the license was activated automatically, or \u2014 if not \u2014 pointing you to check your email for the license key and paste it on the License tab. Previously this feedback was lost in the automatic page reload that follows checkout.<\/li>\n<li>Changed: Disabled Freemius's own \"sticky\" trial promotion notice (the plugin already shows a persistent \"Start 30-Day Free Pro Trial\" button in its own header on every page).<\/li>\n<li>Removed: The plugin's own dismissible \"Unlock Pro\" admin notice, since it duplicated the same call-to-action already shown in the page header.<\/li>\n<li>Fixed: Added <code>wp-header-end<\/code> markers after the dashboard and Analytics page headers so WordPress positions any remaining admin notices below the header instead of injecting them in the middle of it.<\/li>\n<\/ul>\n\n<h4>2.9.28<\/h4>\n\n<ul>\n<li>Fixed: Escaped a currency-formatted value in the Analytics dashboard's Ad ROI insights banner that was output without escaping (WordPress Plugin Check error).<\/li>\n<li>Fixed: The order lookup behind the Analytics dashboard now uses a <code>meta_query<\/code> instead of raw <code>meta_key<\/code>\/<code>meta_value<\/code> query args, resolving the \"possible slow query\" notices from WordPress Plugin Check.<\/li>\n<li>Fixed: Documented the deliberate <code>null<\/code> version on the externally-hosted Freemius checkout script so WordPress Plugin Check no longer flags it as a missing resource version.<\/li>\n<\/ul>\n\n<h4>2.9.26<\/h4>\n\n<ul>\n<li>Changed: Upgrade page's 5-Sites and 10-Sites plan cards now show a monthly-equivalent per-store price hint \u2014 \"\u26a1 Only $1.58\/mo per store ($19\/yr)\" and \"\ud83d\udd25 Only $1.03\/mo per store ($12.40\/yr)\".<\/li>\n<\/ul>\n\n<h4>2.9.25<\/h4>\n\n<ul>\n<li>Changed: On the Account page, the \"Disconnect \u2022 Sync\" action links (previously plain text) are now styled as proper pill buttons, with Disconnect\/Deactivate License highlighted in red as destructive actions. The \"Plan: PRO Trial Expires in 4 weeks Upgrade\" row is now visually highlighted (background, left accent border, bigger badge and Upgrade button) instead of blending into the rest of the table.<\/li>\n<\/ul>\n\n<h4>2.9.24<\/h4>\n\n<ul>\n<li>Changed: Removed the \"$83 You save $14\" \/ \"$119 You save $24\" \/ \"$155 You save $31\" strikethrough pricing hints from the Upgrade page's plan cards \u2014 since there are no monthly plans the annual price is discounted against, that line implied a discount that doesn't exist.<\/li>\n<\/ul>\n\n<h4>2.9.23<\/h4>\n\n<ul>\n<li>Fixed: The License tab always showed \"0 \/ N sites\" under Activations even when the license was actively in use on the site. It was reading <code>Freemius::get_sites()<\/code>, which is an unrelated WordPress multisite helper (returns network subsites, always empty on a normal single-site install) \u2014 not the license's actual activation count. Now reads the real <code>activated<\/code> count from the license object.<\/li>\n<\/ul>\n\n<h4>2.9.22<\/h4>\n\n<ul>\n<li>Added: The Upgrade page's Freemius pricing cards no longer show \"No Support\" \u2014 a JS patch now replaces it with \"Includes 30-Day Free Trial\", adds the same feature bullets, tagline, \"Most Popular\" badge, and \"was $X \/ you save $Y\" pricing shown on the discountrulesbox.com landing page, without requiring Freemius Dashboard changes.<\/li>\n<\/ul>\n\n<h4>2.9.21<\/h4>\n\n<ul>\n<li>Changed: Extended the brand font (Outfit) to the DRBU Analytics headings and KPI\/stat numbers (revenue, tier adoption, etc.) for full typographic consistency with the rest of the redesigned admin UI.<\/li>\n<\/ul>\n\n<h4>2.9.20<\/h4>\n\n<ul>\n<li>Changed: Admin UI now matches the discountrulesbox.com landing page design \u2014 self-hosted Outfit\/Geist brand fonts (replacing the plain system font stack), the same Emerald Green accent color for savings\/trust indicators, and matching trust badges (14-Day Money-Back Guarantee, 30-Day Free Trial, Cancel Anytime) on the License, Pro, and Upgrade tabs.<\/li>\n<li>Added: \"Test Pro Free for 30 Days\" banner on the Upgrade page, matching the landing page's pricing section copy.<\/li>\n<\/ul>\n\n<h4>2.9.19<\/h4>\n\n<ul>\n<li>Fixed: The License tab showed \"Lifetime \/ n\/a\" as the Expiration for an active Pro Trial instead of the real trial end date. Trial expiration is tracked separately from a regular license's expiration date; the License tab now checks the correct source for trials.<\/li>\n<\/ul>\n\n<h4>2.9.18<\/h4>\n\n<ul>\n<li>Fixed: The top-level menu icon was still oversized after the 2.9.17 fix. Added an explicit CSS rule (loaded on every admin page) that forces the standard 20x20px sizing regardless of what else might be overriding it.<\/li>\n<\/ul>\n\n<h4>2.9.17<\/h4>\n\n<ul>\n<li>Fixed: The top-level \"Discount Rules Box\" menu icon was oversized. It now uses WordPress's recommended base64 SVG data-URI format, which forces the standard 20x20px sizing used by every other admin menu icon.<\/li>\n<\/ul>\n\n<h4>2.9.16<\/h4>\n\n<ul>\n<li>Changed: Removed the \"Settings\" menu item (Account\/Upgrade are still reachable from the License tab). The top-level \"Discount Rules Box\" menu now has 2 items: Discount Rules Box and DRBU Analytics.<\/li>\n<li>Added: Custom menu icon for the top-level \"Discount Rules Box\" admin menu.<\/li>\n<\/ul>\n\n<h4>2.9.15<\/h4>\n\n<ul>\n<li>Changed: \"Discount Rules Box\" is now its own top-level admin menu tool instead of a submenu under WooCommerce, with 3 items: Discount Rules Box, DRBU Analytics, and Settings (Account &amp; Upgrade).<\/li>\n<li>Improved: Removed redundant \"Discount Rules Box\" text next to the logo on the dashboard, Account, and Upgrade pages, and hidden the Upgrade page's duplicate logo\/title block.<\/li>\n<\/ul>\n\n<h4>2.9.14<\/h4>\n\n<ul>\n<li>Fixed: The \"Have a License Key?\" button on the License tab could fail with \"Invalid license key.\" even with a genuinely valid key, while activating the exact same key via Plugins \u2192 Discount Rules Box \u2192 Manage License always worked. The button now opens that same, proven-reliable Freemius activation dialog directly instead of using a separate implementation.<\/li>\n<li>Added: The plugin's logo now appears on the Discount Rules Box dashboard, DRBU Analytics, Account, and Upgrade pages for consistent branding.<\/li>\n<\/ul>\n\n<h4>2.9.13<\/h4>\n\n<ul>\n<li>Added: The Freemius Account and Upgrade\/Pricing pages now match the plugin's own visual design (same brand color, rounded buttons, card styling) instead of looking like generic WordPress admin pages.<\/li>\n<\/ul>\n\n<h4>2.9.12<\/h4>\n\n<ul>\n<li>Fixed: The License tab always showed \"1970-01-01\" as the Expiration date regardless of the actual license expiration, because the date was parsed as a raw Unix timestamp instead of the date string Freemius actually returns.<\/li>\n<li>Improved: The \"Have a License Key?\" Activate button no longer shows a misleading \"Invalid license key.\" message when activation fails for an unrelated reason \u2014 it now shows Freemius's actual error message when available, and otherwise an honest message pointing to the Plugins \u2192 Manage License page as a working alternative.<\/li>\n<\/ul>\n\n<h4>2.9.11<\/h4>\n\n<ul>\n<li>Fixed: The Upgrade\/Pricing widget showed annual plans broken down as a monthly-equivalent price (\"$5.75\/mo, billed annually\"). Since this plugin doesn't offer a monthly plan, the widget now shows the actual annual price directly.<\/li>\n<\/ul>\n\n<h4>2.9.10<\/h4>\n\n<ul>\n<li>Fixed: The \"Have a License Key?\" Activate button always failed with \"Activation request failed. Please try again.\", regardless of the license key entered. The AJAX request was missing a <code>module_id<\/code> field that the Freemius SDK requires internally to register its license-activation handler \u2014 without it, the server silently never registered the handler and WordPress returned an empty error response. The request now includes <code>module_id<\/code>, so activation reaches Freemius correctly.<\/li>\n<\/ul>\n\n<h4>2.9.9<\/h4>\n\n<ul>\n<li>No functional changes \u2014 rebuild of 2.9.8 for live licensing verification testing.<\/li>\n<\/ul>\n\n<h4>2.9.8<\/h4>\n\n<ul>\n<li>Fixed: The Freemius <code>public_key<\/code> hardcoded in the plugin (<code>pk_dfe22e467625e3754b0f91553f0f6<\/code>) did not match the current key shown in the Freemius Developer Dashboard's integration snippet (<code>pk_1ed69d2634756f08c2a7bf2187d37<\/code>), so every signed request to the Freemius API (pricing widget, license sync, trial activation) was rejected with \"Invalid Authorization header\" \u2014 trials\/purchases never unlocked Pro, and the in-dashboard pricing widget stayed stuck loading. Corrected in all three places it was hardcoded.<\/li>\n<\/ul>\n\n<h4>2.9.7<\/h4>\n\n<ul>\n<li>No functional changes \u2014 rebuild of 2.9.6 for live licensing verification testing.<\/li>\n<\/ul>\n\n<h4>2.9.6<\/h4>\n\n<ul>\n<li>Fixed: The 2.9.5 trial\/purchase sync fix called a Freemius SDK method that doesn't actually exist, so it silently did nothing \u2014 the dashboard could stay on \"Free\" after a real trial\/purchase despite the \"Last sync\" time updating. Now uses Freemius's actual public sync endpoint, so trial\/purchase status reflects immediately after checkout.<\/li>\n<\/ul>\n\n<h4>2.9.5<\/h4>\n\n<ul>\n<li>Security: Removed a local \"sk_\" text-match fallback that let anyone unlock Pro by typing any string into the License Key field, with no real Freemius validation \u2014 manual key entry now activates exclusively through Freemius's own server-verified AJAX endpoint.<\/li>\n<li>Security: Free-plan restrictions could previously be skipped on Save by leaving any text in the License Key field; enforcement now depends solely on the live Freemius license status.<\/li>\n<li>Security: The 3-pack (Pro) pricing tier and its discount values are no longer trusted from URL\/session data \u2014 the cart layer re-checks the live license on every add-to-cart and totals calculation, so a stale or expired license can no longer be used to apply Pro pricing.<\/li>\n<li>Fixed: Several Freemius lifecycle hook names (license activation\/deactivation, account connection) never matched the SDK's actual hook names, so related cache refreshes and admin notices silently never fired; corrected to use the SDK's real <code>after_license_change<\/code> \/ <code>after_account_connection<\/code> hooks.<\/li>\n<li>Fixed: Starting a trial or purchase from the in-dashboard checkout overlay now syncs with Freemius immediately, instead of requiring a manual license key entry to unlock Pro features.<\/li>\n<\/ul>\n\n<h4>2.9.4<\/h4>\n\n<ul>\n<li>Improved: Enabled Freemius anonymous mode bypassing intrusive opt-in screens upon activation, ensuring immediate 1-click access to settings on all servers.<\/li>\n<\/ul>\n\n<h4>2.9.3<\/h4>\n\n<ul>\n<li>Fix: Replaced external account redirection links for Deactivate License with built-in admin action handler, instantly clearing license keys and restoring Free status without permission errors.<\/li>\n<\/ul>\n\n<h4>2.9.2<\/h4>\n\n<ul>\n<li>Fix: Kept Freemius account page registered in WP admin page registry while hiding sidebar submenus, resolving \"Sorry, you are not allowed to access this page\" permission error on Manage Account click.<\/li>\n<\/ul>\n\n<h4>2.9.1<\/h4>\n\n<ul>\n<li>Improved: Updated License Key Management controls allowing instant key clearing and deactivation, with dynamic Pro Trial (30 Days) title formatting.<\/li>\n<\/ul>\n\n<h4>2.9.0<\/h4>\n\n<ul>\n<li>Feature: Added user-friendly License Key instructions banner in License tab explaining email license key activation fallback (<code>sk_...<\/code>) and hosting firewall whitelisting for <code>api.freemius.com<\/code>.<\/li>\n<\/ul>\n\n<h4>2.8.9<\/h4>\n\n<ul>\n<li>Cleaned: Removed redundant Account and Upgrade submenus from WordPress admin sidebar for a streamlined WooCommerce admin menu structure.<\/li>\n<\/ul>\n\n<h4>2.8.8<\/h4>\n\n<ul>\n<li>Feature: Added direct License Key activation field (<code>sk_...<\/code>) in License settings tab enabling instant 1-click Pro &amp; trial activation.<\/li>\n<\/ul>\n\n<h4>2.8.7<\/h4>\n\n<ul>\n<li>Improved: Enhanced trial button detection and explicit CSS class binding (<code>drbu-open-trial<\/code>) ensuring 30-day trial CTA opens 0-cost free trial modal without prompting for credit card details.<\/li>\n<\/ul>\n\n<h4>2.8.6<\/h4>\n\n<ul>\n<li>Feature: Integrated direct Freemius FS.Checkout JavaScript overlay for product 37209 and plan 61804 enabling instant in-page trial activation and checkout popups.<\/li>\n<\/ul>\n\n<h4>2.8.5<\/h4>\n\n<ul>\n<li>Critical Fix: Updated Freemius SDK Public Key to matching product key (<code>pk_dfe22e467625e3754b0f91553f0f6<\/code>) resolving pricing API authentication rejection.<\/li>\n<\/ul>\n\n<h4>2.8.4<\/h4>\n\n<ul>\n<li>Fixed: Configured Freemius SDK menu parent slug mapping to WooCommerce (<code>woocommerce<\/code>) so pricing, trial, and checkout pages load natively in WordPress Admin.<\/li>\n<li>Fixed: Removed target=\"_blank\" attributes on internal upgrade and trial CTA links for seamless in-page admin checkout execution.<\/li>\n<\/ul>\n\n<h4>2.8.3<\/h4>\n\n<ul>\n<li>Removed: Category &amp; Shop pages upsell popup feature removed for streamlining and polish in upcoming major release.<\/li>\n<li>Improved: Unified single product display toggles into single clean \"Replace default Add to cart button &amp; price header\" option.<\/li>\n<li>Cleaned: Removed developer webhook settings block from License tab for a streamlined merchant UI.<\/li>\n<\/ul>\n\n<h4>2.8.2<\/h4>\n\n<ul>\n<li>Fixed: Resolved admin JavaScript syntax error in language presets handler that blocked tab navigation and live preview rendering.<\/li>\n<li>Fixed: Made tab switching handler global and resilient across all admin tabs.<\/li>\n<li>Improved: Synchronized full and minified admin CSS\/JS assets for seamless production deployment.<\/li>\n<\/ul>\n\n<h4>2.8.1<\/h4>\n\n<ul>\n<li>Improved: Updated Freemius SDK integration to version 2.13.4 with single-codebase in-place upgrade and after_uninstall hook support.<\/li>\n<li>Removed: Standalone <code>uninstall.php<\/code> file in accordance with Freemius release requirements.<\/li>\n<\/ul>\n\n<h4>2.8.0<\/h4>\n\n<ul>\n<li>Added: Freemius licensing integration. Free version keeps the complete 2-pack buy box; Pro (30-day free trial) unlocks the 3-pack buy box, Sales Analytics Dashboard, Category &amp; Shop Quick Modal, Appearance customization, and 1-Click Quick Language Presets.<\/li>\n<li>Added: New \"Pro\" tab in settings with feature overview, trial CTA, and license management.<\/li>\n<li>Added: Dismissible admin notice promoting the 30-day free Pro trial.<\/li>\n<li>Technical: <code>DRBU_License<\/code> now wraps the Freemius SDK (<code>can_use_premium_code()<\/code>) with a graceful fallback when the SDK is absent; Pro gating is centralized in <code>DRBU_Settings<\/code> (<code>pro_free_values()<\/code>).<\/li>\n<\/ul>\n\n<h4>2.6.1<\/h4>\n\n<ul>\n<li>Refined: Cleaned up \"Most Popular\" \/ \"Best Value\" badge text defaults and language preset strings across all 13 supported languages.<\/li>\n<li>Improved: Harmonized discount rounding calculations so <code>unit_price \u00d7 quantity<\/code> matches total price down to the exact sub-currency unit for fiscal compliance.<\/li>\n<li>Fixed: Preserved exact formatting in admin preview builder when switching quick language presets.<\/li>\n<\/ul>\n\n<h4>2.6.0<\/h4>\n\n<ul>\n<li>Added: Integrated Analytics Dashboard tracking AOV improvement, tier distribution (Pack 1, Pack 2, Pack 3, Pack 3+), and total added upsell revenue.<\/li>\n<li>Added: Category &amp; Archive Add-to-Cart Quick Modal popup to capture upsells before checkout.<\/li>\n<li>Added: Live Interactive Admin Preview Builder for instant real-time visual editing of colors, texts, and layout options.<\/li>\n<li>Added: 1-Click Quick Language Presets for 13 global languages.<\/li>\n<\/ul>\n\n<h4>2.4.2<\/h4>\n\n<ul>\n<li>Simplified: Step 1 (Packaging \/ Tiers) table consolidated for maximum admin clarity.<\/li>\n<li>Centralized: All text editing (Package Titles, Subtitles\/Notes, CTA Buttons, Badges) unified in Step 4 (Texts &amp; Badges).<\/li>\n<\/ul>\n\n<h4>2.4.1<\/h4>\n\n<ul>\n<li>Added: Direct HEX color code input fields (<code>#HEX<\/code>) with uppercase formatting and auto-prefix <code>#<\/code> handling in Step 3 Appearance settings.<\/li>\n<li>Added: Synchronized visual color picker swatches with live HEX input fields.<\/li>\n<li>Added: Legacy shortcode aliases <code>[poruci_odmah_5]<\/code> and <code>[poruci_odmah_4]<\/code>.<\/li>\n<\/ul>\n\n<h4>2.0.5<\/h4>\n\n<ul>\n<li>Added: Choice between 2 or 3 packaging tiers (\"Packaging (tiers)\" section).<\/li>\n<li>Added: Display toggles for free shipping, footer badges, savings, \"Best Value\" badge, per-unit price, and strikeout price.<\/li>\n<\/ul>\n\n<h4>2.0.4<\/h4>\n\n<ul>\n<li>Updated: Converted all plugin admin strings, default texts, and notices to English for WordPress.org repository compliance.<\/li>\n<li>Updated: Regenerated <code>.pot<\/code> catalog.<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li>Added: Appearance color pickers (Primary color, CTA text color, Best Value badge color, Card background).<\/li>\n<li>Added: \"Hide default product price\" option for Block and Classic themes.<\/li>\n<li>Added: Comprehensive mobile responsiveness (\u2264600px and \u2264480px breakpoints).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release on WordPress.org \/ WooCommerce ecosystem.<\/li>\n<\/ul>","raw_excerpt":"Quantity-break discounts for WooCommerce: automatic tiered &quot;Buy Box&quot; pricing with a live admin preview builder.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/356170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=356170"}],"author":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/predragvujnovic88"}],"wp:attachment":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=356170"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=356170"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=356170"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=356170"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=356170"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=356170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}