{"id":109091,"date":"2019-09-19T19:00:09","date_gmt":"2019-09-19T19:00:09","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/wr-price-list-for-woocommerce\/"},"modified":"2026-06-25T19:59:18","modified_gmt":"2026-06-25T19:59:18","slug":"wr-price-list-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/fr.wordpress.org\/plugins\/wr-price-list-for-woocommerce\/","author":17498718,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.3","stable_tag":"1.2.3","tested":"6.8.5","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"WRN Pricing Rules for WooCommerce","header_author":"WebReadyNow","header_description":"Create a Sales Price List(s) based on existing Price List(s). Changes to the primary price list will affect child price list. Configure child list to be a discount price list or raise cost based on a percentage of the parent list.","assets_banners_color":"7a789c","last_updated":"2026-06-25 19:59:18","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.webreadynow.com\/wr-price-list-manager-woocommerce","header_author_uri":"https:\/\/webreadynow.com\/","rating":4.3,"author_block_rating":0,"active_installs":50,"downloads":5702,"num_ratings":6,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"webreadynow","date":"2020-03-09 19:14:43"},"1.0.2":{"tag":"1.0.2","author":"webreadynow","date":"2020-03-09 23:23:21"},"1.0.3":{"tag":"1.0.3","author":"webreadynow","date":"2021-02-12 21:13:09"},"1.0.4":{"tag":"1.0.4","author":"webreadynow","date":"2022-05-15 02:01:51"},"1.0.5":{"tag":"1.0.5","author":"webreadynow","date":"2022-05-19 18:27:14"},"1.0.6":{"tag":"1.0.6","author":"webreadynow","date":"2022-06-04 00:50:01"},"1.0.7":{"tag":"1.0.7","author":"webreadynow","date":"2023-11-05 00:39:26"},"1.0.8":{"tag":"1.0.8","author":"webreadynow","date":"2024-02-27 16:27:59"},"1.1.0":{"tag":"1.1.0","author":"webreadynow","date":"2026-06-09 21:15:51"},"1.2.3":{"tag":"1.2.3","author":"webreadynow","date":"2026-06-25 19:59:18"}},"upgrade_notice":{"1.2.3":"<p>Fixes a bug where expired or scheduled price lists could leak WooCommerce sale prices when using the &quot;regular&quot; price base setting. Also adds date validation and status badges to the Price Lists sidebar.<\/p>","1.1.0":"<p>Major update. The Roles tab has been removed \u2014 assign roles directly in the Price Lists form. All existing role assignments and price data are preserved automatically. Requires WooCommerce 7.0+ and PHP 7.4+.<\/p>"},"ratings":{"1":1,"2":0,"3":0,"4":0,"5":5},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":2159556,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3566571,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":499},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3566570,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["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.2.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3586528,"resolution":"1","location":"assets","locale":"","width":2365,"height":1101},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3586528,"resolution":"2","location":"assets","locale":"","width":2368,"height":1065},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3586528,"resolution":"3","location":"assets","locale":"","width":882,"height":1018},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3586528,"resolution":"4","location":"assets","locale":"","width":972,"height":547}},"screenshots":{"1":"Overview tab \u2014 explains the three-step setup and shows your current price lists at a glance.","2":"Price Lists tab \u2014 create or edit a list with the radio-based form. Choose automatic rule or manual prices, then tick the roles that should see this list.","3":"Products tab \u2014 inline price editor with DataTables search and pagination. Rule prices show a yellow \"rule\" badge; overrides show a green checkmark.","4":"Settings tab \u2014 hide prices from guests, set a custom message, and export\/import prices via CSV."}},"plugin_section":[],"plugin_tags":[10553,72705,139401,51032,286],"plugin_category":[45],"plugin_contributors":[266402],"plugin_business_model":[],"class_list":["post-109091","plugin","type-plugin","status-publish","hentry","plugin_tags-b2b","plugin_tags-price-list","plugin_tags-role-based-pricing","plugin_tags-wholesale","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-webreadynow","plugin_committers-webreadynow","plugin_committers-yariko0529"],"banners":{"banner":"https:\/\/ps.w.org\/wr-price-list-for-woocommerce\/assets\/banner-772x250.png?rev=3566570","banner_2x":"https:\/\/ps.w.org\/wr-price-list-for-woocommerce\/assets\/banner-1544x500.png?rev=3566571","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wr-price-list-for-woocommerce\/assets\/icon-128x128.png?rev=2159556","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/wr-price-list-for-woocommerce\/assets\/screenshot-1.png?rev=3586528","caption":"Overview tab \u2014 explains the three-step setup and shows your current price lists at a glance."},{"src":"https:\/\/ps.w.org\/wr-price-list-for-woocommerce\/assets\/screenshot-2.png?rev=3586528","caption":"Price Lists tab \u2014 create or edit a list with the radio-based form. Choose automatic rule or manual prices, then tick the roles that should see this list."},{"src":"https:\/\/ps.w.org\/wr-price-list-for-woocommerce\/assets\/screenshot-3.png?rev=3586528","caption":"Products tab \u2014 inline price editor with DataTables search and pagination. Rule prices show a yellow \"rule\" badge; overrides show a green checkmark."},{"src":"https:\/\/ps.w.org\/wr-price-list-for-woocommerce\/assets\/screenshot-4.png?rev=3586528","caption":"Settings tab \u2014 hide prices from guests, set a custom message, and export\/import prices via CSV."}],"raw_content":"<!--section=description-->\n<p>WRN Pricing Rules gives you full control over who pays what in your WooCommerce store. Instead of applying a single sale price to everyone, you create named <strong>price lists<\/strong> and assign each one to a user role. Any customer who logs in with that role automatically sees the prices from their list \u2014 no shortcodes, no visible price switchers.<\/p>\n\n<p><strong>How it works<\/strong><\/p>\n\n<ol>\n<li>Create a price list \u2014 give it a name and choose how prices are set.<\/li>\n<li>Assign user roles to the list (e.g. \"Wholesale Buyer\", \"VIP Member\").<\/li>\n<li>Done. Logged-in users with those roles see your custom prices everywhere in the store: product pages, shop archive, cart, checkout, and order emails.<\/li>\n<\/ol>\n\n<p><strong>Two ways to set prices<\/strong><\/p>\n\n<ul>\n<li><strong>Automatic rule<\/strong> \u2014 enter one number and let the plugin calculate prices for every product automatically. Choose from percent off (e.g. 20% off all products), fixed amount off ($5 off every product), or percent of base price (80% of your standard prices). Individual products can still be overridden.<\/li>\n<li><strong>Manual prices<\/strong> \u2014 enter each product's price yourself on the Products tab. Optionally seed the list from an existing list at a percentage so you have a starting point.<\/li>\n<\/ul>\n\n<p><strong>Key features<\/strong><\/p>\n\n<ul>\n<li>Unlimited price lists (one active list per user role)<\/li>\n<li>Role-based pricing \u2014 works with any WordPress user role, including custom roles added by other plugins<\/li>\n<li>Automatic pricing rules: percent off, fixed amount off, percent of base price<\/li>\n<li>Per-product price overrides on rule-based lists (override wins, set to 0 to revert to rule)<\/li>\n<li>Variable product support \u2014 price ranges on the shop page reflect your list prices<\/li>\n<li>Inline price editor \u2014 click any price cell in the admin table to edit it<\/li>\n<li>Bulk product editor with DataTables search, sort, and pagination<\/li>\n<li>Filter by product category<\/li>\n<li>CSV export and import per price list<\/li>\n<li>Hide prices from guests \u2014 optional custom message<\/li>\n<li>Developer-friendly: action and filter hooks for extending or building a premium add-on<\/li>\n<li>HPOS (High-Performance Order Storage) compatible<\/li>\n<li>No external API calls, no license key required<\/li>\n<\/ul>\n\n<p><strong>Free vs Pro<\/strong><\/p>\n\n\n\n\n  Feature\n  Description\n  Free\n  Pro\n\n\n\n\n  Role-based price lists\n  Assign different prices to wholesale, VIP, retail, or any custom user role\n  \u2705\n  \u2705\n\n\n  Formula pricing\n  Set prices as % off, fixed amount off, or % of base price \u2014 applies to all products automatically\n  \u2705\n  \u2705\n\n\n  Inline price editor &amp; CSV import\/export\n  Edit product prices directly in the admin table or bulk-manage via spreadsheet\n  \u2705\n  \u2705\n\n\n  Strikethrough pricing\n  Show the original price crossed out next to the list price in cart, minicart, and checkout\n  \u2705\n  \u2705\n\n\n  Hide prices for guests\n  Replace prices with a login prompt for non-logged-in visitors\n  \u2705\n  \u2705\n\n\n  Variable product support\n  Price rules apply correctly to all variations, with per-variation badge display\n  \u2705\n  \u2705\n\n\n  Discount rules engine\n  Layer percent or fixed discounts on top of price lists \u2014 by role, product, category, or cart total\n  \u2014\n  \u2705\n\n\n  Scheduled promotions\n  Set start and end dates for flash sales; prices revert automatically when the window closes\n  \u2014\n  \u2705\n\n\n  Quantity tier pricing\n  \"Buy 10+ get 15% off\" \u2014 define quantity breaks that stack with your price lists\n  \u2014\n  \u2705\n\n\n  Per-customer pricing\n  Assign a specific price list to individual customers with optional expiry dates and email reminders\n  \u2014\n  \u2705\n\n\n  Cart savings breakdown\n  Show a \"You save\" row in cart and checkout totals so customers see their discount clearly\n  \u2014\n  \u2705\n\n\n  Pricing inspector\n  Admin-bar panel that shows exactly which list, rules, and tiers produced a price \u2014 debug in seconds\n  \u2014\n  \u2705\n\n\n\n\n<p><a href=\"https:\/\/webreadynow.com\/wr-price-list-pro\">Upgrade to Pro \u2192<\/a><\/p>\n\n<p><strong>Developer hooks<\/strong><\/p>\n\n<p>Filters: <code>wrn_plm_feature_available<\/code>, <code>wrn_plm_feature_value<\/code>, <code>wrn_plm_rule_types<\/code>, <code>wrn_plm_apply_custom_rule<\/code><\/p>\n\n<p>WooCommerce price hooks used (all at priority 20):\n    woocommerce_product_get_price, <code>woocommerce_product_get_regular_price<\/code>, <code>woocommerce_product_get_sale_price<\/code>,\n    woocommerce_product_variation_get_price, <code>woocommerce_product_variation_get_regular_price<\/code>, <code>woocommerce_product_variation_get_sale_price<\/code>,\n    woocommerce_variation_prices, <code>woocommerce_get_variation_prices_hash<\/code><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install via <strong>Plugins &gt; Add New<\/strong>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Go to <strong>WRN Pricing Rules<\/strong> in the WordPress admin sidebar.<\/li>\n<li>The <strong>Overview<\/strong> tab explains the three steps. Start by clicking <strong>Price Lists<\/strong>.<\/li>\n<\/ol>\n\n<p><strong>Requirements<\/strong><\/p>\n\n<ul>\n<li>WordPress 6.0 or later<\/li>\n<li>WooCommerce 7.0 or later<\/li>\n<li>PHP 7.4 or later<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20variable%20products%3F\"><h3>Does this work with variable products?<\/h3><\/dt>\n<dd><p>Yes. Both individual variation prices and the price range displayed on the shop page (e.g. \"$10 \u2013 $50\") reflect your list prices.<\/p><\/dd>\n<dt id=\"can%20a%20user%20be%20in%20more%20than%20one%20price%20list%3F\"><h3>Can a user be in more than one price list?<\/h3><\/dt>\n<dd><p>No. Each role is assigned to exactly one price list. Roles without a custom list fall back to the Default WooCommerce prices.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20guest%20visitors%3F\"><h3>What happens to guest visitors?<\/h3><\/dt>\n<dd><p>Guests always see the Default WooCommerce prices unless you enable \"Hide prices from guests\" in the Settings tab, which replaces all prices with a custom message and disables Add to Cart.<\/p><\/dd>\n<dt id=\"can%20i%20still%20run%20woocommerce%20sale%20prices%20alongside%20list%20prices%3F\"><h3>Can I still run WooCommerce sale prices alongside list prices?<\/h3><\/dt>\n<dd><p>Yes. On automatic rule lists, the plugin applies your rule to both the regular price and the sale price. On manual lists, you enter both a regular price and an optional sale price per product.<\/p><\/dd>\n<dt id=\"what%20is%20a%20%22per-product%20override%22%20on%20a%20rule%20list%3F\"><h3>What is a \"per-product override\" on a rule list?<\/h3><\/dt>\n<dd><p>When a list uses an automatic rule, every product's price is calculated on the fly. If you need a specific product to have a different price, click the price cell in the Products tab and enter a value. That stored value takes priority over the rule. Set it back to 0 to remove the override and return to the rule-calculated price.<\/p><\/dd>\n<dt id=\"can%20i%20seed%20a%20new%20list%20from%20an%20existing%20list%3F\"><h3>Can I seed a new list from an existing list?<\/h3><\/dt>\n<dd><p>Yes. When creating a manual price list you can select any existing list as a starting point and apply a percentage factor (e.g. 80% of your wholesale prices). This is a one-time copy \u2014 the lists are independent after that.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20store%3F\"><h3>Will this slow down my store?<\/h3><\/dt>\n<dd><p>The plugin performs one database query per page load to look up the current user's assigned list, then caches the result in memory for the rest of the request. There are no extra queries per product.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20compatible%20with%20woocommerce%20hpos%3F\"><h3>Is the plugin compatible with WooCommerce HPOS?<\/h3><\/dt>\n<dd><p>Yes. The plugin explicitly declares compatibility with WooCommerce High-Performance Order Storage (custom order tables).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Fix: expired, scheduled, or deleted price lists no longer leak WooCommerce sale prices when price base is set to \"regular\"<\/li>\n<li>Fix: CSV import now resolves products by SKU first, falling back to product ID<\/li>\n<li>New: Expired and Scheduled status badges on the Price Lists sidebar<\/li>\n<li>New: date validation prevents saving backwards active period ranges (From must be before To)<\/li>\n<li>Removed price preview section from the Overview tab<\/li>\n<li>Cleaned up dead CSS from removed preview feature<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Simplified price list modal: role tag widget, edit-mode cleanup, deferred customer-save event<\/li>\n<li>New: login notice position setting (after cart form, before cart form, after title, or manual shortcode placement)<\/li>\n<li>Added quantity-tier variation support in frontend filters<\/li>\n<li>Fixed multi-role list assignment edge cases<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fix: strikethrough price format now shows correctly in cart and minicart<\/li>\n<li>Fix: duplicate price display when price_base=regular and no discount rule fires<\/li>\n<li>Fix: discount-only path now respects the price_base setting for sale products<\/li>\n<li>Fix: strikethrough\/sale price display when no discount rule is active<\/li>\n<li>Fix: discount rules can no longer produce a worse price than the existing WooCommerce sale price<\/li>\n<li>Fixed 28 pre-existing PHPUnit test failures via injectable static providers<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: effective price base setting \u2014 choose between regular price (B2B) or effective\/sale price (B2C) as the base for formulas and list seeding<\/li>\n<li>New: one-time setup wizard recommends settings based on store type (B2B, B2C, or Mixed)<\/li>\n<li>New: hooks for Pro plugin to inject into Settings tab, wizard, and admin tabs<\/li>\n<li>New: apply item-price discount rules for users without a price list (Pro integration)<\/li>\n<li>New: search products by name or SKU in the Products tab<\/li>\n<li>New: PHPUnit test suite \u2014 147+ tests, all green<\/li>\n<li>Improved: admin UI overhaul \u2014 consistent form styling, hint text, and list ID badges<\/li>\n<li>Improved: modal design \u2014 navy header, 12px radius, stronger shadow<\/li>\n<li>Improved: sticky toolbar and table header in the Products tab<\/li>\n<li>Improved: installer refactored with information_schema column checks and migrate_add_column helper<\/li>\n<li>Various admin UI font and spacing improvements<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Removed base price strategy setting \u2014 regular price is always the base<\/li>\n<li>New: customer-facing price context badge on single product pages showing list name and savings<\/li>\n<li>Fix: default list edit now updates the correct WooCommerce price field<\/li>\n<li>Fix: resolved base price shown in default list admin table<\/li>\n<li>Fix: list price returned via sale_price filter for theme compatibility<\/li>\n<li>Fix: radio layout overridden by WP core fieldset label rule<\/li>\n<li>Removed quantity tiers \u2014 price lists simplified to single price per product<\/li>\n<li>Import\/export controls relocated into the price list screen<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: Automatic pricing rules (percent off, fixed off, percent of base price)<\/li>\n<li>New: Per-product overrides on rule-based lists \u2014 set to 0 to revert to rule<\/li>\n<li>New: Variable product price range support via woocommerce_variation_prices hook<\/li>\n<li>New: Freemium architecture with developer filter hooks for add-on plugins<\/li>\n<li>New: Overview tab with \"How it works\" guide and current setup status<\/li>\n<li>New: Role assignment integrated directly into the Price Lists form<\/li>\n<li>New: Price key legend and help tooltips throughout the admin UI<\/li>\n<li>New: Currency symbol displayed in price cells<\/li>\n<li>Improved: Completely rebuilt admin JS \u2014 DataTables server-side, inline editing, rule\/override badges<\/li>\n<li>Improved: DB migration reliability \u2014 uses ALTER TABLE with column check instead of dbDelta for existing tables<\/li>\n<li>Improved: Hook timing changed from woocommerce_loaded to init for reliable activation on all environments<\/li>\n<li>Fixed: Double-discounting bug when a WooCommerce sale price was active on a rule list<\/li>\n<li>Fixed: Variable product price ranges showing default WooCommerce prices instead of list prices<\/li>\n<li>Removed: Roles tab (role assignment moved to Price Lists form)<\/li>\n<li>Removed: External API call in uninstall.php<\/li>\n<li>Security: All 11 AJAX endpoints now verify nonce and check manage_woocommerce capability<\/li>\n<li>Security: All database queries use $wpdb-&gt;prepare() \/ insert() \/ update() \/ delete()<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Fix: Empty but existent meta price causing price not being shown on frontend<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Price format feature removed to avoid third-party plugin collision<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Price list export to CSV<\/li>\n<li>Grouped and External product support added<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Parent lists are now editable<\/li>\n<li>Product table optimized for large catalogs<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>New admin UI<\/li>\n<li>MySQL query improvements<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Assign different prices to WordPress user roles. Create wholesale, VIP, or member price lists and manage all product pricing from one screen.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/109091","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=109091"}],"author":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/webreadynow"}],"wp:attachment":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=109091"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=109091"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=109091"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=109091"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=109091"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=109091"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}