Get in touch
  • WordPress
  • Shipping
  • v1.0.2

Box Rate Shipping for WooCommerce

Woo calculates shipping by weight, the courier charges by box. This plugin packs the cart into your real boxes and charges for those. Catches products without dimensions after import. Free — 3 formats, Pro — no limit.

Pro 990 UAH / year
Download Free
Compatibility
WordPress 6.2+, WooCommerce 6.0+ (tested on WP 7.1 / Woo 10.7)
PHP
7.4 or newer
Licence
one site, annual
Trial
7 days, no card, one per site
Or all 173 Pro modules with All Access — 4 990 ₴ / year

The module in action — 37 sec

Clear even without sound: Ukrainian subtitles

What Free has,
and what Pro adds

The free version works with no time limit. Pro adds the rest of the features in the table.

Feature Free Pro
Shipping rate is calculated by the boxes the order actually fits into ✔ ✔
Checked against all three sides, not just volume ✔ ✔
Order splits across several boxes when it doesn't fit one ✔ ✔
Own box catalogue: dimensions, max weight, price, per-kg surcharge ✔ ✔
Handling surcharge — once per shipment, not per box ✔ ✔
Free shipping above an order total ✔ ✔
Item rotation can be switched off for "one way up only" products ✔ ✔
By default does NOT calculate a cart with a product without dimensions ✔ ✔
Names of such products are logged under WooCommerce → Status → Logs ✔ ✔
Separate screen listing products with empty dimensions ✔ ✔
Fixed oversize rate or hiding the method — your choice ✔ ✔
Dimensions in your store's own units, no hidden conversions ✔ ✔

What it looks like

Box catalogue and rules. At the top — diagnostics: 39 products in this store have no dimensions, and by default the module calculates nothing for them.
Box catalogue and rules. At the top — diagnostics: 39 products in this store have no dimensions, and by default the module calculates nothing for them.
Product dimensions — length, width, height and weight — are taken from WooCommerce's own fields. That's exactly what the packer reads, without inventing anything on your behalf.
Product dimensions — length, width, height and weight — are taken from WooCommerce’s own fields. That’s exactly what the packer reads, without inventing anything on your behalf.
Module rules. The main decision is what to do with a product without dimensions: by default, 'Quote nothing', because treating such a product as flat is exactly the mistake that leads to a surprise bill from the courier.
Module rules. The main decision is what to do with a product without dimensions: by default, “Quote nothing”, because treating such a product as flat is exactly the mistake that leads to a surprise bill from the courier.

The trial starts when you ask

A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — one site

Moving the store? Unbind the licence on the old domain and activate it on the new one yourself.

Technical requirements

  • WordPress 6.2+ (tested on 7.1).
  • WooCommerce 6.0+ (tested on 10.7).
  • PHP 7.4+.
  • Product dimensions and weight filled in — no module of this kind can calculate honestly without them.
  • Compatibility with HPOS and the block cart/checkout is explicitly declared.

Version history

v1.0.2 Current

Box settings: the Name field no longer overlaps the Length column.

v1.0.1

A purchased licence stays yours: the Pro features keep working after the licence term ends — the term covers updates and support.

v1.0.0 First release

Box catalogue, first-fit-decreasing packing with a three-side check, splitting an order across multiple boxes, per-kilogram and handling surcharges, free shipping above a threshold,…

Frequently bought with Box Rate Shipping for WooCommerce

4 modules in one order — 40% cheaper than separately

“Store starter” bundle Box Rate Shipping Nova Poshta Premium Mono Acquiring Telegram notifications and Viber/SMS for customers Need more — all 173 modules in All Access for 4 990 ₴.
2 490 ₴ / year instead of 4 160 UAH bought separately
Buy the bundle →

Full module description

WooCommerce calculates shipping by weight and shipping class. The courier charges for the box the parcel actually fits in. For anything bulky, those two numbers aren’t even close, and the gap eats into your margin on every order.

Three T-shirts and one kettle weigh the same, but they travel in completely different boxes. A pillow, a dog bed, a lampshade: light, but they take up as much room as a 150 UAH box.

This module closes exactly that gap. You describe the boxes you actually ship in, and the checkout shows the cost of the boxes the order genuinely fits into.

What the buyer sees

An ordinary shipping method in the cart and at checkout, with whatever name you gave it. No extra fields, popups, or steps. The order details show which boxes made up the price — for example “Small × 2”.

If a product lands in the cart that can’t be honestly calculated, the method simply isn’t shown — instead of showing a confidently wrong amount.

What the admin gets

Box table: name, length, width, height, maximum weight, cost, and a per-kilogram surcharge. Dimensions in whatever units your WooCommerce uses — nothing is converted behind your back.

Rules: what to do with a product without dimensions, what to do with an oversized item, a handling surcharge (once per shipment, not per box), free shipping above a threshold, permission to rotate items when packing.

Separately — diagnostics: a list of published products with an empty length, width, or height, with edit links. On our own test site, 39 out of 40 turned out to be like that.

How it works, step by step

  1. The cart is broken down into individual physical items: three identical products are three items, each needing its own space, not one object with a quantity of 3.
  2. Items are sorted from largest by volume.
  3. Each item is first tried against already-open boxes — starting with the one with the least free space left, so boxes fill up instead of multiplying.
  4. If it doesn’t fit any open box, the smallest box it physically fits into is opened.
  5. Price = sum of the costs of the boxes used, plus weight surcharges, plus a one-off handling surcharge.

The “fits” check is not by volume. A 90 cm-long item won’t go into a 40 cm box, however much free volume is left, so every candidate is checked against all three sides. Rotating the item is optional — for products that must only travel one way up, it can be switched off.

Under the hood

The algorithm is first-fit-decreasing: largest items first, the smallest box they fit into. It’s not perfect three-dimensional packing — the perfect version is an NP-hard problem, and no checkout should be solving it. But it never claims a packing that’s physically impossible, and that property is what keeps the calculation honest.

The rotation check is done cheaply and correctly: both triples of sides are sorted and compared member by member — this covers all six orientations without enumerating them. Plus a small tolerance so a 30.0 cm item is treated as fitting a 30.0 cm box, as it would be in any warehouse.

🔴 The main decision is what to do with a product without dimensions. The most common reason a box-rate calculation produces nonsense has nothing to do with the maths: the store imported a feed that left the dimension fields empty, and half the catalogue officially has a zero size. Most modules happily treat such products as flat, and the seller finds out from the courier’s invoice.

Here, by default, the module refuses to calculate a cart containing a product without dimensions, logs the names of those products under WooCommerce → Status → Logs, and lists them on its own settings screen. Two other policies (treat as the largest box, or pack by weight only) are available — but that’s a decision you make deliberately, not a default behaviour you never saw.

Installation

  1. Plugins → Add New → Upload Plugin → zip → activate. WooCommerce must be active.
  2. Open Box rate in the admin menu and describe your boxes.
  3. Check the warning about products without dimensions — if there is one, fix the import first.
  4. Add the “Box rate” method to the relevant shipping zone: WooCommerce → Shipping.

Questions
about the module

Didn't find the answer? Message us on Telegram and we'll reply within a business day.

@catcode_support Setup, compatibility, activation
Is this a real 3D packer?

No. It's first-fit-decreasing with a genuine per-side check: it may open one box more than the perfect algorithm, but it will never promise an impossible packing.

What units do I enter boxes in?

Your own, from WooCommerce → Products → Dimensions. Nothing is converted.

What happens with an oversized product?

Your choice: don't show the method, or take a fixed oversize rate.

Does it work with variable products?

Yes, it takes the dimensions of the specific variation.

Why did the method suddenly disappear from checkout?

Most likely there's a product without dimensions in the cart. The module logs the reason and product names under WooCommerce → Status → Logs.

Not quite what you are looking for?

We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.

Order a custom module