{"id":337325,"date":"2026-09-17T11:10:47","date_gmt":"2026-09-17T11:10:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/idtrace-variation-quantity-rules-for-woocommerce\/"},"modified":"2026-09-17T11:10:24","modified_gmt":"2026-09-17T11:10:24","slug":"idtrace-variation-quantity-rules-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/bs.wordpress.org\/plugins\/idtrace-variation-quantity-rules-for-woocommerce\/","author":23526298,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.5","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"IDTRACE \u2013 Variation Quantity Rules for WooCommerce","header_author":"IDTRACE","header_description":"Permet de d\u00e9finir une quantit\u00e9 minimale, un pas (step) et une quantit\u00e9 maximale par variation WooCommerce. Con\u00e7u pour la vente d'\u00e9tiquettes RFID en rouleaux, o\u00f9 chaque r\u00e9f\u00e9rence a ses propres r\u00e8gles de commande.","assets_banners_color":"2d5277","last_updated":"2026-09-17 11:10:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/www.idtrace.net","rating":0,"author_block_rating":0,"active_installs":0,"downloads":44,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"idtrace","date":"2026-09-17 11:10:24","revision":3700141}},"upgrade_notice":{"1.0.0":"<p>Initial release. No upgrade required.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3700141,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3700141,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1824x576.png":{"filename":"banner-1824x576.png","revision":3700179,"resolution":"1824x576","location":"assets","locale":"","width":1824,"height":576},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3700141,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3700141,"resolution":"1","location":"assets","locale":"","width":1422,"height":355},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3700141,"resolution":"2","location":"assets","locale":"","width":1106,"height":506},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3700141,"resolution":"3","location":"assets","locale":"","width":1212,"height":435}},"screenshots":{"1":"Quantity rule fields in WooCommerce admin \u2014 minimum, step and maximum per variation.","2":"Frontend product page \u2014 quantity field automatically set to the minimum on variation selection.","3":"Validation message displayed when a customer enters an invalid quantity."}},"plugin_section":[],"plugin_tags":[281265,166681,276936,18228,286],"plugin_category":[45],"plugin_contributors":[281266],"plugin_business_model":[],"class_list":["post-337325","plugin","type-plugin","status-publish","hentry","plugin_tags-min-qty","plugin_tags-minimum-quantity","plugin_tags-quantity-step","plugin_tags-variation","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-idtrace","plugin_committers-idtrace"],"banners":{"banner":"https:\/\/ps.w.org\/idtrace-variation-quantity-rules-for-woocommerce\/assets\/banner-772x250.png?rev=3700141","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/idtrace-variation-quantity-rules-for-woocommerce\/assets\/icon-128x128.png?rev=3700141","icon_2x":"https:\/\/ps.w.org\/idtrace-variation-quantity-rules-for-woocommerce\/assets\/icon-256x256.png?rev=3700141","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/idtrace-variation-quantity-rules-for-woocommerce\/assets\/screenshot-1.png?rev=3700141","caption":"Quantity rule fields in WooCommerce admin \u2014 minimum, step and maximum per variation."},{"src":"https:\/\/ps.w.org\/idtrace-variation-quantity-rules-for-woocommerce\/assets\/screenshot-2.png?rev=3700141","caption":"Frontend product page \u2014 quantity field automatically set to the minimum on variation selection."},{"src":"https:\/\/ps.w.org\/idtrace-variation-quantity-rules-for-woocommerce\/assets\/screenshot-3.png?rev=3700141","caption":"Validation message displayed when a customer enters an invalid quantity."}],"raw_content":"<!--section=description-->\n<p><strong>IDTRACE \u2013 Variation Quantity Rules for WooCommerce<\/strong> lets you define independent quantity rules for each variation of a variable product: minimum quantity, quantity step (increment), and optional maximum quantity.<\/p>\n\n<p>WooCommerce natively applies the same quantity constraints to all variations of a product. This plugin removes that limitation \u2014 each variation gets its own rules.<\/p>\n\n<h4>Who is this for?<\/h4>\n\n<p>Any WooCommerce store selling products where quantity depends on the variation:<\/p>\n\n<ul>\n<li><strong>Labels &amp; stationery<\/strong> \u2014 rolls of 500, 1000 or 2000 units with different minimums per reference<\/li>\n<li><strong>Food &amp; wholesale<\/strong> \u2014 packs of 6, 12 or 24 depending on the product format<\/li>\n<li><strong>Hardware &amp; industrial supplies<\/strong> \u2014 screws, bolts, fittings sold by the box of 50 or 100<\/li>\n<li><strong>Printing &amp; packaging<\/strong> \u2014 reams, cartons, palettes with format-specific batch sizes<\/li>\n<li><strong>Cosmetics &amp; pharmacy<\/strong> \u2014 consumables sold in boxes with regulated minimum quantities<\/li>\n<li><strong>Textiles &amp; haberdashery<\/strong> \u2014 spools or bobbins sold by the lot<\/li>\n<\/ul>\n\n<p>In short: if your variations have different packaging constraints, this plugin handles them cleanly.<\/p>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>Open any variable product in WooCommerce admin<\/li>\n<li>Expand a variation \u2014 three new fields appear below the price: <strong>Minimum quantity<\/strong>, <strong>Step<\/strong>, <strong>Maximum quantity<\/strong> (optional)<\/li>\n<li>Save \u2014 done<\/li>\n<\/ol>\n\n<p>On the product page, as soon as a customer selects a variation:<\/p>\n\n<ul>\n<li>The quantity field is automatically set to the minimum<\/li>\n<li>The <code>min<\/code>, <code>step<\/code> and <code>max<\/code> HTML attributes are updated accordingly<\/li>\n<li>Any invalid quantity triggers an error message before the customer can add to cart<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Per-variation minimum quantity<\/strong> \u2014 independent value for each variation<\/li>\n<li><strong>Per-variation step (increment)<\/strong> \u2014 customers can only order in multiples of the defined step, starting from the minimum<\/li>\n<li><strong>Per-variation maximum quantity<\/strong> \u2014 optional upper limit<\/li>\n<li><strong>Dynamic quantity field<\/strong> \u2014 updates instantly on variation selection (no page reload)<\/li>\n<li><strong>Dual validation<\/strong> \u2014 JavaScript for immediate user feedback + PHP server-side validation that cannot be bypassed<\/li>\n<li><strong>Cart update validation<\/strong> \u2014 rules are also enforced when quantities are edited directly in the cart<\/li>\n<li><strong>Translatable error messages<\/strong> \u2014 uses <code>wc_add_notice()<\/code>, compatible with any language<\/li>\n<li><strong>Clean uninstall<\/strong> \u2014 all plugin data is removed on uninstall; deactivation leaves data intact<\/li>\n<li><strong>OOP architecture<\/strong> \u2014 clean, maintainable, extendable codebase<\/li>\n<\/ul>\n\n<h4>Step examples<\/h4>\n\n<p>Minimum = 4 \/ Step = 4 \u2192 customer can order: 4, 8, 12, 16, 20...\nMinimum = 4 \/ Step = 1 \u2192 customer can order: 4, 5, 6, 7, 8...\nMinimum = 1 \/ Step = 1 \u2192 standard WooCommerce behavior (no constraint)<\/p>\n\n<!--section=installation-->\n<h4>From the WordPress plugin directory<\/h4>\n\n<ol>\n<li>Go to <strong>Plugins &gt; Add New<\/strong> in your WordPress admin<\/li>\n<li>Search for <strong>IDTRACE Variation Quantity Rules<\/strong><\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong><\/li>\n<\/ol>\n\n<h4>Manual installation<\/h4>\n\n<ol>\n<li>Download the ZIP file<\/li>\n<li>Go to <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong><\/li>\n<li>Upload the ZIP and click <strong>Install Now<\/strong>, then <strong>Activate<\/strong><\/li>\n<\/ol>\n\n<h4>Setup<\/h4>\n\n<ol>\n<li>Make sure WooCommerce is installed and active<\/li>\n<li>Open any <strong>variable product<\/strong><\/li>\n<li>Go to the <strong>Variations<\/strong> tab and expand a variation<\/li>\n<li>Fill in <strong>Minimum quantity<\/strong>, <strong>Step<\/strong>, and optionally <strong>Maximum quantity<\/strong><\/li>\n<li>Save the product \u2014 rules are applied immediately on the product page<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20happens%20if%20i%20leave%20all%20fields%20empty%3F\"><h3>What happens if I leave all fields empty?<\/h3><\/dt>\n<dd><p>Default WooCommerce behavior applies: minimum 1, step 1, no maximum. The plugin only overrides values you explicitly set.<\/p><\/dd>\n<dt id=\"does%20it%20work%20if%20the%20customer%20changes%20the%20quantity%20directly%20in%20the%20cart%3F\"><h3>Does it work if the customer changes the quantity directly in the cart?<\/h3><\/dt>\n<dd><p>Yes. PHP validation runs on both <code>woocommerce_add_to_cart_validation<\/code> (add to cart) and <code>woocommerce_update_cart_validation<\/code> (cart update). Rules cannot be bypassed even if JavaScript is disabled.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20simple%20products%3F\"><h3>Does it work with simple products?<\/h3><\/dt>\n<dd><p>No. This plugin targets variable products only \u2014 it manages rules at the variation level. Simple products are not affected.<\/p><\/dd>\n<dt id=\"can%20i%20set%20a%20step%20without%20setting%20a%20minimum%3F\"><h3>Can I set a step without setting a minimum?<\/h3><\/dt>\n<dd><p>Yes. If you only set a step (e.g. step = 5), the minimum defaults to 1 and the customer can order 1, 6, 11, 16... If you set both minimum = 5 and step = 5, the customer can order 5, 10, 15, 20...<\/p><\/dd>\n<dt id=\"will%20disabling%20the%20plugin%20delete%20my%20data%3F\"><h3>Will disabling the plugin delete my data?<\/h3><\/dt>\n<dd><p>No. Deactivation leaves all stored rules intact. Data is only deleted when you fully uninstall (delete) the plugin from the Plugins screen.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20woocommerce%20ajax%20variation%20saving%3F\"><h3>Is it compatible with WooCommerce AJAX variation saving?<\/h3><\/dt>\n<dd><p>Yes. The plugin hooks into <code>woocommerce_save_product_variation<\/code>, which fires in both standard product save and AJAX variation save contexts.<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20with%20a%20page%20builder%20like%20divi%20or%20elementor%3F\"><h3>Can I use this with a page builder like Divi or Elementor?<\/h3><\/dt>\n<dd><p>Yes, as long as the standard WooCommerce variable product form is rendered. The plugin uses native WooCommerce JavaScript events (<code>found_variation<\/code>, <code>reset_data<\/code>) which are independent of the page builder.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Per-variation minimum quantity, step and maximum quantity fields in WooCommerce admin<\/li>\n<li>Dynamic quantity field update on variation selection (JS)<\/li>\n<li>Server-side validation on add to cart and cart update (PHP)<\/li>\n<li>Translatable error messages via wc_add_notice()<\/li>\n<li>Clean uninstall via uninstall.php<\/li>\n<\/ul>","raw_excerpt":"Set a minimum quantity, step, and maximum per WooCommerce variation. Perfect for products sold in rolls, packs, boxes or any batch-based unit.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/337325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=337325"}],"author":[{"embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/idtrace"}],"wp:attachment":[{"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=337325"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=337325"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=337325"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=337325"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=337325"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=337325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}