{"id":255590,"date":"2025-10-22T09:59:27","date_gmt":"2025-10-22T09:59:27","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/wholesale-tiered-pricing-for-woocommerce\/"},"modified":"2026-03-25T04:20:20","modified_gmt":"2026-03-25T04:20:20","slug":"wholesale-tiered-pricing-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/wholesale-tiered-pricing-for-woocommerce\/","author":22036533,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.1","stable_tag":"1.2.2","tested":"6.8.5","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Wholesale & Tiered Pricing for WooCommerce","header_author":"WPulse","header_description":"Set role-based prices and quantity rules in WooCommerce. Show tiered pricing tables for wholesale, B2B, and bulk discounts.","assets_banners_color":"f7f6fb","last_updated":"2026-03-25 04:20:20","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/wpulse\/","rating":5,"author_block_rating":0,"active_installs":100,"downloads":1108,"num_ratings":4,"support_threads":3,"support_threads_resolved":3,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"wpulse","date":"2025-10-22 09:59:02"},"1.0.1":{"tag":"1.0.1","author":"wpulse","date":"2025-10-22 10:29:34"},"1.0.2":{"tag":"1.0.2","author":"wpulse","date":"2025-10-24 09:01:54"},"1.0.3":{"tag":"1.0.3","author":"wpulse","date":"2025-11-01 05:22:57"},"1.0.4":{"tag":"1.0.4","author":"wpulse","date":"2026-01-23 08:30:50"},"1.0.5":{"tag":"1.0.5","author":"wpulse","date":"2025-11-21 08:18:01"},"1.0.6":{"tag":"1.0.6","author":"wpulse","date":"2026-01-23 08:42:56"},"1.0.7":{"tag":"1.0.7","author":"wpulse","date":"2026-01-24 09:06:02"},"1.0.8":{"tag":"1.0.8","author":"wpulse","date":"2026-01-24 09:06:02"},"1.1.0":{"tag":"1.1.0","author":"wpulse","date":"2026-02-10 16:04:54"},"1.1.1":{"tag":"1.1.1","author":"wpulse","date":"2026-03-25 05:19:48"},"1.2.0":{"tag":"1.2.0","author":"wpulse","date":"2026-03-25 05:19:48"},"1.2.1":{"tag":"1.2.1","author":"wpulse","date":"2026-03-25 05:19:48"},"1.2.2":{"tag":"1.2.2","author":"wpulse","date":"2026-03-25 04:23:30"}},"upgrade_notice":{"1.2.1":"<p>UI overhaul of the Wholesale Reports admin page and all frontend pricing templates (volume pricing card, pricing table, radio tier selector). Quantity field now pre-selects the first tier on page load.<\/p>","1.2.0":"<p>Adds Scheduled \/ Flash Pricing \u2014 set start and end dates on any pricing rule. Also fixes expired rules being applied to prices, tables, and cart validation, and fixes discount messages on variable products.<\/p>","1.1.1":"<p>Critical security and stability release. Fixes unauthenticated access to pricing rule AJAX handlers, a JSON corruption bug that silently broke all pricing rules on save, and a fatal error on variable product pages. Upgrade immediately.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":4},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3382489,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3382489,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3391888,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3391888,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.0.8","1.1.0","1.1.1","1.2.0","1.2.1","1.2.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3484162,"resolution":"1","location":"assets","locale":""},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3490518,"resolution":"10","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3484162,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3484162,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3484162,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3382489,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3382489,"resolution":"6","location":"assets","locale":""},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3382489,"resolution":"7","location":"assets","locale":""},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3382489,"resolution":"8","location":"assets","locale":""},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3382489,"resolution":"9","location":"assets","locale":""}},"screenshots":{"1":"Role-based and tiered pricing rules setup in the product editor.","2":"Tiered pricing table (Table template) displayed on the product page.","3":"Live savings calculator widget on the product page.","4":"Quantity restriction messages on the product page and in the cart.","5":"Template Options \u2014 choose template, position, columns, and color.","6":"Global pricing rules panel (multi-role selector with scheduled dates).","7":"Options table template for pricing display.","8":"Minimal table template for pricing display.","9":"Compact list template for pricing display.","10":"Wholesale Reports page inside WooCommerce."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[10553,65683,139401,166977,65073],"plugin_category":[45],"plugin_contributors":[238982,227074,230051],"plugin_business_model":[],"class_list":["post-255590","plugin","type-plugin","status-publish","hentry","plugin_tags-b2b","plugin_tags-bulk-discount","plugin_tags-role-based-pricing","plugin_tags-tiered-pricing","plugin_tags-wholesale-pricing","plugin_category-ecommerce","plugin_contributors-chadni54","plugin_contributors-dasnitesh780","plugin_contributors-wpulse","plugin_committers-dasnitesh780","plugin_committers-wpulse","plugin_support_reps-dasnitesh780","plugin_support_reps-wpulse"],"banners":{"banner":"https:\/\/ps.w.org\/wholesale-tiered-pricing-for-woocommerce\/assets\/banner-772x250.png?rev=3391888","banner_2x":"https:\/\/ps.w.org\/wholesale-tiered-pricing-for-woocommerce\/assets\/banner-1544x500.png?rev=3391888","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wholesale-tiered-pricing-for-woocommerce\/assets\/icon-128x128.png?rev=3382489","icon_2x":"https:\/\/ps.w.org\/wholesale-tiered-pricing-for-woocommerce\/assets\/icon-256x256.png?rev=3382489","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/wholesale-tiered-pricing-for-woocommerce\/assets\/screenshot-1.png?rev=3484162","caption":"Role-based and tiered pricing rules setup in the product editor."},{"src":"https:\/\/ps.w.org\/wholesale-tiered-pricing-for-woocommerce\/assets\/screenshot-2.png?rev=3484162","caption":"Tiered pricing table (Table template) displayed on the product page."},{"src":"https:\/\/ps.w.org\/wholesale-tiered-pricing-for-woocommerce\/assets\/screenshot-3.png?rev=3484162","caption":"Live savings calculator widget on the product page."},{"src":"https:\/\/ps.w.org\/wholesale-tiered-pricing-for-woocommerce\/assets\/screenshot-4.png?rev=3484162","caption":"Quantity restriction messages on the product page and in the cart."},{"src":"https:\/\/ps.w.org\/wholesale-tiered-pricing-for-woocommerce\/assets\/screenshot-5.png?rev=3382489","caption":"Template Options \u2014 choose template, position, columns, and color."},{"src":"https:\/\/ps.w.org\/wholesale-tiered-pricing-for-woocommerce\/assets\/screenshot-6.png?rev=3382489","caption":"Global pricing rules panel (multi-role selector with scheduled dates)."},{"src":"https:\/\/ps.w.org\/wholesale-tiered-pricing-for-woocommerce\/assets\/screenshot-7.png?rev=3382489","caption":"Options table template for pricing display."},{"src":"https:\/\/ps.w.org\/wholesale-tiered-pricing-for-woocommerce\/assets\/screenshot-8.png?rev=3382489","caption":"Minimal table template for pricing display."},{"src":"https:\/\/ps.w.org\/wholesale-tiered-pricing-for-woocommerce\/assets\/screenshot-9.png?rev=3382489","caption":"Compact list template for pricing display."},{"src":"https:\/\/ps.w.org\/wholesale-tiered-pricing-for-woocommerce\/assets\/screenshot-10.png?rev=3490518","caption":"Wholesale Reports page inside WooCommerce."}],"raw_content":"<!--section=description-->\n<p><strong>Wholesale &amp; Tiered Pricing for WooCommerce<\/strong> is the most flexible <strong>wholesale pricing plugin<\/strong> for WooCommerce stores. Designed for <strong>B2B shops, wholesale distributors, and bulk sellers<\/strong>, it lets you define custom prices, tiered volume discounts, and quantity purchase rules for any user role \u2014 including custom roles created by membership or access-control plugins.<\/p>\n\n<p>Show eye-catching <strong>tiered pricing tables<\/strong> on your product pages, let customers see exactly how much they save as they buy more, and automate bulk discount logic without writing a single line of code.<\/p>\n\n<p>\ud83c\udfa5 <strong>Watch the Plugin Overview Video:<\/strong><\/p>\n\n<p>[youtube https:\/\/www.youtube.com\/watch?v=Id6WGI4wKkY]<\/p>\n\n<p>\ud83d\udc49 <em>See how to set up wholesale pricing rules in under a minute!<\/em><\/p>\n\n\n\n<p>Whether you run a <strong>wholesale WooCommerce store<\/strong>, sell to <strong>B2B customers<\/strong>, or simply want to reward bulk buyers with <strong>volume discounts<\/strong>, this plugin covers every scenario:<\/p>\n\n<ul>\n<li>Charge different prices per user role (wholesale, retailer, VIP, distributor, etc.)<\/li>\n<li>Offer quantity-based tiered discounts (buy 5 save 10%, buy 10 save 20%)<\/li>\n<li>Set minimum, maximum, and step purchase quantities per role<\/li>\n<li>Display professional pricing tables directly on the product page<\/li>\n<li>Schedule flash sales and time-limited pricing rules with start and end dates<\/li>\n<li>Show a live savings calculator so customers see their discount in real time<\/li>\n<\/ul>\n\n\n\n<h3>Key Features<\/h3>\n\n<h4>Role-Based Wholesale Pricing<\/h4>\n\n<ul>\n<li>Assign <strong>different product prices per user role<\/strong> \u2014 wholesale, retailer, B2B customer, VIP, vendor, or any custom role.<\/li>\n<li>Full backward compatibility with both single-role and multi-role rule formats.<\/li>\n<li><strong>Global pricing rules<\/strong> act as a wildcard and apply to all logged-in users or guest users.<\/li>\n<li>Works with any custom role created by plugins like WooCommerce Memberships, Ultimate Member, or User Role Editor.<\/li>\n<\/ul>\n\n<h4>Tiered \/ Volume Discount Pricing<\/h4>\n\n<ul>\n<li>Create <strong>quantity-based pricing tiers<\/strong>: the more a customer buys, the lower the price per unit.<\/li>\n<li>Set tiers as a <strong>fixed discount<\/strong> (e.g., $5 off per item) or a <strong>percentage discount<\/strong> (e.g., 15% off).<\/li>\n<li>Apply tiers to all variations or target a specific variation of a variable product.<\/li>\n<li>Multiple tier levels per rule \u2014 unlimited pricing bands.<\/li>\n<\/ul>\n\n<h4>Scheduled &amp; Flash Pricing<\/h4>\n\n<ul>\n<li>Set an <strong>Active From<\/strong> and <strong>Active Until<\/strong> date on any pricing rule.<\/li>\n<li>Rules outside their date window are automatically excluded from pricing, tables, cart validation, and discount messages \u2014 no manual toggling needed.<\/li>\n<li>Perfect for <strong>flash sales<\/strong>, seasonal wholesale pricing, and time-limited B2B promotions.<\/li>\n<\/ul>\n\n<h4>Quantity Rules per Role<\/h4>\n\n<ul>\n<li><strong>Minimum quantity<\/strong> \u2014 require wholesale buyers to purchase at least N units.<\/li>\n<li><strong>Maximum quantity<\/strong> \u2014 limit retail customers to a maximum order size.<\/li>\n<li><strong>Step\/increment quantity<\/strong> \u2014 force orders in multiples of 2, 5, 10, etc.<\/li>\n<li>Quantity enforcement applies on the product page, in the cart, and at checkout.<\/li>\n<\/ul>\n\n<h4>Beautiful Pricing Table Templates<\/h4>\n\n<ul>\n<li>Six ready-made table layouts: <strong>Table<\/strong>, <strong>Options<\/strong>, <strong>Minimal Table<\/strong>, <strong>Compact List<\/strong>, <strong>Plain Text<\/strong>, <strong>Horizontal<\/strong>.<\/li>\n<li>Choose the default template globally and override it per product.<\/li>\n<li>Control which columns appear: Quantity, Price, Discount.<\/li>\n<li>Set a custom table title and active-tier highlight color.<\/li>\n<li>Responsive layout option for mobile shoppers.<\/li>\n<li>Choose where the table appears: above\/below add-to-cart, before\/after product meta, or after product summary.<\/li>\n<\/ul>\n\n<h4>Live Savings Calculator<\/h4>\n\n<ul>\n<li>Displays a <strong>real-time savings widget<\/strong> on the product page.<\/li>\n<li>Updates automatically as the customer changes the quantity input.<\/li>\n<li>Shows regular price, discounted price, total savings amount, and discount percentage.<\/li>\n<li>Can be enabled or disabled from Template Options settings.<\/li>\n<\/ul>\n\n<h4>Discount Badges in Cart, Checkout &amp; Orders<\/h4>\n\n<ul>\n<li>Applied wholesale tier is shown beside each line item in the <strong>cart<\/strong>, <strong>checkout<\/strong>, <strong>customer order details<\/strong>, and <strong>admin order screen<\/strong>.<\/li>\n<li>Customers see exactly which discount tier was applied and how much they saved.<\/li>\n<\/ul>\n\n<h4>Variable Product Support<\/h4>\n\n<ul>\n<li>Full support for <strong>WooCommerce variable products<\/strong> \u2014 rules and tiers can target all variations or a specific variation.<\/li>\n<li>Pricing tables update dynamically when the customer switches between variations.<\/li>\n<\/ul>\n\n<h4>Performance &amp; Security<\/h4>\n\n<ul>\n<li>Transient caching on the wholesale reports page (5-minute TTL).<\/li>\n<li>Pre-warmed post meta cache to eliminate N+1 database queries.<\/li>\n<li>Capped product and category queries (limit: 200) to prevent timeouts on large stores.<\/li>\n<li>All AJAX handlers protected with nonce verification and capability checks.<\/li>\n<li>Admin-only handlers are never registered as publicly accessible.<\/li>\n<\/ul>\n\n<h4>Wholesale Reports<\/h4>\n\n<ul>\n<li>Dedicated <strong>Wholesale Reports<\/strong> page inside WooCommerce showing revenue, order counts, and top wholesale buyers.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install directly from <strong>WordPress \u2192 Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Navigate to <strong>WooCommerce \u2192 Tiered Pricing \u2192 Template Options<\/strong> to configure global display settings.<\/li>\n<li>Navigate to <strong>WooCommerce \u2192 Tiered Pricing \u2192 Pricing Rules<\/strong> to set global role-based pricing rules.<\/li>\n<li>Edit any product and open the <strong>Tiered Pricing<\/strong> tab in the product data panel to set per-product rules.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20set%20different%20prices%20for%20wholesale%20customers%20vs%20retail%20customers%3F\"><h3>Can I set different prices for wholesale customers vs retail customers?<\/h3><\/dt>\n<dd><p>Yes. Create separate pricing rules \u2014 one for your wholesale role (e.g., \"Wholesale Customer\") and one for standard customers. Each role sees only its own price.<\/p><\/dd>\n<dt id=\"does%20it%20support%20woocommerce%20variable%20products%3F\"><h3>Does it support WooCommerce variable products?<\/h3><\/dt>\n<dd><p>Yes, fully. You can apply pricing rules to all variations or to a specific variation. The pricing table on the product page updates in real time when the customer selects a variation.<\/p><\/dd>\n<dt id=\"can%20i%20offer%20volume%20discounts%20that%20increase%20with%20quantity%3F\"><h3>Can I offer volume discounts that increase with quantity?<\/h3><\/dt>\n<dd><p>Yes. Each rule supports unlimited pricing tiers. You can define as many quantity breakpoints as you need, using either a fixed dollar discount or a percentage discount per tier.<\/p><\/dd>\n<dt id=\"can%20i%20set%20minimum%20or%20maximum%20order%20quantities%20per%20role%3F\"><h3>Can I set minimum or maximum order quantities per role?<\/h3><\/dt>\n<dd><p>Yes. Each rule has optional Minimum Quantity, Maximum Quantity, and Step Quantity fields. These are enforced on the product page, in the cart, and at checkout.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20custom%20user%20roles%20from%20membership%20plugins%3F\"><h3>Does it work with custom user roles from membership plugins?<\/h3><\/dt>\n<dd><p>Yes. Any role registered in WordPress \u2014 including those created by WooCommerce Memberships, Paid Memberships Pro, Ultimate Member, or User Role Editor \u2014 is automatically available in the role selector.<\/p><\/dd>\n<dt id=\"can%20i%20schedule%20pricing%20rules%20to%20run%20during%20a%20specific%20date%20range%3F\"><h3>Can I schedule pricing rules to run during a specific date range?<\/h3><\/dt>\n<dd><p>Yes. Every pricing rule has optional \"Active From\" and \"Active Until\" date fields. Rules outside their scheduled window are automatically skipped \u2014 no manual toggling needed. Use this for flash sales, seasonal wholesale rates, or limited-time B2B promotions.<\/p><\/dd>\n<dt id=\"can%20guest%20%28non-logged-in%29%20users%20see%20wholesale%20prices%3F\"><h3>Can guest (non-logged-in) users see wholesale prices?<\/h3><\/dt>\n<dd><p>Yes. Create a Global rule and enable the \"Make it for guest user also\" option. Guest users will see those prices and discounts without needing to log in.<\/p><\/dd>\n<dt id=\"can%20i%20show%20the%20pricing%20table%20on%20some%20products%20but%20hide%20it%20on%20others%3F\"><h3>Can I show the pricing table on some products but hide it on others?<\/h3><\/dt>\n<dd><p>Yes. There is a \"Show Pricing Table\" toggle on every product's Tiered Pricing panel. You can also control the default behavior globally from the Template Options settings.<\/p><\/dd>\n<dt id=\"will%20this%20plugin%20slow%20down%20my%20store%3F\"><h3>Will this plugin slow down my store?<\/h3><\/dt>\n<dd><p>No. The plugin uses transient caching for reports, pre-warms meta cache to eliminate N+1 queries, and uses bounded database queries to avoid timeouts on large catalogs.<\/p><\/dd>\n<dt id=\"does%20it%20support%20multiple%20languages%3F\"><h3>Does it support multiple languages?<\/h3><\/dt>\n<dd><p>Yes, all frontend strings are fully translatable. The plugin ships with a .pot file and is compatible with WPML, Polylang, and Loco Translate.<\/p><\/dd>\n<dt id=\"will%20this%20work%20with%20my%20theme%3F\"><h3>Will this work with my theme?<\/h3><\/dt>\n<dd><p>Yes. The pricing table templates use minimal HTML\/CSS and inherit your theme's base styles. You can also override templates in your child theme.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20support%3F\"><h3>Where can I get support?<\/h3><\/dt>\n<dd><p>Please open a support thread in the WordPress.org plugin support forum. We typically respond within 1\u20132 business days.<\/p>\n\n<\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.1 \u2013 2026-03-15<\/h4>\n\n<ul>\n<li>Redesigned Wholesale Reports admin page: summary cards now show a coloured icon badge (blue \/ purple \/ green \/ orange) for each metric; section headings include contextual SVG icons (cart, trend, box, gear).<\/li>\n<li>Reports filter bar restructured: date labels stacked above inputs, calendar icon overlaid on each date field, preset buttons (7d \/ 30d \/ 90d) highlight the active selection with a dark fill, Apply and Edit buttons use a high-contrast dark style.<\/li>\n<li>Report tables now use uppercase column headers and subtle row-hover styling instead of the WP striped class.<\/li>\n<li>Revamped Volume Pricing card (minimal template): replaced old premium wrapper markup with <code>wtp-volume-card<\/code> \/ <code>wtp-tier-row<\/code> structure; savings shown as a plain \"Save N% \/ $X off\" label; removed \"Best\" featured-tier badge and progress bar.<\/li>\n<li>Pricing table: column headers changed to muted uppercase on a transparent background, removing the coloured primary-colour header fill; <code>.quantity-badge<\/code>, <code>.price-unit<\/code>, and <code>.savings-info<\/code> cell classes introduced for cleaner markup; table border changed from box-shadow to a solid border with rounded corners.<\/li>\n<li>Radio tier selector: active tier now uses an inset box-shadow instead of background fill; colour palette updated to neutral tones; responsive breakpoint tightened from 768 px to 480 px.<\/li>\n<li>Added Dashicons lightbulb icon before the \"See Your Savings\" savings-calculator heading.<\/li>\n<li>Quantity field now defaults to the first tier's minimum quantity on page load (when greater than 1), so the eligible tier price is immediately visible without the customer adjusting quantity manually.<\/li>\n<\/ul>\n\n<h4>1.2.0 \u2013 2026-03-12<\/h4>\n\n<ul>\n<li>Added Scheduled \/ Flash Pricing \u2014 pricing rules now support <code>Active From<\/code> and <code>Active Until<\/code> date fields; rules outside their scheduled window are automatically excluded everywhere (product page, cart, checkout, quantity validation, discount messages).<\/li>\n<li>Added date pickers to the product editor (PHP) and the global pricing rules form (Vue) for per-rule scheduling.<\/li>\n<li>Fixed date fields not being saved when clicking \"Save Changes\" in the global pricing rules admin \u2014 <code>date_from<\/code>\/<code>date_to<\/code> were silently stripped by the AJAX sanitize function.<\/li>\n<li>Fixed expired or future-dated rules still applying prices, showing pricing tables, enforcing quantity limits, and displaying discount badges \u2014 all rule lookups now route through the central date filter in <code>WHTPRole_Pricing_Helper::get_rules_for_product()<\/code>.<\/li>\n<li>Fixed cart and order discount messages using the variation ID instead of the parent product ID, causing rules to not be found for variable products.<\/li>\n<\/ul>\n\n<h4>1.1.1 \u2013 2026-03-08<\/h4>\n\n<ul>\n<li>Fixed critical data corruption bug where JSON settings were mangled on save, silently breaking all pricing rules on every product page.<\/li>\n<li>Fixed admin-only AJAX handlers that were incorrectly registered as publicly accessible, exposing pricing rule reads and writes to unauthenticated users.<\/li>\n<li>Fixed pricing table not appearing for users matched by global rules due to role format mismatch between old single-role and new multi-role rule formats.<\/li>\n<li>Fixed variable product pricing table throwing a fatal <code>foreach<\/code> error when rules were stored as a JSON string instead of a decoded array.<\/li>\n<li>Fixed early-return bug in cart validation and price HTML filter that loaded global rules but then discarded them and returned without applying them.<\/li>\n<li>Fixed missing <code>return<\/code> after security error in savings calculation handler, allowing code execution to continue after an auth failure.<\/li>\n<li>Added nonce verification and capability check to product data save handler.<\/li>\n<li>Added <code>Show savings calculator<\/code> toggle in Template Options settings \u2014 admins can now enable or disable the savings calculator widget per store.<\/li>\n<li>Improved performance: added transient caching to the wholesale reports page (5-minute TTL) and pre-warm post meta cache to eliminate N+1 queries.<\/li>\n<li>Replaced unbounded <code>wc_get_products(limit: -1)<\/code> and <code>get_terms<\/code> calls in global settings with capped queries (limit: 200) to prevent timeouts on large stores.<\/li>\n<li>Moved activation hook registration to plugin load time (outside <code>plugins_loaded<\/code>) for correct WordPress lifecycle behavior.<\/li>\n<li>Renamed global <code>get_wp_user_roles<\/code> function to prefixed <code>whtprole_get_wp_user_roles<\/code> to avoid namespace collision with other plugins.<\/li>\n<li>Removed dead code: unused <code>find_applicable_tier()<\/code> and <code>getPrice()<\/code> methods, stray second class instantiation that caused all hooks to register twice, and commented-out <code>admin_head<\/code> block.<\/li>\n<\/ul>\n\n<h4>1.1.0 \u2013 2026-02-10<\/h4>\n\n<ul>\n<li>Added Wholesale Reports page with revenue and order analytics.<\/li>\n<li>Enhanced user experience with real-time price recalculation based on variation selection.<\/li>\n<\/ul>\n\n<h4>1.0.8 \u2013 2026-01-24<\/h4>\n\n<ul>\n<li>Enhanced variable product support across all pricing table templates.<\/li>\n<li>Added dynamic variation filtering \u2014 pricing tables now show only tiers applicable to the selected variation.<\/li>\n<li>Added automatic price updates when customers select different variations on variable products.<\/li>\n<\/ul>\n\n<h4>1.0.7 \u2013 2026-01-23<\/h4>\n\n<ul>\n<li>Added support for assigning tiered pricing rules to multiple user roles using a normalized roles array.<\/li>\n<li>Introduced a Global pricing option that applies to all user roles as a wildcard.<\/li>\n<li>Added an \"Apply to Guest Users\" option for Global rules to control pricing for non-logged-in users.<\/li>\n<li>Improved admin UI with a multi-select role selector for better flexibility and usability.<\/li>\n<\/ul>\n\n<h4>1.0.6 \u2013 2025-01-23<\/h4>\n\n<ul>\n<li>Added Dynamic Savings Calculator \u2014 real-time savings display that updates as customers change quantity, showing total savings and discount percentage.<\/li>\n<li>Improved pricing calculation logic with better edge case handling.<\/li>\n<li>Fixed pricing calculation issues when max_qty constraints are set.<\/li>\n<\/ul>\n\n<h4>1.0.5 \u2013 2025-11-10<\/h4>\n\n<ul>\n<li>Added pricing rule support for guest (non-logged-in) users.<\/li>\n<li>Added option to show or hide the pricing table per product.<\/li>\n<\/ul>\n\n<h4>1.0.4 \u2013 2025-11-07<\/h4>\n\n<ul>\n<li>Added multilingual support for all frontend strings.<\/li>\n<li>Minor bug fixes.<\/li>\n<\/ul>\n\n<h4>1.0.3 \u2013 2025-11-01<\/h4>\n\n<ul>\n<li>Admin order details now display the applied tier pricing rule beside each product line item.<\/li>\n<li>Discount notice now shows in the cart, checkout, and order details pages (frontend).<\/li>\n<li>Discount calculation now uses the actual selling price instead of the regular price for more accurate savings.<\/li>\n<\/ul>\n\n<h4>1.0.2 \u2013 2025-10-22<\/h4>\n\n<ul>\n<li>Fixed undefined <code>price_type<\/code> key on cart and checkout page.<\/li>\n<li>Fixed single product tiered pricing settings not saving properly.<\/li>\n<li>Fixed pricing table not displaying on product page until general settings are saved.<\/li>\n<\/ul>\n\n<h4>1.0.1 \u2013 2025-10-22<\/h4>\n\n<ul>\n<li>Bug fixes and minor improvements.<\/li>\n<\/ul>\n\n<h4>1.0.0 \u2013 2025-10-22<\/h4>\n\n<ul>\n<li>Initial release with role-based pricing, tiered volume discounts, quantity rules, and customizable pricing tables.<\/li>\n<\/ul>","raw_excerpt":"Set role-based wholesale prices, volume discounts, and quantity rules in WooCommerce. Display beautiful tiered pricing tables for B2B, wholesale, and  &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/255590","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=255590"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wpulse"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=255590"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=255590"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=255590"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=255590"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=255590"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=255590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}