{"id":357559,"date":"2026-08-29T09:43:48","date_gmt":"2026-08-29T09:43:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/hype-discounts\/"},"modified":"2026-10-02T08:41:52","modified_gmt":"2026-10-02T08:41:52","slug":"hypemediasystem-sale-rules","status":"publish","type":"plugin","link":"https:\/\/jv.wordpress.org\/plugins\/hypemediasystem-sale-rules\/","author":23553275,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.9","stable_tag":"1.0.9","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"hypemediasystem Sale Rules for WooCommerce","header_author":"Hype Media System","header_description":"WooCommerce sale pricing by category, brand, and schedule, with Excel\/CSV import and HPOS support.","assets_banners_color":"d7e4d3","last_updated":"2026-10-02 08:41:52","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/hypemediasystem-sale-rules\/","header_author_uri":"https:\/\/www.hype.ro","rating":5,"author_block_rating":0,"active_installs":0,"downloads":314,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.4":{"tag":"1.0.4","author":"hypemediasystem","date":"2026-08-29 09:43:12","revision":3671321},"1.0.5":{"tag":"1.0.5","author":"hypemediasystem","date":"2026-08-29 10:09:25","revision":3671362},"1.0.6":{"tag":"1.0.6","author":"hypemediasystem","date":"2026-09-01 08:17:26","revision":3675615},"1.0.7":{"tag":"1.0.7","author":"hypemediasystem","date":"2026-10-01 13:59:18","revision":3723282},"1.0.8":{"tag":"1.0.8","author":"hypemediasystem","date":"2026-10-01 17:29:45","revision":3723606},"1.0.9":{"tag":"1.0.9","author":"hypemediasystem","date":"2026-10-02 08:41:52","revision":3724386}},"upgrade_notice":{"1.0.9":"<p>Romanian translations for Cart discount rules.<\/p>","1.0.8":"<p>Fixes cart 2+1 overlap, tax class fees, and coupon stacking edge cases.<\/p>","1.0.7":"<p>Adds a Cart discount rules tab for 2+1 free (cheapest in category) promotions.<\/p>","1.0.6":"<p>WordPress.org listing now describes bulk sale-price campaigns, not generic discount rules.<\/p>","1.0.5":"<p>Loads translations from WordPress.org language packs.<\/p>","1.0.4":"<p>Apply-progress polling no longer accepts a client-supplied transient key.<\/p>","1.0.3":"<p>AJAX discount apply now requires a WooCommerce manager capability in addition to a nonce.<\/p>","1.0.2":"<p>Renamed for the WordPress.org directory. Re-activate after updating if the plugin folder name changed.<\/p>","1.0.1":"<p>Plugin URI and Author URI are now different, as required by WordPress.org.<\/p>","1.0.0":"<p>First release.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3671360,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3671360,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3671360,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3671360,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3671360,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.4","1.0.5","1.0.6","1.0.7","1.0.8","1.0.9"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3675615,"resolution":"1","location":"assets","locale":"","width":2068,"height":1740},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3675615,"resolution":"2","location":"assets","locale":"","width":2068,"height":1766},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3675615,"resolution":"3","location":"assets","locale":"","width":2068,"height":1766},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3675615,"resolution":"4","location":"assets","locale":"","width":2068,"height":1740},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3675615,"resolution":"5","location":"assets","locale":"","width":1850,"height":1544},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3675615,"resolution":"6","location":"assets","locale":"","width":2068,"height":1740}},"screenshots":{"1":"Campaign rule list and bulk actions","2":"Add a scheduled sale-price rule","3":"Category and brand targeting, with product and tag exclusions","4":"Excel\/CSV import by SKU for regular or sale prices","5":"Product sale price before and after a campaign apply","6":"Admin batch progress while sale prices are applied"}},"plugin_section":[],"plugin_tags":[11143,21157,4394,140536,286],"plugin_category":[45],"plugin_contributors":[278171],"plugin_business_model":[],"class_list":["post-357559","plugin","type-plugin","status-publish","hentry","plugin_tags-bulk-edit","plugin_tags-csv-import","plugin_tags-pricing","plugin_tags-sale-price","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-hypemediasystem","plugin_committers-hypemediasystem"],"banners":{"banner":"https:\/\/ps.w.org\/hypemediasystem-sale-rules\/assets\/banner-772x250.png?rev=3671360","banner_2x":"https:\/\/ps.w.org\/hypemediasystem-sale-rules\/assets\/banner-1544x500.png?rev=3671360","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/hypemediasystem-sale-rules\/assets\/icon.svg?rev=3671360","icon":"https:\/\/ps.w.org\/hypemediasystem-sale-rules\/assets\/icon.svg?rev=3671360","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/hypemediasystem-sale-rules\/assets\/screenshot-1.png?rev=3675615","caption":"Campaign rule list and bulk actions"},{"src":"https:\/\/ps.w.org\/hypemediasystem-sale-rules\/assets\/screenshot-2.png?rev=3675615","caption":"Add a scheduled sale-price rule"},{"src":"https:\/\/ps.w.org\/hypemediasystem-sale-rules\/assets\/screenshot-3.png?rev=3675615","caption":"Category and brand targeting, with product and tag exclusions"},{"src":"https:\/\/ps.w.org\/hypemediasystem-sale-rules\/assets\/screenshot-4.png?rev=3675615","caption":"Excel\/CSV import by SKU for regular or sale prices"},{"src":"https:\/\/ps.w.org\/hypemediasystem-sale-rules\/assets\/screenshot-5.png?rev=3675615","caption":"Product sale price before and after a campaign apply"},{"src":"https:\/\/ps.w.org\/hypemediasystem-sale-rules\/assets\/screenshot-6.png?rev=3675615","caption":"Admin batch progress while sale prices are applied"}],"raw_content":"<!--section=description-->\n<p>Managing WooCommerce sale prices manually is slow and risky when you have many products. hypemediasystem Sale Rules lets store owners create scheduled discount campaigns, import sale prices by SKU, clean up managed discounts safely, and run cart 2+1 (cheapest free) rules by category.<\/p>\n\n<p>This is for catalogs that change prices on tens, hundreds, or thousands of products. Catalog campaigns write sale prices on products. Cart rules apply only in the cart and checkout.<\/p>\n\n<h4>Best for<\/h4>\n\n<ul>\n<li>Fashion and apparel drops<\/li>\n<li>Electronics catalogs<\/li>\n<li>Seasonal campaigns<\/li>\n<li>Black Friday and Cyber Monday<\/li>\n<li>Clearance and end-of-season sales<\/li>\n<li>Category 2+1 free promotions in the cart<\/li>\n<\/ul>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li>Writes percentage or fixed sale prices onto matching WooCommerce products<\/li>\n<li>Targets product categories and brands<\/li>\n<li>Excludes individual products or tags<\/li>\n<li>Schedules campaign start and end dates<\/li>\n<li>Imports regular prices and sale prices from Excel or CSV by SKU<\/li>\n<li>Applies rules in batches, with an admin progress screen<\/li>\n<li>Marks plugin-managed sale prices with its own metadata<\/li>\n<li>Cleans up ineligible or expired prices the plugin applied<\/li>\n<li>Syncs an optional sale category<\/li>\n<li>Provides WP-CLI commands for apply, cleanup, and repair<\/li>\n<li>Works with High-Performance Order Storage (HPOS)<\/li>\n<li>Cart discount rules: 2+1 free \u2014 every 3 products from a category, the cheapest unit is free<\/li>\n<\/ul>\n\n<p>WooCommerce must be installed and active.<\/p>\n\n<h4>What it does not do<\/h4>\n\n<ul>\n<li>It does not create WooCommerce coupons<\/li>\n<li>It does not replace a full B2B or dynamic pricing engine<\/li>\n<li>It does not silently overwrite unrelated sale prices you set by hand<\/li>\n<li>Cart 2+1 rules do not write <code>_sale_price<\/code> on products; they discount the cart total<\/li>\n<\/ul>\n\n<h4>Safe workflow<\/h4>\n\n<ol>\n<li>Test on staging first, with a catalog similar to production.<\/li>\n<li>Create a campaign rule or import sale prices by SKU.<\/li>\n<li>Apply in batches from the admin screen or WP-CLI.<\/li>\n<li>The plugin writes <code>_sale_price<\/code> through the WooCommerce product API and stores metadata on products it manages.<\/li>\n<li>When a campaign ends or a product is no longer eligible, run cleanup so only plugin-managed sale prices are removed.<\/li>\n<\/ol>\n\n<h4>WP-CLI examples<\/h4>\n\n<p>Apply every active campaign, or one rule:<\/p>\n\n<pre><code>wp hypemediasystem-sale-rules apply\nwp hypemediasystem-sale-rules apply --discount-id=5\n<\/code><\/pre>\n\n<p>Preview or remove plugin-managed sale prices:<\/p>\n\n<pre><code>wp hypemediasystem-sale-rules cleanup --dry-run\nwp hypemediasystem-sale-rules cleanup --all\n<\/code><\/pre>\n\n<p>Repair products that have an active schedule but the wrong sale price:<\/p>\n\n<pre><code>wp hypemediasystem-sale-rules repair_all --batch=100\n<\/code><\/pre>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>hypemediasystem-sale-rules<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the Plugins screen.<\/li>\n<li>Open WooCommerce \u2192 Product Discounts.<\/li>\n<li>Create a campaign rule and click Apply Discounts Now, or import a SKU file.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20replace%20woocommerce%20coupons%3F\"><h3>Does this replace WooCommerce coupons?<\/h3><\/dt>\n<dd><p>No. Coupons stay in WooCommerce. This plugin writes sale prices on matching products so large catalogs can run campaigns without a coupon code.<\/p><\/dd>\n<dt id=\"will%20it%20overwrite%20prices%20i%20set%20by%20hand%3F\"><h3>Will it overwrite prices I set by hand?<\/h3><\/dt>\n<dd><p>The plugin marks products it manages with its own metadata and skips unrelated manual sales where possible. Always test on staging first.<\/p><\/dd>\n<dt id=\"what%20excel%20columns%20are%20required%3F\"><h3>What Excel columns are required?<\/h3><\/dt>\n<dd><p>For regular prices: <code>SKU<\/code> and <code>regular_price<\/code> (or <code>pret<\/code>). For sale prices: <code>SKU<\/code> and <code>sale_price<\/code> (or <code>pret_redus<\/code>).<\/p><\/dd>\n<dt id=\"who%20should%20not%20use%20this%3F\"><h3>Who should not use this?<\/h3><\/dt>\n<dd><p>Stores that only need a simple coupon or a one-product sale. Use WooCommerce core for that.<\/p><\/dd>\n<dt id=\"how%20does%202%2B1%20free%20%28cart%20rule%29%20work%3F\"><h3>How does 2+1 free (cart rule) work?<\/h3><\/dt>\n<dd><p>Create a rule under Cart discount rules, pick a category, and set products in set to 3. When the cart has 3 (or 6, 9, \u2026) products from that category \u2014 even different SKUs \u2014 the cheapest unit in each set of 3 is free as a cart fee. Catalog sale-price campaigns are unchanged.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Ship Romanian translations for the Cart discount rules tab and include the compiled .mo in the plugin zip.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Fix cart 2+1: consume full groups (no double-free on overlapping categories), split fees by tax class, prefer post-coupon line prices, require categories, and keep cart rules out of catalog schedules.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Add cart discount rules tab with 2+1 free (cheapest product in a category set is free).<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Reposition the WordPress.org listing as a bulk sale-price manager for large catalogs.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Load the plugin text domain so translate.wordpress.org language packs apply.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Ignore request-supplied apply-progress keys and only read or write the current user's plugin transient.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Require a nonce and manage_woocommerce capability before applying a single discount over AJAX.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Directory submission: distinctive display name and slug, enqueued admin assets, and WooCommerce plugin URL lookup.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Set Author URI to https:\/\/www.hype.ro and omit Plugin URI so the two headers are not identical.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<\/ul>","raw_excerpt":"Bulk sale price manager for WooCommerce stores with many SKUs, Excel imports, scheduled campaign rules, and cart 2+1 free promotions.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/jv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/357559","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/jv.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/jv.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=357559"}],"author":[{"embeddable":true,"href":"https:\/\/jv.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hypemediasystem"}],"wp:attachment":[{"href":"https:\/\/jv.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=357559"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/jv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=357559"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/jv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=357559"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/jv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=357559"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/jv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=357559"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/jv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=357559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}