我正在使用 woocommerce,我想不仅通过默认的内置到期日期检查来验证优惠券,还想验证到期时间。
我为优惠券添加了一个自定义字段,允许设置到期时间。
我编写了以下代码片段以覆盖validate_coupon_expiry_date类 WC_Discounts 中的默认方法:
class WC_My_plugin_Discounts extends WC_Discounts
{
// override validate_coupon_expiry_date to include expiry time:
protected function validate_coupon_expiry_date($coupon)
{
$expiry_date = date('Y-m-d', $coupon->get_date_expires()->getTimestamp());
// I add a custom field `expiry_time` in postmeta table:
$expiry_time = $coupon->get_meta('expiry_time');
$dateTime = new DateTime($expiry_date . $expiry_time);
if ($coupon->get_date_expires() && apply_filters('woocommerce_coupon_validate_expiry_date', time() > $dateTime, $coupon, $this)) {
throw new Exception(__('This coupon has expired.', 'woocommerce'), 107);
}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我尝试使用以下代码段验证优惠券:
add_filter('woocommerce_coupon_is_valid', array($this, 'validate_coupon'), 15, 2);
function validate_coupon($valid, $coupon)
{ …Run Code Online (Sandbox Code Playgroud)