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 文件中。經過測試并有效。
- 1 回答
- 0 關注
- 129 瀏覽
添加回答
舉報