
內容簡介
Milardovich Extra Coupon Features 外掛提供強大的優惠券管理功能,讓使用者能夠精確控制優惠券的應用條件與優先順序,並提供詳細的決策追蹤,提升 WooCommerce 的促銷效果。
【主要功能】
• 支援 AND/OR 條件群組,靈活設定
• 自動應用優惠券,具明確優先順序
• 優惠券排隊機制,符合條件即自動應用
• 設定折扣上限,符合財務需求
• URL 優惠券,便於分享與使用
• 事件日誌,追蹤優惠券狀態與原因
外掛標籤
開發者團隊
② 後台搜尋「Milardovich Extra Coupon Features」→ 直接安裝(推薦)
原文外掛簡介
Most coupon plugins let you build a rule and then leave you guessing when it does not fire. Milardovich Extra Coupon Features gives you a condition engine with real AND/OR logic, deterministic priority when several offers compete, and a trace for every decision it makes.
A full walkthrough of what it does, with screenshots, is at milardovich.com.ar/extra-coupon-features.
What it does
Condition groups with AND/OR, nestable, across cart, customer, purchase history, checkout context and time.
Auto-apply with explicit priority and exclusivity groups. When two automatic coupons compete, the winner is the one you configured, and it is the same winner on every recalculation. No race conditions.
Coupon queueing. A customer who enters a code before the cart qualifies keeps it; the coupon applies itself the moment the cart does qualify.
Percentage discounts with a maximum cap. “20% off, up to $50”, which is what a finance person actually signs off on.
URL coupons. ?apply_coupon=SUMMER20, comma separated for several codes, combinable with add-to-cart, and the parameters are stripped on redirect so nothing accumulates and nothing is added twice.
Rule trace. Every condition reports what it expected, what it found and whether it passed. Never paywalled: observability is the reason to trust the plugin.
Rule tester. Build a synthetic cart in the admin and watch every published coupon evaluate against it, before the promotion goes live.
Cart status for shop managers. A per-coupon panel on the cart page, visible only to users who can manage WooCommerce, answering “why is my coupon not applying” in place.
Event log. Applied, auto-applied, rejected, queued, silently removed and superseded, each with its reason and the cart signature that produced it.
Silent removal. An automatic coupon that stops qualifying is removed without a scary error, and a coupon the customer removed by hand is not re-added behind their back.
Buy X Get Y, across specific products, sets, categories or anything in the cart, repeating or once per order, with the reward free or discounted — and the reward quantity recomputed from the trigger every time, so it can never run away with your stock.
Tiered pricing, fixed price per item, and limiting a discount to the cheapest items, the dearest, every nth or the nth onwards.
Store credit on an append-only ledger: the balance is the sum of its history, never a number that gets edited. Partial redemption, expiry, adjustments that require a note, and refund-to-credit.
Gift cards sold as products, with denominations or a customer-entered amount, a recipient, a message and scheduled delivery. A card keeps its remaining balance by default; tick one use when issuing it and it is spent in a single order instead.
Liability reporting: outstanding balance, aging, issuance and redemption by month, breakage, and a CSV of the ledger for your accountant.
Bulk generation from a template coupon, CSV import and export, and lifecycle campaigns for signup, first order, nth order, birthdays, win-backs and abandoned carts.
Reporting per coupon and per campaign: redemptions, discount cost, revenue and average order value.
Anti-abuse limits by IP, by email and inside a rolling window, plus blocked email domains — counted from paid orders, so a guest checkout with a fresh address does not get around them.
Migration from Advanced Coupons and from Soft79’s Extended Coupon Features, with a preview that tells you what it could not map before you commit.
Classic cart and Cart/Checkout Blocks. The rules hang off the totals calculation both go through, and the Store API carries the offer data for Blocks.
HPOS compatible.
Documentation
The feature tour, the condition catalogue and the developer API are documented at milardovich.com.ar/extra-coupon-features.
For developers
Every condition and outcome is a registered type using the same public interface the built-ins use.
add_action( 'mecf_register_conditions', function ( $registry ) {
$registry->register( 'crm_segment', [
'label' => __( 'CRM segment', 'my-plugin' ),
'group' => 'customer',
'fields' => [ 'segment' => [ 'type' => 'text', 'label' => 'Segment' ] ],
'evaluate' => function ( $args, $context ) {
$segment = my_crm_lookup( $context->get_customer_id() );
return [
'passed' => $segment === $args['segment'],
'expected' => $args['segment'],
'actual' => $segment,
];
},
] );
} );
Filters: mecf_can_apply_coupon (veto an application), mecf_resolve_conflicts (override which competing coupon wins), mecf_eligible_offers and mecf_upcoming_offers (the offer list on the cart), mecf_history_order_statuses and mecf_history_order_limit (which past orders the history conditions read), mecf_convert_amount (final say on currency conversion), mecf_outcome_field_groups (extra settings on the coupon screen), mecf_birthday_meta_key (where the store keeps birthdays), mecf_giftcard_email_subject (the subject line of the gift card email).
Actions: mecf_register_conditions and mecf_register_outcomes (add your own types), mecf_credit_entry_added, mecf_giftcard_issued, mecf_coupons_generated, mecf_campaign_fired (notifications after the write, for pushing into a CRM or an audit trail).
React to a coupon decision with mecf_coupon_event ( $event, $code, $data ), which fires for every one — applied, auto-applied, queued, removed, silently removed, rejected and suppressed — or with the per-outcome mecf_coupon_applied, mecf_coupon_queued, mecf_coupon_removed and so on ( $code, $data ). $data carries the coupon id, the reason the customer was shown, the customer and session, the cart signature and the evaluation trace. Both fire even when the event log is switched off, so an integration never depends on a diagnostic setting.
add_action( 'mecf_coupon_applied', function ( $code, $data ) {
my_analytics_track( 'coupon_applied', [ 'code' => $code, 'customer' => $data['customer_id'] ] );
}, 10, 2 );
Helper: mecf_trace_coupon( 'SUMMER20' ) returns the full decision, including the trace.
REST: mecf/v1/rules, mecf/v1/trace, mecf/v1/events, mecf/v1/conditions, mecf/v1/credit/{id}, mecf/v1/giftcards, mecf/v1/liability, mecf/v1/stats.
WP-CLI: wp mecf rule list|get|test, wp mecf credit, wp mecf giftcard, wp mecf generate, wp mecf import, wp mecf events, wp mecf diagnostics.
Trademarks
This plugin is an independent project by Sergio Milardovich. It is not affiliated with, endorsed by or sponsored by Automattic, WooCommerce, Rymera Web Co (Advanced Coupons) or Soft79. WooCommerce is a trademark of Automattic Inc. Those names appear here only to describe what this plugin works with and which plugins it can import from.
