Title: Product Category Shipping for WooCommerce
Author: techtankholdings
Published: <strong>October 7, 2026</strong>
Last modified: October 7, 2026

---

Search plugins

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

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

# Product Category Shipping for WooCommerce

 By [techtankholdings](https://profiles.wordpress.org/techtankholdings/)

[Download](https://downloads.wordpress.org/plugin/product-category-shipping-for-woocommerce.1.4.5.zip)

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

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

## Description

Product Category Shipping lets WooCommerce store owners define shipping rules **
per product category** instead of per order or per product. Two rule types are available:

 * **Flat Rate** — a base charge for the first item, plus an optional per-additional-
   item charge.
 * **Tiered Quantity** — unlimited min/max quantity brackets, each with its own 
   price or a “free” flag.

The plugin splits the cart into one WooCommerce shipping package per managed category,
so charges are additive and customers see one shipping line per category.

**Selected roles** (e.g. distributors, wholesale accounts) can additionally be offered
a cart-wide choice between **Free Local Pickup** and the configured shipping charge.
When this mode is active the cart is not split — the customer sees a single combined
shipping total alongside the free pickup option.

#### Features

 * Per-category shipping rules (flat rate or tiered quantity)
 * Tiered rules support free-shipping thresholds (e.g. “free when quantity ≥ 6”)
 * Split-cart mode: one shipping line per category, additive charges
 * Combined-cart mode for selected roles: Shipping + Free Local Pickup as two cart-
   wide choices
 * Role diagnostics table in wp-admin showing exact role keys and user counts
 * Rate guard prevents third-party “hide other methods when free shipping applies”
   filters from accidentally removing the Local Pickup option
 * No server round-trips; all calculations run locally on checkout

#### Requirements

 * WordPress 6.4+
 * PHP 7.4+
 * WooCommerce 8.0+ (plugin must be active)

## Screenshots

[⌊Default Shipping Rules — green cards, one per managed category.⌉⌊Default Shipping
Rules — green cards, one per managed category.⌉[

Default Shipping Rules — green cards, one per managed category.

[⌊Selected-Role Override Rules — red cards, inert until roles are configured.⌉⌊Selected-
Role Override Rules — red cards, inert until roles are configured.⌉[

Selected-Role Override Rules — red cards, inert until roles are configured.

[⌊Local Pickup & User Roles — role picker, labels, diagnostics table.⌉⌊Local Pickup&
User Roles — role picker, labels, diagnostics table.⌉[

Local Pickup & User Roles — role picker, labels, diagnostics table.

## Installation

 1. Upload the `product-category-shipping` folder to `/wp-content/plugins/` or install
    via the WordPress Plugins screen.
 2. Activate the plugin through the **Plugins** menu in WordPress.
 3. Go to **WooCommerce  Settings  Shipping  Product Category Shipping** and add rules
    for each category you manage.
 4. Optionally, go to **WooCommerce  Category Shipping** to configure Local Pickup 
    roles and labels.

## FAQ

### Can I use different rule types for different categories?

Yes. Each category is configured independently and may use Flat Rate or Tiered Quantity
rules.

### How does the tiered quantity mode work?

You define quantity brackets such as 1–5 = $8, 6–11 = $5, 12+ = free. Quantities
are counted **per category**, not per order. Exact-match tiers (e.g. “exactly 6”)
take priority over range tiers.

### What happens if a customer’s cart quantity falls outside all defined tiers?

Split mode (default): that category package will have no applicable rate and **checkout
will be blocked** until the customer adjusts quantity or the admin extends the top
tier. Combined mode: that category contributes $0 to the total.

### How do I enable Free Local Pickup for specific roles?

Go to **WooCommerce  Category Shipping  Local Pickup & User Roles** and add the 
desired role keys to the **Pickup Roles** field. Role keys are case-sensitive (e.
g. `Distributor`, not `distributor`).

### Does the plugin work with WPML / Polylang?

The plugin loads its own text domain. Translation files (.po/.mo) can be placed 
in `wp-content/languages/plugins/product-category-shipping-for-woocommerce-{locale}.
mo`.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

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

Contributors

 *   [ techtankholdings ](https://profiles.wordpress.org/techtankholdings/)

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

### Interested in development?

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

## Changelog

#### 1.4.2

 * Fixed: duplicate “Category Shipping” submenu entry appearing under WooCommerce.
   
   Root cause: the admin class was instantiated on `plugins_loaded`, which fires
   on every request and could run twice during WooCommerce’s own boot sequence. 
   Changed to add_action(‘admin_menu’) at priority 20 so it registers exactly once.
 * Fixed: admin settings page rendering raw HTML markup as plain text. Root cause:
   
   render_page() passed its buffered output through `esc_html()` before echoing 
   it, converting `<`/`>` to `&lt;`/`&gt;`. Removed the stray `esc_html()` call.

#### 1.4.1

 * Post-review fixes: changed text domain to product-category-shipping-for-woocommerce;
   
   replaced inline CSS/JS with wp_enqueue_style/script + external admin.css/admin.
   js; removed Tested up to from PHP header; added Requires Plugins header; removed
   WordPress.org assets from plugin zip

#### 1.4.0

 * Rebranded: changed text domain to product-category-shipping-for-woocommerce;
   
   replaced inline CSS/JS with wp_enqueue_style/script + external admin.css/admin.
   js; removed Tested up to from PHP header; added Requires Plugins header; removed
   WordPress.org assets from plugin zip
 * Rebranded to “Product Category Shipping for WooCommerce”
 * Updated header fields for WordPress.org compatibility (Tested up to 7.1, WC 9.3)
 * Added `Requires at least`, `Requires PHP`, `WC requires at least`, `WC tested
   up to` header fields
 * Added translation infrastructure (`load_plugin_textdomain`, languages directory)
 * Internal: renamed main plugin file; no functional changes

#### 1.3.0

 * Added Selected-Role Override Rules — a second, independent rule set that fully
   replaces the default rules for a category when the customer’s role is in `pickup_roles`.

#### 1.2.1

 * Fixed role keys being lowercased by `sanitize_key()`, which silently dropped 
   custom roles on every save.
 * Added role diagnostics table to the admin screen.
 * Added rate guard at priority 99999 to re-insert both combined-mode rates so a
   third-party “hide other methods when free shipping exists” filter cannot remove
   one.

#### 1.2.0

 * Role-gated free Local Pickup with combined cart-wide rate for selected roles.
 * Fixed double-counting for products assigned to two managed categories.
 * Made shipping rate IDs unique across all categories.

#### 1.0.4

 * Per-category rules, cart split, admin settings page.

## Meta

 *  Version **1.4.5**
 *  Last updated **3 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [category](https://wordpress.org/plugins/tags/category/)[flat rate](https://wordpress.org/plugins/tags/flat-rate/)
   [shipping](https://wordpress.org/plugins/tags/shipping/)[tiered shipping](https://wordpress.org/plugins/tags/tiered-shipping/)
   [woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/product-category-shipping-for-woocommerce/advanced/)

## Ratings

No reviews have been submitted yet.

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

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

## Contributors

 *   [ techtankholdings ](https://profiles.wordpress.org/techtankholdings/)

## Support

Got something to say? Need help?

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

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://techtankholdings.com/)