即使 WooCommerce 中的购物车为空,也可以通过 URL 中的 GET 方法应用优惠券折扣
Apply coupon discount via GET method in URL even if cart is empty in WooCommerce
我有一个插件可以将倡导者推荐优惠券代码发送到他们输入的电子邮件中。当观众收到这封电子邮件时,我想创建一个流程,他们可以点击电子邮件中的 'SHOP NOW',优惠券将自动添加。
截至目前,对于 'SHOP NOW' 按钮下的 link,我输入了以下内容:
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>';
}
}
}
我现在面临的问题是:
- 如果观众访问网站时购物车中没有任何东西,则不会使用优惠券。
- 如果添加了一些东西并留在那里(因为 cookie),那么优惠券代码就完美应用了。
我相信是因为购物车是空的,代码不起作用。
只想在观众点击 link 时应用代码。
我怎样才能让它工作?
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>';
}
}
}
使用下面的代码使coupan在任何情况下都有效
add_filter('woocommerce_coupon_is_valid','coupon_always_valid',10,1);
function coupon_always_valid($valid){
$valid = true;
return $valid ;
}
正确的做法应该是:
- 将购物车会话中 URL 中的优惠券代码设置为自定义数据。
- 当客户将第一件商品添加到购物车时,应用此优惠券代码的折扣。
- 如果客户清空购物车,则取消此优惠券的折扣
You can set any existing coupon code from any Url (like shop page, other archives pages, products pages, my account pages, or any existing pages) adding to this existing url:
?code=DISCOUNTCODE
at the end (where DISCOUNTCODE
is your coupon code name).
代码如下:
// 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 文件或任何插件文件。
这已经过测试并且有效
我有一个插件可以将倡导者推荐优惠券代码发送到他们输入的电子邮件中。当观众收到这封电子邮件时,我想创建一个流程,他们可以点击电子邮件中的 'SHOP NOW',优惠券将自动添加。
截至目前,对于 'SHOP NOW' 按钮下的 link,我输入了以下内容:
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>';
}
}
}
我现在面临的问题是:
- 如果观众访问网站时购物车中没有任何东西,则不会使用优惠券。
- 如果添加了一些东西并留在那里(因为 cookie),那么优惠券代码就完美应用了。
我相信是因为购物车是空的,代码不起作用。
只想在观众点击 link 时应用代码。
我怎样才能让它工作?
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>';
}
}
}
使用下面的代码使coupan在任何情况下都有效
add_filter('woocommerce_coupon_is_valid','coupon_always_valid',10,1);
function coupon_always_valid($valid){
$valid = true;
return $valid ;
}
正确的做法应该是:
- 将购物车会话中 URL 中的优惠券代码设置为自定义数据。
- 当客户将第一件商品添加到购物车时,应用此优惠券代码的折扣。
- 如果客户清空购物车,则取消此优惠券的折扣
You can set any existing coupon code from any Url (like shop page, other archives pages, products pages, my account pages, or any existing pages) adding to this existing url:
?code=DISCOUNTCODE
at the end (whereDISCOUNTCODE
is your coupon code name).
代码如下:
// 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 文件或任何插件文件。
这已经过测试并且有效