반응형
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
반응형
'source' 카테고리의 다른 글
JSON 문자열화 깊이 제한 (0) | 2023.03.23 |
---|---|
스프링 부트에 포함된 Tomcat 버전을 확인하는 방법 (0) | 2023.03.23 |
margin-top 삭제 방법: 32px!중요한 것은 12부터입니다. (0) | 2023.03.23 |
Safari 브라우저에서 웹 사이트가 제대로 로드되지 않음 (0) | 2023.03.23 |
레이아웃을 중단하지 않고 버튼 그룹 내에서 비활성화된 MUI 버튼에 툴팁을 렌더링할 수 있습니까? (0) | 2023.03.23 |