为了账号安全,请及时绑定邮箱和手机立即绑定

有条件地应用 WooCommerce 上生成的优惠券添加到购物车

有条件地应用 WooCommerce 上生成的优惠券添加到购物车

PHP
料青山看我应如是 2023-09-15 10:23:07
我目前正在使用重力表格(启用了推荐作为潜在客户)。我使用提交钩子根据优惠券模板(在我的functions.php 中)生成随机优惠券。我的目标是在结账页面将该优惠券自动应用于他们的订单。我成功地生成了优惠券,但不太清楚如何应用它。仅供参考-我在用户体验中不使用购物车,因此产品页面>结账。如果有人可以提供一些帮助,或者为我指明正确的方向,我将不胜感激。// Generate Random Coupon  function after_submission () {$coupon_code = substr( "abcdefghijklmnopqrstuvwxyz123456789", mt_rand(0, 50) , 1) .substr( md5( time() ), 1); // Code$coupon_code = substr( $coupon_code, 0,10); // create 10 letters coupon$amount = '0'; // Amount$discount_type = 'free_shipping'; // Type: fixed_cart, percent, fixed_product, percent_product$coupon = array(    'post_title' => $coupon_code,    'post_content' => 'Free Shipping & Handling',    'post_excerpt' => 'Free Shipping & Handling',    'post_status' => 'publish',    'post_author' => 1,    'post_type'     => 'shop_coupon');$new_coupon_id = wp_insert_post( $coupon );// Add metaupdate_post_meta( $new_coupon_id, 'discount_type', $discount_type );update_post_meta( $new_coupon_id, 'coupon_amount', $amount );update_post_meta( $new_coupon_id, 'individual_use', 'yes' );update_post_meta( $new_coupon_id, 'product_ids', '' );update_post_meta( $new_coupon_id, 'exclude_product_ids', '' );update_post_meta( $new_coupon_id, 'usage_limit', '1' );update_post_meta( $new_coupon_id, 'expiry_date', '' );update_post_meta( $new_coupon_id, 'apply_before_tax', 'no' );update_post_meta( $new_coupon_id, 'free_shipping', 'no' );update_post_meta( $new_coupon_id, 'exclude_sale_items', 'no' );update_post_meta( $new_coupon_id, 'free_shipping', 'yes' );update_post_meta( $new_coupon_id, 'product_categories', '' );update_post_meta( $new_coupon_id, 'exclude_product_categories', '' );update_post_meta( $new_coupon_id, 'minimum_amount', '' );update_post_meta( $new_coupon_id, 'customer_email', '' );       return $coupon_code;}
查看完整描述

1 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

您需要在 WC 会话变量中设置创建的优惠券代码。那么你就可以轻松的得到它了。


从 WooCommerce 3 开始,您的代码有点过时,并且存在错误。请尝试以下方法:


// Early enable customer WC_Session

add_action( 'init', 'wc_session_enabler' );

function wc_session_enabler() {

    if ( is_user_logged_in() || is_admin() ) 

        return; 

        

    if ( isset(WC()->session) && ! WC()->session->has_session() ) { 

        WC()->session->set_customer_session_cookie( true ); 

    } 

}


// Utility function that generate a non existing coupon code (as each coupon code required to be unique)

function generated_counpon_code() {

    for ( $i = 0; $i < 1; $i++ ) {

        $coupon_code = strtolower( wp_generate_password( 10, false ) );


        // Check that the generated code doesn't exist yet

        if( coupon_exists( $coupon_code ) ) $i--; // continue

        else break; // Stop the loopp

    }

    return $coupon_code;

}


function coupon_exists( $coupon_code ) {

    global $wpdb;

    return $wpdb->get_var( $wpdb->prepare("SELECT COUNT(ID) FROM $wpdb->posts

        WHERE post_type = 'shop_coupon' AND post_name = '%s'", $coupon_code));

}


// Generate coupon and set code in customer WC session variable

function after_submission () {

    // Get a random unique coupon code

    $coupon_code = generated_counpon_code();


    // Get an empty instance of the WC_Coupon Object

    $coupon = new WC_Coupon();


    $coupon->set_code( $coupon_code );

    $coupon->set_status( 'publish' );

    $coupon->set_discount_type( 'fixed_cart' );

    $coupon->set_description( __('Free Shipping & Handling') );

    $coupon->set_amount( 0 );

    $coupon->set_usage_limit( 1 );

    $coupon->set_free_shipping( 1 ); // <== Added back

    $coupon->set_individual_use( 1 );


    // Save coupon (data)

    $coupon->save();


    WC()->session->set( 'unique_coupon', $coupon_code );

}


// Gravity Forms Referral (hook)

add_action( 'gform_after_submission_9', 'after_submission', 10, 2 );



// Add generated coupon to cart

add_action( 'woocommerce_add_to_cart', 'apply_matched_coupons' );

function apply_matched_coupons() {

    if ( is_cart() || is_checkout() ) return;


    // Load coupon code

    $coupon_code = WC()->session->get( 'unique_coupon' );


    if ( $coupon_code && ! WC()->cart->has_discount( $coupon_code ) ) {

        WC()->cart->apply_coupon( $coupon_code ); // Apply coupon code

        WC()->session->__unset( 'unique_coupon' ); // remove session variable 

    }

}

代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并有效。


查看完整回答
反对 回复 2023-09-15
  • 1 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信