2017-10-18 30 views
6

Tôi có một plugin gửi mã phiếu thưởng giới thiệu đến e-mail mà họ nhập. Khi khán giả nhận được email này, tôi muốn tạo luồng mà họ có thể nhấp vào 'MUA NGAY' trong e-mail và phiếu giảm giá sẽ tự động được thêm vào.Áp dụng chiết khấu phiếu giảm giá thông qua phương thức GET trong URL ngay cả vào giỏ hàng trống trong WooCommerce

Tính đến bây giờ, cho vào liên kết dưới 'CỬA HÀNG VỚI DOANH NGHIỆP' nút tôi đã nhập như sau:

websitename.biz/cart__trashed?code=DISCOUNTCODE 

Xử lý $code Tôi đã đặt này trong tập tin functions.php của tôi:

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>'; 
     } 
    } 
} 

vấn đề tôi đang phải đối mặt với ở đây là:

  • nếu không có gì trong giỏ hàng khi khán giả đến thăm trang web, thứ là phiếu giảm giá điện tử sẽ không được áp dụng.
  • Nếu có điều gì đó được thêm vào và vẫn ở đó (vì cookie) thì mã phiếu giảm giá được áp dụng hoàn hảo.

Tôi tin rằng vì giỏ hàng trống, mã không hoạt động.

Chỉ muốn mã được áp dụng khi người xem nhấp vào liên kết.

Tôi làm cách nào để làm việc này?

+0

Bạn có thể vượt qua id sản phẩm cùng với mã coupon để nếu bất kỳ khách hàng nhấp chuột vào liên kết, đầu tiên kiểm tra xem sản phẩm có mặt trong giỏ hàng hay không. Nếu không thì trước tiên hãy thêm sản phẩm vào giỏ hàng theo mã của bạn rồi cuối cùng áp dụng phiếu giảm giá. –

+0

Tôi thấy rằng như một công việc xung quanh khi tôi chỉ có 3 sản phẩm, nhưng tôi sẽ không dễ dàng thêm mã phiếu giảm giá vào giỏ hàng và họ có thể mua bất cứ thứ gì họ muốn và mã sẽ được áp dụng cho phiên không? Điều này dễ dàng hơn cho khách hàng của khóa học – Mjall2

+0

Nhưng Woocommerce không cho phép áp dụng phiếu giảm giá và lưu vào giỏ hàng khi giỏ hàng trống. Nhưng bạn có thể viết mã tùy chỉnh của mình như ngay khi khách hàng nhấp vào liên kết lưu mã phiếu thưởng trên khóa phiên của riêng bạn, từ đó bạn có thể theo dõi xem khách hàng có bất kỳ thứ gì trong giỏ hàng hay không. Nếu có thì hãy áp dụng phiếu giảm giá bằng cách tìm nạp từ khóa phiên của bạn. –

Trả lời

5

Cách đúng để làm điều đó nên được để:

  • Đặt mã coupon từ URL trong phiên giỏ hàng dưới dạng dữ liệu tùy chỉnh.
  • Áp dụng chiết khấu từ mã phiếu giảm giá này khi khách hàng thêm mặt hàng đầu tiên vào giỏ hàng.
  • Tháo tái chiết khấu từ phiếu giảm giá này nếu khách hàng có sản phẩm nào giỏ

Bạn có thể đặt bất kỳ mã coupon hiện từ bất kỳ Url (như trang cửa hàng, các trang tài liệu lưu trữ khác, các trang sản phẩm, trang tài khoản của tôi, hoặc bất kỳ hiện trang) thêm vào url hiện tại này:
?code=DISCOUNTCODE ở cuối
(trong đó DISCOUNTCODE là tên mã phiếu giảm giá của bạn).

Đây là mã:

// 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); 
} 

Mã đi trong tập tin function.php của child theme hoạt động của bạn (hoặc chủ đề đang hoạt động) hoặc trong bất kỳ tập tin plugin.

này được kiểm tra và làm việc

+1

hoạt động như một sự quyến rũ – Mjall2

0
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>'; 
     } 
    } 
} 
+0

Hey điều này không hoạt động, khi tôi thêm sản phẩm, nó không áp dụng phiếu giảm giá, cũng không áp dụng phiếu giảm giá khi sản phẩm đã thêm hoặc khi thanh toán. – Mjall2

1

sử dụng mã dưới đây để làm cho coupan hợp lệ trong bất kỳ tình huống

add_filter('woocommerce_coupon_is_valid','coupon_always_valid',10,1); 
function coupon_always_valid($valid){ 
    $valid = true; 
    return $valid ; 
} 
+0

điều này sẽ đạt được điều gì? nên tôi chỉ cần thêm điều này vào function.php aloong của tôi với mã tôi đã viết? – Mjall2

+0

có appand mã này trong functions.php –

Các vấn đề liên quan