我有一个插件,可以将倡导者推荐优惠券代码发送到他们输入的电子邮件中。当观众收到这封电子邮件时,我想创建一个流程,他们可以在其中单击电子邮件中的“立即购买”,优惠券将自动添加。
截至目前,对于“立即购买”按钮下的链接,我已输入以下内容:
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),那么优惠券代码就可以完美应用。
我相信这是因为购物车是空的,代码不起作用。
只是希望当观众单击链接时应用代码。
我怎样才能让它发挥作用?
正确的做法应该是:
- 将购物车会话中 URL 中的优惠券代码设置为自定义数据。
- 当客户将第一个商品添加到购物车时,应用此优惠券代码的折扣。
- 如果客户清空购物车,则从此优惠券中删除折扣
您可以从任何网址设置任何现有的优惠券代码(例如商店页面、其他档案页面、产品页面、我的帐户页面或任何现有页面)添加到此现有网址:
?code=DISCOUNTCODE
在最后 (where 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 文件或任何插件文件中。
这是经过测试并且有效的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)