Discount Rule Evaluation Trace
Traces discount-rule eligibility decisions so an admin can see why each rule passed or failed.
Purpose
Traces discount-rule eligibility decisions so an admin can see why each rule passed or failed.
Snippet details
ContextEcommerceLevelAdvancedCopy-and-paste statusMarked safe after review.Categories
- Security
Code
<?php
/*
* Copyright (c) 2026 Jeffery L. Paris <jparis@phpog.com>.
* Free for personal and internal use. Paid project use requires visible credit
* to Jeffery L. Paris. Corporate use requires a paid license fee unless a
* separate written license states otherwise.
*/
/**
* Discount Rule Evaluation Trace.
*
* Purpose:
* Traces discount-rule eligibility decisions so an admin can see why each rule passed or failed.
*
* @param array $rules Discount rules.
* @param array $cart Cart facts.
* @return array Rule evaluation trace.
*/
function ogSnippetDiscountRuleEvaluationTrace(array $rules, array $cart): array {
$trace = array();
foreach ($rules as $rule) {
$passed = true;
$reasons = array();
if (isset($rule['min_cents']) && (int) $cart['subtotal_cents'] < (int) $rule['min_cents']) {
$passed = false;
$reasons[] = 'subtotal_below_minimum';
}
if (isset($rule['required_sku']) && !in_array($rule['required_sku'], $cart['skus'], true)) {
$passed = false;
$reasons[] = 'required_sku_missing';
}
$trace[] = array('code' => (string) $rule['code'], 'passed' => $passed, 'reasons' => $reasons);
}
return $trace;
}
$trace = ogSnippetDiscountRuleEvaluationTrace(array(array('code' => 'TYLIUM10', 'min_cents' => 5000)), array('subtotal_cents' => 4200, 'skus' => array('FUEL-CELL')));
echo $trace[0]['reasons'][0];