Initial commit: WooCommerce Email Discount Manager plugin
This commit is contained in:
+115
@@ -0,0 +1,115 @@
|
||||
=== 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.
|
||||
Reference in New Issue
Block a user