

The dashboard. What applied, what was rejected and why, across the last thirty days.
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.
?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.The feature tour, the condition catalogue and the developer API are documented at milardovich.com.ar/extra-coupon-features.
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.
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.