通过URL中的GET方法应用优惠券折扣,甚至可以在WooCommerce中清空购物车
我有一个插件,用于将主张推介优惠券代码发送给他们输入的电子邮件。当观众收到这封电子邮件时,我想创建一个流程,他们可以点击电子邮件中的“立即购买”,并且优惠券将自动添加。通过URL中的GET方法应用优惠券折扣,甚至可以在WooCommerce中清空购物车
截至目前,对下的链接“立即购买”按钮,我已经进入了以下内容:
websitename.biz/cart__trashed?code=DISCOUNTCODE
要处理$code
我已经把这个在我functions.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>';
}
}
}
我这里面临的问题是:
- 如果没有什么车的时候,观众访问该网站,TH电子优惠券不适用。
- 如果有东西被添加并留在那里(因为cookie),那么优惠券代码就可以完美应用了。
我相信它是因为购物车是空的,代码不起作用。
只希望代码在观众点击链接时应用。
我该如何做到这一点?
做到这一点应该是正确的方法:
- 从URL时设置优惠券代码购物车会话为自定义数据。
- 当客户将第一件物品添加到购物车时,应用此优惠券代码中的折扣。
- 从这个优惠券删除折扣,如果客户空购物车
可以,其他的档案页,产品页,我的帐户页面,或任何现有的任何URL(如店铺页面设置任何现有的优惠券代码页面)添加到这个现有的网址:
?code=DISCOUNTCODE
在结束(其中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);
}
代码放在您的活动子主题的function.php文件(或活动主题),或在任何插件文件。
这是测试和工程
工程就像一个魅力 – Mjall2
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>';
}
}
}
嘿,这是行不通的,当我添加产品时,它不回应应用优惠券,也不适用产品是优惠券添加或结帐。 – Mjall2
使用下面的代码,使coupan有效的在任何情况下
add_filter('woocommerce_coupon_is_valid','coupon_always_valid',10,1);
function coupon_always_valid($valid){
$valid = true;
return $valid ;
}
这会实现什么?我应该只用这些代码将它附加到我的functions.php文件中吗? – Mjall2
是的appand这个代码在functions.php –
你可以通过产品ID与优惠券代码一起,这样,如果任何客户端点击该链接时,首先检查产品是否存在于购物车与否。如果不是,那么首先将您的代码添加到购物车,然后最后应用优惠券。 –
当我只有3种产品时,我发现这只是一种解决方法,但是将优惠券代码添加到购物车并且他们可以购买他们想要的任何商品并将代码应用到会话中,这对我来说会不会更容易?这对于客户来说当然更容易 – Mjall2
但Woocommerce不允许使用优惠券,并且当购物车是空的时候保存到购物车。但是,只要客户点击链接,您就可以编写自定义代码,将优惠券代码保存在您自己的会话密钥上,从那里您可以跟踪客户是否有购物车中的任何东西。如果是,则通过从会话密钥中提取优惠券。 –