{"id":388552,"date":"2026-11-02T15:03:02","date_gmt":"2026-11-02T15:03:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/product-pack-sales-for-woocommerce\/"},"modified":"2026-11-02T15:02:28","modified_gmt":"2026-11-02T15:02:28","slug":"product-pack-sales-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/product-pack-sales-for-woocommerce\/","author":23587019,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.22","stable_tag":"0.1.22","tested":"7.1.4","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Product Pack Sales for WooCommerce","header_author":"Vopy Web Dev","header_description":"Sell products as packs and bundles (unit, box, or pallet) in WooCommerce. Customers pick a pack size; stock is reduced by pieces in the pack.","assets_banners_color":"507f8f","last_updated":"2026-11-02 15:02:28","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/product-pack-sales-for-woocommerce\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":103,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.22":{"tag":"0.1.22","author":"vopywebdev","date":"2026-11-02 15:02:28","revision":3780084}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3780084,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3780084,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3780084,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3780084,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.22"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[31088,6601,51543,51032,286],"plugin_category":[45],"plugin_contributors":[290327],"plugin_business_model":[],"class_list":["post-388552","plugin","type-plugin","status-publish","hentry","plugin_tags-bundles","plugin_tags-inventory","plugin_tags-packs","plugin_tags-wholesale","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-vopywebdev","plugin_committers-vopywebdev"],"banners":{"banner":"https:\/\/ps.w.org\/product-pack-sales-for-woocommerce\/assets\/banner-772x250.png?rev=3780084","banner_2x":"https:\/\/ps.w.org\/product-pack-sales-for-woocommerce\/assets\/banner-1544x500.png?rev=3780084","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/product-pack-sales-for-woocommerce\/assets\/icon-128x128.png?rev=3780084","icon_2x":"https:\/\/ps.w.org\/product-pack-sales-for-woocommerce\/assets\/icon-256x256.png?rev=3780084","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Product Pack Sales for WooCommerce adds pack and bundle options to a normal simple or variable product. The customer chooses Single, Box \u00d74, or Pallet \u00d720. The cart quantity is the number of packs. Stock, weight, and availability use pieces: packs \u00d7 multiplier.<\/p>\n\n<p>Set packs on one product from the Inventory tab, or on each variation. One pack is enough. Names are yours; Box and Pallet are only examples.<\/p>\n\n<p>This is <strong>not<\/strong> a multi-product bundle builder. It sells the same product in larger pack sizes (box, case, pallet) with correct piece-level stock.<\/p>\n\n<h4>Included features<\/h4>\n\n<ul>\n<li>Per-product and per-variation packs \/ bundles<\/li>\n<li>Pack selector on the product page<\/li>\n<li>Piece-based stock, weight, cart, checkout, orders, emails, and refunds<\/li>\n<li>Price = current product price \u00d7 pack multiplier (sale price included)<\/li>\n<\/ul>\n\n<p>All features included in this plugin work without payment, license keys, or upgrade.<\/p>\n\n<h4>Optional Pro add-on (separate download)<\/h4>\n\n<p>Catalog-wide packs, product\/category exclusions, a custom pack price, and packs-only mode are available in a separate Pro add-on. That code is <strong>not<\/strong> part of this plugin.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install the zip via Plugins \u2192 Add New \u2192 Upload.<\/li>\n<li>Activate it. WooCommerce must already be active.<\/li>\n<li>Edit a product, open Inventory, and add a pack name plus a whole multiplier of at least 2.<\/li>\n<li>Save. The product page shows the pack selector in front of the quantity field.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20create%20a%20new%20product%20or%20a%20bundle%20of%20different%20products%3F\"><h3>Does this create a new product or a bundle of different products?<\/h3><\/dt>\n<dd><p>No. It is a way to buy the same product in larger packs. One box removes N pieces of that product from stock.<\/p><\/dd>\n<dt id=\"what%20does%20the%20cart%20quantity%20mean%3F\"><h3>What does the cart quantity mean?<\/h3><\/dt>\n<dd><p>The number of packs. A line of 2 with the label \u201cBox \u00b7 4 pcs each\u201d is two boxes and 8 pieces of stock.<\/p><\/dd>\n<dt id=\"what%20happens%20on%20refund%3F\"><h3>What happens on refund?<\/h3><\/dt>\n<dd><p>The refund quantity is still the number of packs. The plugin returns the rest of the pieces in each refunded pack so the stock movement matches the original reduction.<\/p><\/dd>\n<dt id=\"can%20i%20set%20one%20rule%20for%20the%20whole%20catalog%3F\"><h3>Can I set one rule for the whole catalog?<\/h3><\/dt>\n<dd><p>Not in this free plugin. Catalog-wide packs and related options are offered in a separate Pro add-on.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.22<\/h4>\n\n<ul>\n<li>WordPress.org review: escape filtered admin field markup on output with wp_kses() and a form-field allowlist.<\/li>\n<\/ul>\n\n<h4>0.1.21<\/h4>\n\n<ul>\n<li>WordPress.org review: enqueue Freemius menu CSS; Contributors username; no automatic sibling deactivate.<\/li>\n<\/ul>\n\n<h4>0.1.20<\/h4>\n\n<ul>\n<li>Silence Plugin Check warnings for WC add-to-cart nonce and WooCommerce hide_save_button global.<\/li>\n<\/ul>\n\n<h4>0.1.19<\/h4>\n\n<ul>\n<li>Ship Freemius SDK under vendor\/freemius for WordPress.org Plugin Check; strip SDK junk files from deploy zip.<\/li>\n<\/ul>\n\n<h4>0.1.18<\/h4>\n\n<ul>\n<li>Align text domain with plugin slug for WordPress.org Plugin Check.<\/li>\n<li>Freemius menu\/license UX; Free vs Pro labels on the plugins screen; author Vopy Web Dev.<\/li>\n<\/ul>\n\n<h4>0.1.17<\/h4>\n\n<ul>\n<li>Keep legacy cart packs without pack_id; harden refund restock so pack rows are never discarded on desync.<\/li>\n<\/ul>\n\n<h4>0.1.16<\/h4>\n\n<ul>\n<li>Move Pack Sales into WooCommerce \u2192 Settings; Freemius Account\/Contact\/Upgrade back-link.<\/li>\n<li>Fix Pro catalog save (no nested form inside WC settings); unique nonce.<\/li>\n<li>Fix refund restock when multiple lines share an SKU; category exclude includes ancestors.<\/li>\n<li>CSV\/WPAI pack column; drop stale cart packs; Free settings playbook without locked Pro UI.<\/li>\n<\/ul>\n\n<h4>0.1.15<\/h4>\n\n<ul>\n<li>Rename to Product Pack Sales for WooCommerce (slug product-pack-sales-for-woocommerce).<\/li>\n<\/ul>\n\n<h4>0.1.14<\/h4>\n\n<ul>\n<li>WordPress.org compliance: rename for trademark guidelines; remove locked Pro UI (trialware).<\/li>\n<\/ul>\n\n<h4>0.1.13<\/h4>\n\n<ul>\n<li>Freemius-ready licensing bootstrap; add 300x300 plugin icon.<\/li>\n<li>Clarify packs &amp; bundles naming for discovery.<\/li>\n<\/ul>\n\n<h4>0.1.12<\/h4>\n\n<ul>\n<li>Restore WooCommerce form-field checkbox layout; simplify product\/variation pack rows.<\/li>\n<\/ul>\n\n<h4>0.1.11<\/h4>\n\n<ul>\n<li>Short pricing labels; put variation select on its own row so text is not clipped.<\/li>\n<\/ul>\n\n<h4>0.1.10<\/h4>\n\n<ul>\n<li>Compact variation pack rows; fix catalog opt-out description spacing.<\/li>\n<\/ul>\n\n<h4>0.1.9<\/h4>\n\n<ul>\n<li>Refresh admin UI: tokens, softer cards, pack rows, Select2 chips.<\/li>\n<\/ul>\n\n<h4>0.1.8<\/h4>\n\n<ul>\n<li>Keep storefront CSS theme-neutral; reuse WooCommerce form-row and onsale classes.<\/li>\n<\/ul>\n\n<h4>0.1.7<\/h4>\n\n<ul>\n<li>Use Select2 chips for skip products\/categories and restyle Remove.<\/li>\n<\/ul>\n\n<h4>0.1.6<\/h4>\n\n<ul>\n<li>Redesign the Pack Sales settings screen.<\/li>\n<\/ul>\n\n<h4>0.1.5<\/h4>\n\n<ul>\n<li>Show pack discounts on the product page and in the cart when the pack is cheaper than unit \u00d7 multiplier.<\/li>\n<\/ul>\n\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>Fix pack amount not saving when another pack uses unit \u00d7 multiplier pricing.<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Hide the pack amount field when pricing is unit price \u00d7 multiplier.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Fix Inventory pack spacing: use WooCommerce form-field gutters instead of a second float column.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Align pack fields with the WooCommerce product panel layout.<\/li>\n<li>Add a Settings link on the Plugins screen.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release. Per-product packs, piece stock, and a Pro module boundary.<\/li>\n<\/ul>","raw_excerpt":"Sell products as packs and bundles (unit, box, or pallet) in WooCommerce. Stock drops by pieces inside the pack.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/388552","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=388552"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vopywebdev"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=388552"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=388552"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=388552"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=388552"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=388552"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=388552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}