WooCommerce:检查优惠券是否有效

Nuc*_*Ape 6 php wordpress coupon woocommerce hook-woocommerce

我正在尝试检查优惠券是否仍然有效(尚未达到其使用限制)并在此条件下显示内容。

这样做的原因是我希望能够向特定访问者分发优惠券代码,但显然不想分发已经达到使用限制的优惠券。

我试图用 PHP 来实现这一点,并想象代码是这样的:

<?php if (coupon('mycouponcode') isvalid) {
  echo "Coupon Valid"
} else {
  echo "Coupon Usage Limit Reached"
} ?>
Run Code Online (Sandbox Code Playgroud)

这里的任何帮助都会很棒:)

Pab*_*eco 9

我相信WooCommerce 鼓励的最新方法是使用 \WC_Discounts 类。下面是一个例子:

function is_referral_coupon_valid( $coupon_code ) {
    $coupon = new \WC_Coupon( $coupon_code );   
    $discounts = new \WC_Discounts( WC()->cart );
    $valid_response = $discounts->is_coupon_valid( $coupon );
    if ( is_wp_error( $valid_response ) ) {
        return false;
    } else {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

重要的是要记住至少在wp_loaded钩子内这样做,像这样:

add_action( 'wp_loaded', function(){
   is_referral_coupon_valid('my-coupon-code');
});
Run Code Online (Sandbox Code Playgroud)

更新

现在我相信这个使用is_valid() 的更简单的方法也可以工作,但我自己还没有测试过:

$coupon = new WC_Coupon( 'my-coupon-code' );
$coupon->is_valid();
Run Code Online (Sandbox Code Playgroud)


Rau*_*pta 6

$code = 'test123';

$coupon = new WC_Coupon($code);
$coupon_post = get_post($coupon->id);
$coupon_data = array(
    'id' => $coupon->id,
    'code' => $coupon->code,
    'type' => $coupon->type,
    'created_at' => $coupon_post->post_date_gmt,
    'updated_at' => $coupon_post->post_modified_gmt,
    'amount' => wc_format_decimal($coupon->coupon_amount, 2),
    'individual_use' => ( 'yes' === $coupon->individual_use ),
    'product_ids' => array_map('absint', (array) $coupon->product_ids),
    'exclude_product_ids' => array_map('absint', (array) $coupon->exclude_product_ids),
    'usage_limit' => (!empty($coupon->usage_limit) ) ? $coupon->usage_limit : null,
    'usage_count' => (int) $coupon->usage_count,
    'expiry_date' => (!empty($coupon->expiry_date) ) ? date('Y-m-d', $coupon->expiry_date) : null,
    'enable_free_shipping' => $coupon->enable_free_shipping(),
    'product_category_ids' => array_map('absint', (array) $coupon->product_categories),
    'exclude_product_category_ids' => array_map('absint', (array) $coupon->exclude_product_categories),
    'exclude_sale_items' => $coupon->exclude_sale_items(),
    'minimum_amount' => wc_format_decimal($coupon->minimum_amount, 2),
    'maximum_amount' => wc_format_decimal($coupon->maximum_amount, 2),
    'customer_emails' => $coupon->customer_email,
    'description' => $coupon_post->post_excerpt,
);

$usage_left = $coupon_data['usage_limit'] - $coupon_data['usage_count'];

if ($usage_left > 0) {
    echo 'Coupon Valid';
} 
else {
    echo 'Coupon Usage Limit Reached';
}
Run Code Online (Sandbox Code Playgroud)

代码已经过测试并且功能齐全。

参考