116 lines
5.2 KiB
Plaintext
116 lines
5.2 KiB
Plaintext
=== WooCommerce Email Discount Manager ===
|
|||
|
|
Contributors: wedsmp
|
||
|
|
Tags: woocommerce, discount, email, shipping, coupon
|
||
|
|
Requires at least: 5.8
|
||
|
|
Tested up to: 6.7
|
||
|
|
Requires PHP: 7.4
|
||
|
|
Stable tag: 1.3.1
|
||
|
|
License: GPLv2 or later
|
||
|
|
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
||
|
|
|
||
|
|
Apply discounts and show/hide shipping methods based on the customer's email address.
|
||
|
|
|
||
|
|
== Description ==
|
||
|
|
|
||
|
|
WooCommerce Email Discount Manager lets you give discounts and filter available
|
||
|
|
shipping methods based on the email address a customer logs in or checks out with.
|
||
|
|
|
||
|
|
= Discount Groups =
|
||
|
|
|
||
|
|
* Create discount groups with a name and a discount percent.
|
||
|
|
* Attach any number of WooCommerce product categories to a group (drag & drop ordering).
|
||
|
|
* The group's discount percent applies to all products in the attached categories.
|
||
|
|
|
||
|
|
= Email Assignments =
|
||
|
|
|
||
|
|
Assign an email pattern to exactly one of three discount types:
|
||
|
|
|
||
|
|
* **Group** — the customer inherits a discount group's percent and categories.
|
||
|
|
* **Coupon** — an existing WooCommerce coupon is auto-applied at checkout.
|
||
|
|
* **Custom** — a custom percent applied to the entire cart.
|
||
|
|
|
||
|
|
Email patterns can be:
|
||
|
|
|
||
|
|
* A full email address: `john@example.com`
|
||
|
|
* A domain: `@company.com` (matches everyone on that domain)
|
||
|
|
* A partial match: `john` (matches any email containing "john")
|
||
|
|
|
||
|
|
Matching priority: exact email first, then domain, then partial match.
|
||
|
|
Assignments can be toggled active/inactive and work for both logged-in users
|
||
|
|
and guests (via the checkout billing email field, tracked with AJAX).
|
||
|
|
|
||
|
|
Every assignment can additionally grant **free shipping** — all shipping
|
||
|
|
methods become free at checkout for matching emails, regardless of the
|
||
|
|
assignment type. Coupon assignments pick from your existing WooCommerce
|
||
|
|
coupons in a dropdown.
|
||
|
|
|
||
|
|
= Shipping Rules =
|
||
|
|
|
||
|
|
* Per discount group, choose which shipping methods are shown or hidden.
|
||
|
|
* No rules for a group means all shipping methods behave normally.
|
||
|
|
* If any method is set to "Show", only "Show" methods are offered (whitelist).
|
||
|
|
* Drag & drop reordering controls the order methods appear in at checkout.
|
||
|
|
|
||
|
|
= How discounts are applied =
|
||
|
|
|
||
|
|
* Group and custom discounts are applied as negative fees on the cart.
|
||
|
|
* Coupons are applied via the standard WooCommerce coupon system.
|
||
|
|
|
||
|
|
== Installation ==
|
||
|
|
|
||
|
|
1. Upload the `woocommerce-email-discount-manager` folder to `/wp-content/plugins/`.
|
||
|
|
2. Make sure WooCommerce is installed and active.
|
||
|
|
3. Activate the plugin through the Plugins screen in WordPress.
|
||
|
|
4. Go to WooCommerce → Email Discounts to configure groups, assignments and shipping rules.
|
||
|
|
|
||
|
|
= REST API =
|
||
|
|
|
||
|
|
The plugin exposes a `wc-edm/v1` namespace for remote management (groups,
|
||
|
|
email assignments, shipping rules, audit log). Every route requires an
|
||
|
|
authenticated user with the `manage_woocommerce` capability — use a WordPress
|
||
|
|
Application Password over HTTPS.
|
||
|
|
|
||
|
|
Requests are rate limited per user (or per IP when unauthenticated) and all
|
||
|
|
changes are written to the audit log. Both are adjustable with filters:
|
||
|
|
|
||
|
|
* `wc_edm_rate_limit_enabled` (bool)
|
||
|
|
* `wc_edm_rate_limit_max_requests` (int, $method)
|
||
|
|
* `wc_edm_rate_limit_window` (int seconds, $method)
|
||
|
|
* `wc_edm_audit_log_enabled` (bool)
|
||
|
|
* `wc_edm_audit_log_retention_days` (int)
|
||
|
|
* `wc_edm_client_ip` (string) — override IP resolution behind a proxy/CDN
|
||
|
|
|
||
|
|
== Frequently Asked Questions ==
|
||
|
|
|
||
|
|
= Does it work for guests? =
|
||
|
|
|
||
|
|
Yes. When a guest types their email in the checkout billing email field, the
|
||
|
|
plugin stores it in the WooCommerce session via AJAX and recalculates the cart,
|
||
|
|
so discounts and shipping rules apply immediately.
|
||
|
|
|
||
|
|
= What happens if several patterns match one email? =
|
||
|
|
|
||
|
|
The most specific match wins: exact email, then domain, then partial match.
|
||
|
|
|
||
|
|
== Changelog ==
|
||
|
|
|
||
|
|
= 1.3.1 =
|
||
|
|
* Hardened loading: a class file that cannot be read is now recorded and reported in an admin notice instead of causing a fatal error. During a plugin upgrade WordPress replaces files one at a time, so a request landing mid-copy could previously take down wp-admin.
|
||
|
|
* Admin tabs are only shown when their controller loaded, so an incomplete install costs a tab rather than the whole screen.
|
||
|
|
|
||
|
|
= 1.3.0 =
|
||
|
|
* Added an audit log: every change made through the REST API is recorded with user, IP, endpoint and time, along with rejected and rate limited requests. Viewable under WooCommerce → Email Discounts → Audit Log, and via GET /wp-json/wc-edm/v1/audit-log.
|
||
|
|
* Added rate limiting on the REST API (default 60 reads and 20 writes per minute per user or IP), returning HTTP 429. Limits are filterable.
|
||
|
|
* Entries are pruned automatically after 30 days (filterable).
|
||
|
|
|
||
|
|
= 1.2.0 =
|
||
|
|
* Added a free shipping toggle on email assignments — matching customers get all shipping methods at zero cost, works with every assignment type.
|
||
|
|
* Coupon assignments now pick from the shop's existing WooCommerce coupons in a dropdown instead of a free-text field.
|
||
|
|
* Database schema upgrades automatically after plugin updates (no re-activation needed).
|
||
|
|
|
||
|
|
= 1.1.0 =
|
||
|
|
* Added REST API (namespace wc-edm/v1) for remote management of groups, email assignments and shipping rules. All routes require an authenticated user with the manage_woocommerce capability (use an Application Password over HTTPS).
|
||
|
|
|
||
|
|
= 1.0.0 =
|
||
|
|
* Initial release: discount groups, email assignments (group/coupon/custom), shipping rules, dashboard.
|