{"id":360371,"date":"2026-09-06T08:47:18","date_gmt":"2026-09-06T08:47:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/weight-based-product-packs-for-woocommerce\/"},"modified":"2026-09-06T08:47:06","modified_gmt":"2026-09-06T08:47:06","slug":"weight-based-product-packs","status":"publish","type":"plugin","link":"https:\/\/co.wordpress.org\/plugins\/weight-based-product-packs\/","author":15755548,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Weight-Based Product Packs for WooCommerce","header_author":"Ali Atashinbar","header_description":"Let customers fill weight-based packs (e.g. 1 kg boxes) with pre-defined weight bundles. A pack can only be purchased when its total weight exactly matches its capacity.","assets_banners_color":"664492","last_updated":"2026-09-06 08:47:06","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":30,"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":"atashinbar","date":"2026-09-06 08:47:06","revision":3683185}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3683185,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3683185,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3683185,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3683185,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[268156,263827,9607,10234,286],"plugin_category":[45],"plugin_contributors":[279361],"plugin_business_model":[],"class_list":["post-360371","plugin","type-plugin","status-publish","hentry","plugin_tags-box-builder","plugin_tags-mix-and-match","plugin_tags-pack","plugin_tags-weight","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-atashinbar","plugin_committers-atashinbar"],"banners":{"banner":"https:\/\/ps.w.org\/weight-based-product-packs\/assets\/banner-772x250.png?rev=3683185","banner_2x":"https:\/\/ps.w.org\/weight-based-product-packs\/assets\/banner-1544x500.png?rev=3683185","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/weight-based-product-packs\/assets\/icon-128x128.png?rev=3683185","icon_2x":"https:\/\/ps.w.org\/weight-based-product-packs\/assets\/icon-256x256.png?rev=3683185","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>This plugin is designed for stores that sell by filling containers with a chosen combination of goods \u2014 for example nuts and dried fruits packed into pre-ordered 1 kg, 2 kg or 5 kg boxes.<\/p>\n\n<p>The customer picks a pack, then fills it with the weight bundles you define (e.g. a 100 g pistachio pack, a 200 g almond pack). The <strong>total weight must exactly match the pack capacity<\/strong> \u2014 the Add to Cart button stays disabled until the pack is perfectly full.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>New \"Weight-Based Pack\" product type with any capacity (grams)<\/li>\n<li>Fill packs with weight bundles (simple products or product variations)<\/li>\n<li>Pack-size switcher when sibling packs (e.g. 1\/2\/5 kg) share the same items category<\/li>\n<li>Grouped cards: one card per item with its weight\/grade variations inside<\/li>\n<li>Weight progress bar, live price calculation and a visual box preview on the product page<\/li>\n<li>Price = sum of bundle prices + optional fixed box cost<\/li>\n<li>Server-side validation: under-filled and over-filled packs are rejected<\/li>\n<li>Stock is reduced automatically after payment and restored on cancellation<\/li>\n<li>Contents breakdown shown in cart, checkout, admin orders and emails<\/li>\n<li>Shipping weight of each pack equals its capacity<\/li>\n<li>Multiple packs with different contents in one order<\/li>\n<li>HPOS compatible; tested with WooCommerce 6\u201311<\/li>\n<li>Translation ready (Persian translation included)<\/li>\n<\/ul>\n\n<h3>Usage<\/h3>\n\n<h4>Step 1: create the weight bundles<\/h4>\n\n<p>For each item (pistachios, almonds, ...) create a WooCommerce product:<\/p>\n\n<ul>\n<li><strong>Recommended \u2014 variable product:<\/strong> e.g. \"Pistachios\" with a \"Weight\" attribute and 100 g \/ 200 g \/ 500 g variations. Give each variation a <strong>price<\/strong> and a <strong>weight<\/strong> (the standard WooCommerce weight field) and, with stock management enabled, a <strong>stock quantity<\/strong> (e.g. 100 units of the 100 g bundle).<\/li>\n<li><strong>Simple product:<\/strong> each bundle is a standalone product with a price, weight and stock.<\/li>\n<\/ul>\n\n<p>Important: bundle weights must be entered in the standard WooCommerce weight field; the plugin converts them to grams based on the store weight unit (WooCommerce \u2192 Settings \u2192 Shipping \u2192 Weight unit). With the unit set to kg, a 100 g bundle is 0.1.<\/p>\n\n<p>Put all items in one product category (e.g. \"Nuts\").<\/p>\n\n<h4>Step 2: create the pack<\/h4>\n\n<ol>\n<li>Go to Products \u2192 Add New.<\/li>\n<li>In the Product data box set the type to <strong>Weight-Based Pack<\/strong>.<\/li>\n<li>In the <strong>Pack Settings<\/strong> tab:\n\n<ul>\n<li>Pack capacity (grams): e.g. 1000 for a 1 kg box<\/li>\n<li>Box cost (optional): fixed packaging amount<\/li>\n<li>Allowed items category: the category from step 1<\/li>\n<li>Excluded IDs (optional)<\/li>\n<\/ul><\/li>\n<li>Publish.<\/li>\n<\/ol>\n\n<p>Repeat with capacities 2000 and 5000 for the 2 kg and 5 kg boxes.<\/p>\n\n<h4>Step 3: the customer experience<\/h4>\n\n<ol>\n<li>The customer opens a pack from your shop (the \"Build pack\" button).<\/li>\n<li>Using the + \/ \u2212 buttons they choose how many of each bundle to include; the weight progress bar and live price update as they go.<\/li>\n<li>\"Add pack to cart\" is enabled only when the total weight exactly matches the capacity (e.g. 5 \u00d7 200 g = 1000 g).<\/li>\n<li>The customer can add more packs with different combinations to the same cart and check out once.<\/li>\n<\/ol>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>weight-based-product-packs<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate \"Weight-Based Product Packs for WooCommerce\" on the Plugins screen.<\/li>\n<li>Follow the Usage steps below.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20is%20a%20bundle%20missing%20from%20the%20pack%20builder%20page%3F\"><h3>Why is a bundle missing from the pack builder page?<\/h3><\/dt>\n<dd><p>The bundle must: belong to the pack's selected category, have a weight greater than zero, be in stock and not be excluded. Variations must also be published.<\/p><\/dd>\n<dt id=\"can%20a%20customer%20buy%20a%20partially%20filled%20pack%3F\"><h3>Can a customer buy a partially filled pack?<\/h3><\/dt>\n<dd><p>No. The button is disabled client-side, and the server rejects both under-filled and over-filled packs; contents are re-validated in the cart and at checkout.<\/p><\/dd>\n<dt id=\"where%20do%20prices%20come%20from%3F\"><h3>Where do prices come from?<\/h3><\/dt>\n<dd><p>Always from the server, using current product prices; browser-side tampering has no effect.<\/p><\/dd>\n<dt id=\"is%20stock%20reduced%3F\"><h3>Is stock reduced?<\/h3><\/dt>\n<dd><p>Yes \u2014 after payment each bundle's stock is reduced by the ordered quantity, and restored if the order is cancelled.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20template%3F\"><h3>Can I customize the template?<\/h3><\/dt>\n<dd><p>Yes \u2014 copy <code>templates\/single-product\/add-to-cart\/pack-builder.php<\/code> to <code>your-theme\/woocommerce\/single-product\/add-to-cart\/pack-builder.php<\/code> and edit it. Styles use the <code>wbpp-*<\/code> classes.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Let customers fill weight-based packs with pre-defined bundles. Packs can only be purchased when filled exactly to capacity.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/360371","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=360371"}],"author":[{"embeddable":true,"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/atashinbar"}],"wp:attachment":[{"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=360371"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=360371"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=360371"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=360371"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=360371"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=360371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}