source

WooCommerce에서 카트가 비어있는 경우에도 URL에서 GET 방식으로 쿠폰 할인 적용

ittop 2023. 3. 23. 23:08
반응형

WooCommerce에서 카트가 비어있는 경우에도 URL에서 GET 방식으로 쿠폰 할인 적용

나는 그들이 입력한 이메일에 옹호자 추천 쿠폰 코드를 보내는 플러그인을 가지고 있다.시청자가 이 메일을 받으면 메일에서 '지금 바로 쇼핑'을 클릭하면 쿠폰이 자동으로 추가되는 플로우를 만들고 싶습니다.

현시점에서는 '지금 바로 구매' 버튼 아래의 링크에 다음과 같이 입력했습니다.

websitename.biz/cart__trashed?code=DISCOUNTCODE

취급하다$code이건 제 기능에 넣었어요.php 파일:

add_action('woocommerce_before_cart', 'discount');
function discount( ) {
    global $woocommerce;
    $code= $_GET["code"];
   if(!empty($code)){       
    if($woocommerce->cart->add_discount($code)){ 
    echo '<div class="woocommerce_message"><strong>Applied coupon!</strong></div>';
        }
    }
}

제가 직면한 문제는 다음과 같습니다.

  • 고객이 웹사이트에 방문했을 때 카트에 아무것도 없을 경우 쿠폰은 적용되지 않습니다.
  • (쿠키 때문에) 추가가 되어 있는 경우는, 쿠폰 코드가 완전하게 적용됩니다.

카트가 비어 있기 때문에 코드가 작동하지 않는 것 같습니다.

시청자가 링크를 클릭할 때 코드가 적용되기를 바랄 뿐입니다.

어떻게 하면 될까요?

올바른 방법은 다음과 같습니다.

  • 카트 세션의 URL에서 쿠폰 코드를 커스텀 데이터로 설정합니다.
  • 고객이 장바구니에 첫 번째 아이템을 추가할 때 이 쿠폰 코드에서 할인을 적용하십시오.
  • 고객이 카트를 비운 경우 이 쿠폰에서 할인을 제거합니다.

이 기존 URL에 추가하는 URL(샵 페이지, 기타 아카이브 페이지, 제품 페이지, 내 계정 페이지 또는 기존 페이지 등)에서?code=DISCOUNTCODE 기존 쿠폰 코드를 설정할 수 있습니다(여기에 쿠폰 코드 이름이 있습니다).

코드는 다음과 같습니다.

// Set coupon code as custom data in cart session
add_action('wp_loaded', 'add_coupon_code_to_cart_session');
function add_coupon_code_to_cart_session() {
    // Exit if no code in URL or if the coupon code is already set cart session
    if( empty( $_GET["code"] ) || WC()->session->get( 'custom_discount' ) ) return;

    if( ! WC()->session->get( 'custom_discount' ) ) {
        $coupon_code = esc_attr($_GET["code"]);
        WC()->session->set( 'custom_discount', $coupon_code );
        // If there is an existing non empty cart active session we apply the coupon
        if( ! WC()->cart->is_empty() ){
            WC()->cart->add_discount( $coupon_code );
        }
    }
}

// Add coupon code when a product is added to cart once
add_action('woocommerce_add_to_cart', 'add_coupon_code_to_cart', 10, 6 );
function add_coupon_code_to_cart( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ){
    $coupon_code = WC()->session->get( 'custom_discount' );
    $applied_coupons = WC()->session->get('applied_coupons');

    if( empty($coupon_code) || in_array( $coupon_code, $applied_coupons ) ) return;

    WC()->cart->add_discount( $coupon_code );
}

// Remove coupon code when user empty his cart
add_action('woocommerce_cart_item_removed', 'check_coupon_code_cart_items_removed', 10, 6 );
function check_coupon_code_cart_items_removed( $cart_item_key, $cart ){
    $coupon_code = WC()->session->get( 'custom_discount' );

    if( $cart->has_discount( $coupon_code ) && $cart->is_empty() );
        $cart->remove_coupon( $coupon_code );
}

코드가 기능합니다.php 파일 또는 플러그인 파일에 있는 활성 자식 테마(또는 활성 테마)입니다.

이것은 테스트되어 동작합니다.

어떤 상황에서도 쿠판을 유효하게 하기 위해 아래 코드를 사용한다.

add_filter('woocommerce_coupon_is_valid','coupon_always_valid',10,1);
function coupon_always_valid($valid){
     $valid = true;
     return $valid ; 
}
add_action('woocommerce_before_cart', 'discount');
function discount( ) {
    global $woocommerce;
    $code= $_GET["code"];
   if(!empty($code)){       
    if(WC()->session->set( 'applied_coupons', $code )){ 
    echo '<div class="woocommerce_message"><strong>Applied coupon!</strong></div>';
        }
    }
}

언급URL : https://stackoverflow.com/questions/46814228/apply-coupon-discount-via-get-method-in-url-even-if-cart-is-empty-in-woocommerce

반응형