Practical WordPress guide

Free Shipping Amount Left for WooCommerce: safe setup, failure cases, and rollback

A plain-language guide for nontechnical site owners. It separates what the parent plugin really knows from what a helper plugin should never guess.

Reviewed July 16, 2026Official-source links includedNo invented performance claims

Direct answer

To show a correct "amount left for free shipping" message in WooCommerce, read the shopper's matched shipping package and the enabled native Free shipping method in that package's zone. Use the method's real minimum-order requirement and its before-or-after-coupon setting. Hide the message when the address or rule is not reliable. Never calculate from a hard-coded global number when the store has zones, coupons, or multiple packages.

StoreFixKit's Free Shipping Amount Left for WooCommerce follows that read-only approach. It does not create or edit shipping methods, rates, totals, coupons, taxes, addresses, or orders. Free supports cart and checkout, including WooCommerce Cart and Checkout Blocks. Pro adds mini-cart and shortcode placement.

Start with the native WooCommerce rule

WooCommerce free shipping belongs to a shipping zone. The official Free Shipping guide explains the native method and its requirements, including minimum order amount, coupon combinations, and the option to apply the minimum before coupon discounts. The shipping zones guide explains how a customer matches one zone according to destination.

That architecture matters. A store can offer free shipping at $50 in one country, $100 in another, and no free shipping elsewhere. A single theme setting such as "Free shipping at $75" will be wrong for at least one shopper. It can also be wrong before the shopper supplies a country or postcode because WooCommerce has not matched the final zone yet.

Configure and test the native method before installing a message plugin. Open WooCommerce > Settings > Shipping > Shipping zones, edit the intended zone, and add or edit Free shipping. Choose a requirement that includes a minimum amount, set the threshold, and decide whether coupon discounts reduce the amount used for the rule.

What the amount should use

The message needs the same calculation basis as the native method. Depending on store settings, the displayed subtotal can include tax while discounts and discount tax are represented separately. WooCommerce's free-shipping method also has an ignore_discounts choice exposed in the interface as applying the minimum rule before coupon discounts.

A correct calculator therefore cannot simply subtract the visible cart total from the threshold. It must follow WooCommerce's displayed-subtotal and discount basis, use the store's price precision, and let WooCommerce determine whether a free-shipping coupon is valid.

When a method requires both a coupon and a minimum amount, reaching the money threshold alone is not success. The message should say that a valid free-shipping coupon is also required. When a valid coupon alone satisfies the configured native rule, the plugin should not invent an amount goal that WooCommerce does not require.

Why the shipping address controls visibility

WooCommerce matches zones from the shipping package destination. Country can be enough for a country-wide zone; state or postcode can change the match for narrower zones. Until the package contains enough destination data, a public message may be a guess.

StoreFixKit chooses the conservative behavior: if any current shipping package lacks a usable destination country, or if a matched package has no reliable supported native minimum rule, the message stays hidden. A hidden message is less exciting than a wrong promise, but it avoids telling a shopper that free shipping is available when checkout will not offer it.

The setup and diagnostic path is in the Free Shipping Amount Left documentation.

Multiple methods and packages

A zone can contain more than one enabled native free-shipping method. Within a package, the calculator can choose a reachable minimum goal supported by the method settings. A cart can also split into multiple shipping packages. In that case, the shopper does not have free shipping for the whole order until every relevant package satisfies its rule.

StoreFixKit uses the package with the largest remaining amount as the displayed goal and marks the goal reached only when all packages have no remaining amount and no required coupon is missing. If one package has no supported reliable rule, the plugin hides the overall message rather than showing a partial promise.

This behavior is intentionally narrower than a custom shipping-rate engine. Marketplace vendors, per-product shipping plugins, table rates, local pickup conditions, and proprietary carrier rules can create different goals. StoreFixKit reads native WooCommerce free_shipping methods only.

Classic pages and Blocks

Classic cart and checkout templates offer PHP hooks where a server-rendered WooCommerce notice can appear. Cart and Checkout Blocks are React interfaces backed by the Store API. A plugin that supports both should not scrape HTML or maintain a second browser-side total.

WooCommerce's Cart and Checkout Blocks extensibility documentation describes supported extension points. StoreFixKit registers read-only cart extension data: whether the message is reliable, the amount remaining, the matched minimum, goal state, and an escaped message. A small placement script reads the fresh cart response and updates the visible notice.

The server remains the source of truth. When a coupon, quantity, address, or cart line changes, the next cart response carries the recalculated value. No StoreFixKit remote request is involved.

A practical test matrix

Below and above the threshold

Use the same shipping address and one shippable product. Confirm the exact amount below the goal, then increase quantity until the native free-shipping rate appears. The message should switch to the configured reached text at the same boundary.

Coupon discounts counted after the threshold

Set the native method to evaluate the minimum after discounts. Apply a normal discount coupon and confirm that the remaining amount increases when the discounted merchandise basis falls.

Minimum evaluated before coupon discounts

Turn on the native before-discount option. Apply the same coupon. The amount-left calculation should use the pre-discount basis, matching the method.

Coupon plus minimum requirement

Configure the native method to require both. Reach the money minimum without the coupon and verify that the message still explains the coupon requirement. Then apply a valid free-shipping coupon and confirm the reached state.

Different shipping zones

Test at least two addresses that match different zones. The threshold and visibility should follow the matched zone, not the store base address or the last administrator test.

Missing address

Clear the destination in a private window. The message should stay hidden until WooCommerce can match a package accurately.

Multiple packages

On a staging store with a package-splitting extension, verify every package. The displayed amount should protect the hardest remaining package, and success should require all supported packages.

Classic cart and Cart Block

Run the same cart, address, and coupons through both templates. Compare the final remaining amount and the native shipping-rate availability, not merely the first paint.

Performance and safety boundary

A focused amount-left plugin does not need a custom table, scheduled job, analytics event, catalog query, or external API. It reads the current WooCommerce cart and shipping packages only where a selected placement can render. Blocks receive a bounded read-only extension in the cart response.

Settings writes require WooCommerce management permission and a nonce. Messages are bounded and escaped. The plugin never stores a customer's address, cart contents, or order data in its own table and never sends those details to StoreFixKit.

If WooCommerce is missing, the plugin should show an admin notice and register no cart behavior. If Pro or the license API is unavailable, Free keeps working on cart and checkout. These fail-passive rules keep a licensing problem from becoming a checkout problem.

When not to use this plugin

Do not use a native-minimum calculator to describe a proprietary table-rate, carrier, vendor, membership, or postcode rule it cannot read. Do not hard-code a message when the advertised threshold differs by zone. Do not show an amount before the shopper supplies enough address data if the store has regional rules.

In those cases, the shipping extension that owns the rate should expose its own eligibility data, or the store should use a product designed specifically for that rate engine. A broad compatibility claim without access to the real rule is more dangerous than a narrow supported boundary.

Rollback and support evidence

Keep the current Free and Pro ZIPs plus a database backup before production updates. If a regression appears, deactivate the plugins, install the previous versions, activate Free first, and retest below and above the threshold. Compare WooCommerce zones, methods, rates, totals, coupons, taxes, addresses, and orders before and after. StoreFixKit should not change any of them.

For support, record the WooCommerce version, destination with personal details removed, matched zone, native free-shipping requirement, minimum, before-discount setting, coupons, package count, placement, expected amount, actual amount, and screenshots. This identifies whether the problem is zone matching, calculation basis, a required coupon, Blocks refresh, or an unsupported rate without collecting a full customer address.

FAQ

Does the plugin change the free-shipping threshold?

No. WooCommerce owns the threshold and rate. StoreFixKit only reads supported native method settings and displays a message.

Why is the message hidden before an address is entered?

The address determines the shipping package and matched zone. Hiding the message prevents a threshold from the wrong region being advertised as fact.

Does it calculate before or after coupons?

It follows the native free-shipping method's setting. It also respects a valid free-shipping coupon and explains when a coupon is still required.

Does it support Cart and Checkout Blocks?

Yes. It exposes read-only Store API cart data and updates the message from fresh cart responses. The server-side WooCommerce calculation remains authoritative.

Does it support table rates or marketplace vendor shipping?

Not by pretending they are native minimum-order methods. The focused plugin supports WooCommerce's native free_shipping method; other engines need an explicit integration with their own rules.

What happens if Pro expires?

Mini-cart and shortcode controls turn off, but Free keeps working on the cart and checkout with the saved free settings.

Focused plugin

Use the one-job implementation.

Show how much more the shopper needs for the matched native WooCommerce minimum-order free-shipping method, without changing shipping rules.