1.7.0: shipping rule "Only" reserves a method, "Show" no longer does

Since 1.6.0 "Show" both whitelisted a method for its group and hid it from
everybody else. A group shown ordinary methods next to a free one therefore
took the ordinary ones away from every stranger, who was left with only the
free method. "Only" now carries the reservation; "Show" is just the group's
whitelist. Existing show rules are converted to only once on update so the
checkout does not change until the shop chooses.

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
kristianwind
2026-10-02 12:28:45 +02:00
co-authored by Claude Code
parent 5875638f2c
commit 0793a1ee82
11 changed files with 129 additions and 37 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Contract
Every hook this plugin offers, and every family hook it answers. Version 1.6.3.
Every hook this plugin offers, and every family hook it answers. Version 1.7.0.
A contract is a name somebody else has to know. Core hooks this plugin merely
listens to — `init`, `admin_menu`, `wp_enqueue_scripts` — are not here;
+6 -3
View File
@@ -1,6 +1,6 @@
# Nolimit Discounts
Version 1.6.3 · a WooCommerce plugin · slug `woocommerce-email-discount-manager`
Version 1.7.0 · a WooCommerce plugin · slug `woocommerce-email-discount-manager`
Gives a customer a discount, and decides which shipping methods they may
choose, based on the email address they check out with.
@@ -29,11 +29,14 @@ address, then domain, then fragment.
A discount group can be given shipping rules, which is the half worth reading
twice because it decides what a stranger sees.
A method a group is told to **show** is *reserved* for that group. Customers
A method a group is set to **only** is *reserved* for that group. Customers
who match no group do not see it. Before 1.6.0 a method set up for approved
company addresses stayed on the checkout for everybody, so free delivery meant
for one customer could be chosen by anyone who found it — the bug that release
fixed.
fixed. **Show** is the weaker rule and reserves nothing: it offers the method
to the group and leaves everyone else alone. 1.6.0 made show do both, which
took ordinary methods away from strangers whenever they were listed beside a
free one; 1.7.0 split them and turned every old show rule into only.
The plugin never leaves a customer with no shipping method at all. If applying
the rules would empty the list, every method comes back.
+2 -2
View File
@@ -1,6 +1,6 @@
# Releasing
One release a day at most, cut by hand. Version 1.6.3 is current.
One release a day at most, cut by hand. Version 1.7.0 is current.
## The sequence
@@ -233,7 +233,7 @@ derives everything from the header, so splitting them was a one-line change —
and it means the source repository's visibility is a separate decision from the
feed's.
⚠️ The source repository is **still public** as of 1.6.3. Making it private is
⚠️ The source repository is **still public** as of 1.7.0. Making it private is
safe only once no installation is still pointing its `Update URI` at the old
address; an install on a pre-1.5.0 build reads its feed from
`kw/nolimit-discounts`, and making that private would silently stop its
+9 -7
View File
@@ -53,13 +53,15 @@ A fragment pattern (`john`) matches `john@anywhere.com` and also
### Shipping
Per group, per shipping method, one of **show** or **hide**.
Per group, per shipping method, one of **show**, **only** or **hide**.
The consequence worth understanding before using this tab: a method any group
is told to **show** becomes reserved. Customers who match no group stop seeing
it everywhere on the shop, not only inside that group. That is the point — it
is how "free delivery for approved addresses" stays unavailable to everybody
else — but it means adding one show rule changes what strangers see.
**Show** offers the method to the group (and, once any method is shown, the
group is offered only the methods marked show or only). Nobody else is
affected. **Only** does the same and also *reserves* the method: customers
outside the group stop seeing it everywhere on the shop. That is how "free
delivery for approved addresses" stays unavailable to everybody else — set the
free methods to **only** and the ordinary ones (parcel shops, pickup) to
**show**. Adding one only rule changes what strangers see.
## How to tell it is working
@@ -81,7 +83,7 @@ Not "no errors". A specific number on a specific screen:
4. **Shipping, if you set any rules.** With rules in place, compare the
checkout as a matching customer and in a private window as a stranger. The
reserved method must be absent for the stranger. Both should show at least
method marked only must be absent for the stranger. Both should show at least
one method; if the stranger sees *everything*, the rules emptied the list
and the never-leave-them-stranded fallback returned all of them.