Skip to content

Amazing Shipping for WooCommerce Documentation

Amazing Shipping for WooCommerce

Installation


There are two ways to upload and activate the plugin:

A. The recommended way

  1. Extract the content of the plugin zip file
  2. Upload the created amazing-shipping-for-woocommerce folder via FTP to your /wp-content/plugins/ directory
  3. Go to Plugins
  4. Activate the plugin

B. The normal way (make sure that the PHP upload limit and PHP timeout limit are high enough depending on your internet connection speed)

  1. Extract the zip file you have downloaded.
  2. Login to your administration panel (ex. http://www.yourdomain.com/wp-admin).
  3. Go to PluginsAdd New.
  4. At the top of the page click the “Upload Plugin” link
  5. Click Choose File (or what your browser uses to navigate to your files)
  6. From the extracted files navigate to and select amazing-shipping-for-woocommerce.zip and click “Install Now
  7. You may be asked to confirm your wish to install the plugin.
  8. If this is the first time you’ve installed a WordPress plugin, you may need to enter your FTP login credentials. This information is available through your web server host.
  9. Click Proceed to continue with the installation. The resulting installation screen will list the installation as successful or note any problems during the install.
  10. If successful, please click Activate Plugin to activate it.

After activation

WooCommerce must be installed and active — the plugin shows an admin notice and stays dormant otherwise. Once active, setup is two steps:

  1. Go to WooCommerce → Settings → Shipping, open the shipping zone(s) you want to use it in, click Add shipping method, and choose Products Shipping Cost.
  2. Go to WooCommerce → Shipping Rules to build the actual pricing rules (see Usage). This rule set is shared by every zone the method is added to.

Features


Rule Engine

  • Unlimited shipping cost rules, each built from any number of conditions
  • Combine a rule’s conditions with Match ALL (AND) or Match ANY (OR) logic
  • Every rule that matches is evaluated independently and shown to the customer as its own selectable shipping option at checkout, named after the rule — not merged into a single combined cost
  • Drag-and-drop rule reordering — controls the display order of the resulting shipping options
  • Enable/disable individual rules without deleting them
  • One-click rule duplication to quickly build variations of an existing rule
  • Leave a rule’s condition list empty to apply it to every order

Condition Types

Every condition row picks a type, an operator, and a value. List-based types (country, state, postal code, city, user role, language, category, custom taxonomy, shipping class, product, coupon, stock status) use Is / Is not; numeric types (subtotal, tax, quantity, weight, width, height, length, stock quantity) use Any, Equal to, Greater than, Less than, Greater or equal to, Less or equal to.

  • Country and State — match the customer’s shipping destination
  • Postal Code — comma-separated list, numeric ranges (e.g. 10000-20000), and wildcards (e.g. 30*)
  • City — comma-separated list with wildcard support
  • User Role — any WordPress role, plus a built-in “Guest” pseudo-role for logged-out shoppers
  • Language — shown automatically when WPML, Polylang, or TranslatePress is detected active, matched against the customer’s current site language
  • Product Category
  • Custom Taxonomy — any custom product taxonomy registered by your theme or other plugins (brand, attribute terms, etc.), with the taxonomy’s terms loaded on the fly
  • Product Shipping Class
  • Product — search and pick specific products (or variations) using WooCommerce’s own product search
  • Coupon Code — match specific codes, “any coupon applied,” or “no coupon applied”
  • Cart Subtotal — with an “include tax” toggle to compare against the subtotal including or excluding tax
  • Cart Tax and Cart Quantity — total cart tax amount and total item count
  • Product Weight, Width, Height, Length — per line item
  • Product Stock Quantity and Stock Status (In Stock / Out of Stock / On Backorder)

Cost Calculation

  • A flat number, or a formula using [qty], [weight], [subtotal] and [total] tokens — e.g. 0.05 * [subtotal] or 5 + [weight] * 2
  • Supports +, -, *, / and parentheses for grouping
  • Apply the cost per matching product (multiplied by each line item’s quantity) or once for the whole matching group
  • Show the calculated cost, or replace it with custom text (e.g. “Free”, “We’ll contact you with a quote”)
  • Optional per-rule “Taxable” toggle
  • Optional per-rule description shown to the customer under the shipping line at checkout (HTML allowed)

Under the Hood

  • Built entirely on WooCommerce’s own shipping zone system — add it to as many zones as you like
  • Uses WooCommerce’s native enhanced-select (selectWoo) UI and native AJAX product search — no bundled third-party select2/product-search libraries
  • WooCommerce High-Performance Order Storage (HPOS) compatible
  • Rules saved by earlier versions of the plugin are transparently upgraded to the current format the next time they’re saved — no manual migration needed

Requirements


  • WordPress 5.8+
  • WooCommerce 8.0+ (tested up to 10.x)
  • PHP 7.4+
  • Optional: WPML, Polylang, or TranslatePress if you want to use the Language condition

Licensing


Amazing Shipping for WooCommerce is a single, complete package — every condition type, the full rule engine, and all cost-calculation options are available immediately after installation. There is no license key to activate and no feature is gated behind a separate paid tier; your usage rights are governed by the license under which you obtained the plugin (e.g. your marketplace purchase license).

Usage


1. Add the shipping method to a zone

Go to WooCommerce → Settings → Shipping, open a shipping zone, click Add shipping method, and choose Products Shipping Cost. Its own settings are intentionally minimal — Enable/Disable and a Method Title (shown to customers at checkout) — because the actual pricing logic lives on the shared Shipping Rules page below, not per zone.

2. Build your rules

Go to WooCommerce → Shipping Rules. Click Add New Rule, then for each rule:

  1. Give it a Rule Name and make sure Enabled is checked. The name is shown to the customer at checkout as the label of the shipping option this rule produces, so make it customer-friendly (e.g. “Standard Shipping”, “Express Shipping”) rather than an internal note.
  2. Choose Match ALL conditions (AND) or Match ANY condition (OR).
  3. Click + Add Condition for each condition you need. For every row, pick a type (e.g. Country, Cart Subtotal, Product Category…), the matching operator, and a value. Leave the condition list empty to make the rule apply to every order.
  4. Under Cost, choose Cost Display (a calculated number, or custom text), Apply Cost (per product or once), the Shipping Cost value or formula, whether it’s Taxable, and an optional customer-facing Description shown under this option at checkout.

Drag rules by their handle to reorder them, and click Save All Rules when you’re done. Rule order only controls the display order of the resulting shipping options — every enabled rule that matches the cart is evaluated independently, and each one appears as its own selectable option, priced and described on its own.

When several rules match at once

Example: a rule “Fragile Handling” (Product Category is Fragile Items) and a rule “Standard Shipping” (Country is US) can both match the same order. The customer then sees both options at checkout — “Fragile Handling” and “Standard Shipping,” each with its own cost and description — and picks whichever one applies. Rules are not mutually exclusive and don’t need to be ordered by specificity; order only changes which option is listed first.

Duplicating and removing rules

Use the duplicate icon on a rule’s header to clone it (handy for building several similar rules for different countries or categories), and the trash icon to remove a rule entirely. Removing a condition row only removes that one condition — the rest of the rule stays intact.

Shortcodes


This plugin does not add any shortcodes, Gutenberg blocks, or Elementor widgets. It works entirely through WooCommerce’s own Shipping Zones and checkout flow, so shipping rates calculated by its rules appear automatically anywhere WooCommerce shows shipping costs — cart, checkout, and the WooCommerce Cart/Checkout blocks — with no page building required.

For Developers


Architecture

The plugin registers a standard WC_Shipping_Method subclass (id nitroshp) via the core woocommerce_shipping_methods filter, so it behaves exactly like any other shipping method for zone assignment, priority, and instance settings.

All rules are stored as a single array in the nitroshp_rules WordPress option. Each rule has this shape:

array(
    'name'              => 'Rule label',
    'enabled'           => 'yes'|'no',
    'match_type'        => 'all'|'any',
    'conditions'        => array(
        array(
            'type'      => 'country'|'state'|'postcode'|'city'|'user_role'|'language'|
                           'category'|'custom_taxonomy'|'shipping_class'|'product'|'coupon'|
                           'stock_status'|'subtotal'|'tax'|'quantity'|'weight'|'width'|
                           'height'|'length'|'stock',
            'condition' => 'is'|'is_not' /* or */ 'any'|'equal'|'greater_than'|'less_than'|'greater_equal'|'less_equal',
            'value'     => /* array of codes/ids, a string, or a number, depending on type */,
            'extra'     => array(), // e.g. ['taxonomy' => 'pa_brand'] or ['tax_mode' => 'incl']
        ),
        // ...more condition rows
    ),
    'cost_display'      => 'calculated'|'custom',
    'apply_per'         => 'per_product'|'once',
    'cost'              => '0.05 * [subtotal]',
    'cost_display_text' => '',
    'taxable'           => 'yes'|'no',
    'description'       => '',
    'order'             => 0,
)

Rules stored by older versions of the plugin (flat fields instead of a conditions array) are read through nitroshp_get_rules(), which transparently upgrades them via nitroshp_migrate_legacy_rule() — you never need to migrate data by hand.

Extending condition types

The list of available condition types, their operator vocabulary (is/is not vs. numeric), and their evaluation scope (per-cart vs. per-product) live in includes/nitroshp-shared.php:

nitroshp_get_condition_scopes()        cheap, static type => {scope, kind} map used to validate/evaluate rules
nitroshp_get_condition_ui_registry()   admin-only registry adding labels/options for rendering the rule builder
nitroshp_get_rules()                   loads and migrates saved rules
nitroshp_get_multilingual_plugin()     detects WPML / Polylang / TranslatePress
nitroshp_get_available_languages()     active languages for whichever plugin is detected
nitroshp_get_current_language()        current request's language code

The plugin does not currently expose dedicated action/filter hooks for third-party customization. All rule evaluation and cost calculation lives in NitroShp_Shipping_Method::calculate_shipping() in includes/class-nitroshp-shipping-method.php, which is a normal, overridable method on a standard shipping method class.

Frequently Asked Questions


  1. Does this replace WooCommerce’s built-in shipping zones and methods? No — it adds a new shipping method type (“Products Shipping Cost”) that you assign to one or more of your existing zones, alongside flat rate, free shipping, or any other method you already use.
  2. What happens if a customer’s cart matches more than one rule? Every matching rule is shown as its own shipping option at checkout, named after the rule, so the customer can pick whichever one they want. Rules don’t compete with or exclude each other – the order on the Shipping Rules page only controls which option is listed first.
  3. Can I combine conditions with OR instead of AND? Yes. Each rule has a Match ALL conditions (AND) / Match ANY condition (OR) selector that governs every condition row in that rule.
  4. Can the shipping cost be based on the cart subtotal or total instead of a fixed number? Yes. The Shipping Cost field accepts a formula with [subtotal] and [total] tokens (as well as [qty] and [weight]), e.g. 0.05 * [subtotal] for a 5% of subtotal shipping charge. [total] reflects the cart total excluding shipping, since the shipping cost itself hasn’t been added yet at calculation time.
  5. Do I need WPML, Polylang, or TranslatePress installed? No. They’re entirely optional. If one of them is active, an extra “Language” condition type automatically becomes available; if none are active, the plugin works normally without it.
  6. Does it support variable products? Yes. The Product condition’s search covers both parent products and individual variations, and weight/dimension/stock conditions read the actual line item (variation) being shipped.
  7. Can I restrict a rule to specific coupon codes, or to carts with any coupon applied at all? Yes. The Coupon condition supports “Is”/”Is not” against specific codes, and leaving the code field empty means “any coupon applied” (Is) or “no coupon applied” (Is not).
  8. I have rules saved from an older version of the plugin. Do I need to redo them? No. Older rules are automatically read and converted to the current condition-based format the moment the Shipping Rules page loads, and are saved in the new format the next time you click Save All Rules.
  9. Is it compatible with WooCommerce High-Performance Order Storage (HPOS)? Yes, HPOS compatibility is declared on plugin load.
  10. Can I show “Free Shipping” or a custom message instead of a price? Yes — set a rule’s Cost Display to “Show Custom Text” and enter any text, such as “Free” or “We’ll contact you with a shipping quote.”

Changelog


1.0.5 current release
  • Feature: Condition-based rule builder — every rule is a repeater of condition rows (type, operator, value) combined with Match ALL (AND) or Match ANY (OR) logic, replacing a fixed set of filter fields
  • Feature: Country and State conditions with “Is”/”Is not” matching
  • Feature: Postal Code and City conditions with comma lists, numeric ranges, and wildcards
  • Feature: User Role condition, including a built-in “Guest” role for logged-out shoppers
  • Feature: Language condition, automatically available when WPML, Polylang, or TranslatePress is active
  • Feature: Product Category, Custom Taxonomy, and Product Shipping Class conditions
  • Feature: Product condition using WooCommerce’s native AJAX product search, covering variations
  • Feature: Coupon Code condition — specific codes, “any coupon,” or “no coupon”
  • Feature: Cart Subtotal (with an include/exclude tax toggle), Cart Tax, and Cart Quantity conditions
  • Feature: Product Weight, Width, Height, Length, Stock Quantity, and Stock Status conditions
  • Feature: [subtotal] and [total] tokens added to the Shipping Cost formula, alongside the existing [qty] and [weight]
  • Feature: automatic, transparent migration of rules created in earlier versions to the new condition format
  • Fix: Shipping Cost formulas now correctly evaluate parentheses for grouping (e.g. (5 + [qty]) * 2)
  • Improvement: admin UI now uses WooCommerce’s own selectWoo enhanced-select and native AJAX product search instead of a separately bundled select2 library

Sources and Credits


This plugin does not bundle any third-party PHP or JavaScript libraries — its admin UI relies entirely on the enhanced-select (selectWoo) and AJAX product search scripts that ship with WooCommerce itself.