Title: Shipeach – Per Product Shipping for WooCommerce
Author: Emtiaz Zahid
Published: <strong>October 26, 2026</strong>
Last modified: October 26, 2026

---

Search plugins

![](https://ps.w.org/shipeach-per-product-shipping-for-woocommerce/assets/banner-
772x250.png?rev=3766212)

![](https://ps.w.org/shipeach-per-product-shipping-for-woocommerce/assets/icon.svg?
rev=3766212)

# Shipeach – Per Product Shipping for WooCommerce

 By [Emtiaz Zahid](https://profiles.wordpress.org/emtiazzahid/)

[Download](https://downloads.wordpress.org/plugin/shipeach-per-product-shipping-for-woocommerce.1.0.0.zip)

 * [Details](https://wordpress.org/plugins/shipeach-per-product-shipping-for-woocommerce/#description)
 * [Reviews](https://wordpress.org/plugins/shipeach-per-product-shipping-for-woocommerce/#reviews)
 *  [Installation](https://wordpress.org/plugins/shipeach-per-product-shipping-for-woocommerce/#installation)
 * [Development](https://wordpress.org/plugins/shipeach-per-product-shipping-for-woocommerce/#developers)

 [Support](https://wordpress.org/support/plugin/shipeach-per-product-shipping-for-woocommerce/)

## Description

Shipeach adds per product shipping to WooCommerce: set a shipping cost on each product
and each variation, by country, state or postcode, and WooCommerce charges it, either
as its own shipping method in your zones or on top of your other shipping methods.
It is for stores where shipping depends on the item rather than the cart: furniture,
art, plants, bulky or fragile goods, drop-shipped items with supplier-set shipping.
It does not fetch carrier rates, print labels or pack boxes.

Shipeach is an independent plugin and is not affiliated with WooCommerce or Automattic.

#### Features

 * **Rules on every product.** Under Product data  Shipping, below the shipping 
   class, tick “Per-product shipping” and add rules: Country (any or one country),
   State (any, a state from WooCommerce’s list, or a code for countries without 
   a list), Postcode, a line cost charged once per cart line and an item cost charged
   per unit. Add and remove rows without reloading the page. Up to 200 rules per
   product.
 * **Postcodes like shipping zones.** A postcode can be exact (`SW1A 1AA`), a wildcard(`
   PE*`) or a range (`1000-1999` or `1000...1999`). They are matched with the same
   WooCommerce function shipping zones use. A hyphen between two numbers of the 
   same length, lower number first, is read as a range.
 * **Variation overrides.** Each variation has an “Override shipping rules” checkbox
   and its own table. When it is ticked, the variation’s rules replace the parent
   product’s rules entirely; otherwise the variation uses the parent’s.
 * **Most specific rule wins.** A postcode rule beats a state rule, which beats 
   a country rule, which beats an “any” rule. Between rules that are equally specific,
   the first row in the table wins.
 * **“Per Product Shipping” zone method.** Add it to any shipping zone. Settings:
   Title, Tax status, Default line cost and Default item cost (used for products
   with per-product shipping on but no rule matching the address), “Products without
   per-product shipping” (charge nothing for them, or do not offer the method), “
   Hide Free Shipping when this method applies” and “Hide Local Pickup when this
   method applies”. The rate is the sum of every line’s line cost plus item cost
   × quantity.
 * **Or add the costs to your other methods.** Under WooCommerce  Settings  Shipping
   Per Product Shipping, “Add per-product costs to every other shipping method” 
   adds the package’s per-product cost to every other rate offered for the package,
   such as Flat rate. Free Shipping is never changed, Local Pickup is left unchanged
   unless you untick that option, and taxes are recalculated for taxable rates. 
   The zone method and this option can be used together; the Per Product Shipping
   rate itself is not increased.
 * **Breakdown on the order.** The order’s shipping line stores which product cost
   what. The admin order screen shows it as “Per-product breakdown: Product A 9.00,
   Product B 4.00”. Customers do not see it.
 * **Quick edit and bulk edit.** From the products list, turn per-product shipping
   on or off and set the line and item cost of the “Any country” rule for one or
   many products.
 * **Tools  Per Product Shipping.** Copy the rules of one product or variation to
   other products and variations in one form, and see how many products use per-
   product shipping with a link to the products list filtered to them. The products
   list also gets a “Per-product shipping: on / off” filter.
 * **WP-CLI.** `wp shipeach rules list [--product=<id>]`, `wp shipeach rules set
   <product> --country= --state= --postcode= --line= --item=`, `wp shipeach rules
   import <file.csv> [--mode=replace|append]` and `wp shipeach rules export [--out
   =<file>]`.

#### How it works

 1. Open a product, go to Product data  Shipping, tick “Per-product shipping” and add
    one or more rules. For a variable product, add rules on the parent, and tick “Override
    shipping rules” on any variation that ships differently.
 2. Either add the “Per Product Shipping” method to a shipping zone (WooCommerce  Settings
    Shipping), or turn on “Add per-product costs to every other shipping method” under
    WooCommerce  Settings  Shipping  Per Product Shipping, or both.
 3. At checkout, every item in the package is matched against its rules for the shipping
    address. The matching rule’s line cost plus item cost × quantity is that line’s
    shipping, and the lines are added up.

Rates are calculated on the server, so the classic cart and checkout, the block 
cart and checkout, and the Store API all show the same amounts. When a product’s
rules change, carts calculate fresh rates instead of reusing the ones stored in 
the customer’s session.

#### Compatibility

 * Classic and block cart and checkout, and the Store API. No JavaScript runs on
   the storefront.
 * High-Performance Order Storage (HPOS): compatibility is declared and the plugin
   runs no order queries.
 * Rules are ordinary product meta (`_shipeach_enabled` and `_shipeach_rules`), 
   so WooCommerce’s “Duplicate” action copies them, and WooCommerce’s product CSV
   export and import carry them when “Export custom meta” is ticked.
 * Costs are entered in your store’s base currency. Multi-currency plugins can convert
   them with the `shipeach_rule_cost` filter.

#### Developers

Filters: `shipeach_rules_for_product` (the rules used for a cart item), `shipeach_rule_matches`(
whether a rule applies, for example quantity or weight tiers), `shipeach_rule_cost`(
the cost of one cart line), `shipeach_package_cost` (the total for a package), `
shipeach_import_rows` (CSV rows before import).
 Action: `shipeach_after_import`.
The order shipping line meta `_shipeach_breakdown` holds product or variation ID
cost.

#### More plugins by Emtiaz Zahid

 * [Launchmender](https://wordpress.org/plugins/launchmender/): 44 pre-launch checks
   with one-click fixes, a manual checklist and a client handoff report
 * [Faultwright](https://wordpress.org/plugins/faultwright/): PHP errors, JavaScript
   errors, failed cron jobs, emails and updates on one timeline
 * [Stalemender](https://wordpress.org/plugins/stalemender/): content audit that
   gives every post a Freshness Score (0–100) and tells you why
 * [Waymender](https://wordpress.org/plugins/waymender/): finds broken links without
   hammering your server, logs 404s and fixes both in one click
 * [Anchormender](https://wordpress.org/plugins/anchormender/): internal link suggestions
   while you write, an orphan post report and bulk internal linking
 * [Repeatwright](https://wordpress.org/plugins/repeatwright/): RFM customer segments,
   repeat rate, LTV and cohort retention from your own WooCommerce orders
 * [Hoverbuy](https://wordpress.org/plugins/hoverbuy-sticky-add-to-cart-bar-for-woocommerce/):
   sticky add to cart bar with image, price and quantity once the real button scrolls
   away, variable products included
 * [Dynafield](https://wordpress.org/plugins/dynafield-custom-field-dynamic-tags-for-elementor/):
   ACF, Pods, Meta Box and post meta as dynamic tags in free Elementor: text, link,
   image, number, colour and date

## Screenshots

[⌊Set shipping costs on a product by country, state or postcode, right below the
shipping class.⌉⌊Set shipping costs on a product by country, state or postcode, 
right below the shipping class.⌉[

Set shipping costs on a product by country, state or postcode, right below the shipping
class.

[⌊Give a variation its own rules that replace the parent product's.⌉⌊Give a variation
its own rules that replace the parent product's.⌉[

Give a variation its own rules that replace the parent product’s.

[⌊Add "Per Product Shipping" to any shipping zone, with default costs and Free Shipping
and Local Pickup hiding.⌉⌊Add "Per Product Shipping" to any shipping zone, with 
default costs and Free Shipping and Local Pickup hiding.⌉[

Add “Per Product Shipping” to any shipping zone, with default costs and Free Shipping
and Local Pickup hiding.

[⌊The cart charges each product's shipping, and a mixed cart adds them up in one
rate.⌉⌊The cart charges each product's shipping, and a mixed cart adds them up in
one rate.⌉[

The cart charges each product’s shipping, and a mixed cart adds them up in one rate.

[⌊Or add per-product costs on top of Flat rate and your other shipping methods.⌉⌊
Or add per-product costs on top of Flat rate and your other shipping methods.⌉[

Or add per-product costs on top of Flat rate and your other shipping methods.

[⌊Copy rules between products and find every product that uses per-product shipping.⌉⌊
Copy rules between products and find every product that uses per-product shipping
.⌉[

Copy rules between products and find every product that uses per-product shipping.

## Installation

 1. Install and activate WooCommerce 8.0 or newer.
 2. Install Shipeach from the Plugins screen (or upload the plugin folder to `/wp-content/
    plugins/`) and activate it.
 3. Add rules under Product data  Shipping on your products, then add the “Per Product
    Shipping” method to a shipping zone or turn on the option under WooCommerce  Settings
    Shipping  Per Product Shipping.

## FAQ

### Can variations have their own shipping costs?

Yes. Tick “Override shipping rules” on the variation and add its rules. The variation’s
rules then replace the parent product’s rules entirely, so an address that matches
none of the variation’s rules gets the method’s default cost, not the parent’s rule.
Variations without the override use the parent’s rules.

### Does it work with the block cart and checkout?

Yes. Rates are calculated on the server by WooCommerce’s shipping API, so the block
cart and checkout (and anything else using the Store API) show the same rate as 
the classic checkout. Compatibility with the cart and checkout blocks and with HPOS
is declared.

### Which rule is used when several match?

The most specific one: a postcode rule, then a state rule, then a country rule, 
then an “any” rule. If two matching rules are equally specific, the one higher in
the table wins.

### What happens to products without per-product shipping?

With the “Per Product Shipping” zone method, the “Products without per-product shipping”
setting decides: “Charge nothing for them” (the default) adds nothing for those 
items, while “Do not offer this method” hides the method whenever the cart contains
one, so your other methods apply. A product with per-product shipping on but no 
rule for the address is charged the method’s Default line cost and Default item 
cost (0 when left blank). When adding costs to other methods, items without a matching
rule add nothing.

### How does it work with Free Shipping and Local Pickup?

Adding per-product costs to other methods never changes Free Shipping rates, and
leaves Local Pickup unchanged unless you untick “Leave Local Pickup rates unchanged”.
The “Per Product Shipping” zone method has its own options to hide Free Shipping
and Local Pickup whenever it is offered.

### Does it work with multi-currency plugins?

Costs are entered and calculated in your store’s base currency. Shipeach does not
convert them itself; a multi-currency plugin or a small snippet can convert each
line’s cost with the `shipeach_rule_cost` filter.

### How do I import rules from a CSV file?

With WP-CLI. Each line is one rule with six columns in this order: product ID (a
variation ID is fine), country code, state code, postcode, line cost, item cost.
A first line that does not start with a number is skipped as a header. `*` or an
empty country, state or postcode means “any”, and an empty cost is 0. Run `wp shipeach
rules import rules.csv` (each product’s rules are replaced by the rows given for
it) or add `--mode=append` to add the rows after its existing rules. `wp shipeach
rules export` writes all rules in the same format to the shipeach folder inside 
your uploads directory. The Tools screen does not upload files.

### Can I use a CSV file from the WooCommerce.com Per Product Shipping extension?

Its documentation lists the same six columns in the same order (product ID, country
code, state code, postcode, line cost, item cost), and the header line is skipped,
so `wp shipeach rules import` reads that layout. Shipeach has not been tested with
files exported by the extension itself, so review the imported rules afterwards.
Also note that Shipeach uses the most specific matching rule, while that documentation
says the first matching row from the top of the table is used.

### Does Shipeach send anything to its author or to other services?

No. It makes no outbound requests and uses no external service. It charges the costs
you enter; it does not fetch carrier rates, print labels or pack boxes.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Shipeach – Per Product Shipping for WooCommerce” is open source software. The following
people have contributed to this plugin.

Contributors

 *   [ Emtiaz Zahid ](https://profiles.wordpress.org/emtiazzahid/)

[Translate “Shipeach – Per Product Shipping for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/shipeach-per-product-shipping-for-woocommerce)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/shipeach-per-product-shipping-for-woocommerce/),
check out the [SVN repository](https://plugins.svn.wordpress.org/shipeach-per-product-shipping-for-woocommerce/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/shipeach-per-product-shipping-for-woocommerce/)
by [RSS](https://plugins.trac.wordpress.org/log/shipeach-per-product-shipping-for-woocommerce/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.0

 * Initial release: product and variation rules by country, state and postcode, 
   the “Per Product Shipping” zone method, adding per-product costs to other methods,
   order breakdown, quick and bulk edit, Tools screen and WP-CLI import, export,
   list and set.

## Meta

 *  Version **1.0.0**
 *  Last updated **12 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.6 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [Per Product Shipping](https://wordpress.org/plugins/tags/per-product-shipping/)
   [shipping](https://wordpress.org/plugins/tags/shipping/)[woocommerce shipping](https://wordpress.org/plugins/tags/woocommerce-shipping/)
 *  [Advanced View](https://wordpress.org/plugins/shipeach-per-product-shipping-for-woocommerce/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/shipeach-per-product-shipping-for-woocommerce/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/shipeach-per-product-shipping-for-woocommerce/reviews/)

## Contributors

 *   [ Emtiaz Zahid ](https://profiles.wordpress.org/emtiazzahid/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/shipeach-per-product-shipping-for-woocommerce/)