优惠券永远不会在 woocommerc 中的 payment_complete 挂钩上创建

问题描述 投票:0回答:1

我目前在 payment_complete 挂钩中创建优惠券时遇到一些问题。

add_action('woocommerce_payment_complete', 'when_payment_complete'); 
function when_payment_complete( $order_id ) {

    $referral_coupon = new WC_Coupon();
    
    $bytes = random_bytes(8);
    $encoded = base64_encode($bytes);
    $stripped = str_replace(['=', '+', '/'], '', $encoded);
    $stripped = strtoupper($stripped);
    $prefix = strtoupper(substr(md5($user->user_email), 0, 3));
    
    $referral_coupon->set_code( 'CHILO-REF-' . $prefix . $stripped );
    $referral_coupon->set_description( 'TEST REFERRAL COUPON' );
    $referral_coupon->set_discount_type( 'fixed_cart' );
    $referral_coupon->set_amount( 50 );
    $referral_coupon->set_status( "publish" );
    $referral_coupon->set_individual_use(false);
    $referral_coupon->set_usage_limit( 0 );
    $referral_coupon->save();
}

在 WordPress 脚本中使用相同的代码块并且工作得非常好。

感谢您的帮助

我不知道优惠券永远不会被创建

woocommerce hook-woocommerce coupon
1个回答
0
投票

您可以做的是使用替代方案

woocommerce_payment_complete
挂钩以下目标付费订单状态并在创建优惠券时标记订单(避免创建多个优惠券):

add_action('woocommerce_order_status_completed', 'when_payment_complete', 10, 2); 
add_action('woocommerce_order_status_processing', 'when_payment_complete', 10, 2); 
function when_payment_complete( $order_id, $order ) {
    if( ! $order->get_meta('referral_coupon_created') ) {
        $user     = $order->get_user();

        $bytes    = random_bytes(8);
        $encoded  = base64_encode($bytes);
        $stripped = str_replace(['=', '+', '/'], '', $encoded);
        $stripped = strtoupper($stripped);
        $prefix   = strtoupper(substr(md5($user->user_email), 0, 3));
        
        $referral_coupon = new WC_Coupon();
        $referral_coupon->set_code( 'CHILO-REF-' . $prefix . $stripped );
        $referral_coupon->set_description( 'TEST REFERRAL COUPON' );
        $referral_coupon->set_discount_type( 'fixed_cart' );
        $referral_coupon->set_amount( 50 );
        $referral_coupon->set_status( "publish" );
        $referral_coupon->set_individual_use(false);
        $referral_coupon->set_usage_limit( 0 );
        $referral_coupon->save();

        $order->add_meta_data('referral_coupon_created', 'yes', true); // Flag order
        $order->save();
    }
}

代码位于子主题的functions.php 文件中(或插件中)。应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.