特定产品类别的强制性优惠券避免在 Woocommerce 中结账
Mandatory coupon for specific product categories avoiding checkout in Woocommerce
我希望使用 woocommerce 智能优惠券创建 "invitation codes"。为此,我希望特定产品在购物车/结账时需要优惠券代码。我已经看到了执行此操作的方法,但是它们会影响所有产品,而不仅仅是我想要的产品。
我正在尝试将一个 returned 变量传递给另一个函数,但我不知道该怎么做。
这是最新版本:
//Check to see if user has product with a specific product category in cart
function check_product_in_cart() {
global $woocommerce;
//assigns a default negative value
// categories targeted 87, 18, 19
$product_in_cart = false;
// start of the loop that fetches the cart items
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
$terms = get_the_terms( $_product->id, 'product_cat' );
// second level loop search, in case some items have several categories
foreach ($terms as $term) {
$_categoryid = $term->term_id;
if (( $_categoryid === 87 ) || ( $_categoryid === 18 ) || ( $_categoryid === 19 )) {
//category is in cart!
$product_in_cart = true;
}
}
}
return $product_in_cart;
}
// Force Coupon codes for Woocommerce
add_action('woocommerce_check_cart_items', 'force_coupon_code');
function force_coupon_code( $product_in_cart )
{
global $woocommerce;
if(is_cart() || is_checkout()){
$my_coupon = $woocommerce->cart->applied_coupons;
echo $woocommerce->cart->get_applied_coupons;
if(empty($my_coupon))
{
wc_add_notice( '<strong>' . $btn['label'] . '</strong> ' . __( 'A coupon code is mandatory for this product.', 'woocommerce' ), 'error' );
}
}
}
第一部分应该return产品$product_in_cart,第二部分强制使用优惠券。这是我正在使用的代码的来源。
Mandatory Coupon code and Checking products in cart based on category. I read that placing the variable inside the new function args might achieve this like so,但它根本不起作用。
Updated on 2018-04-01
您使用的代码已过时且复杂。这可以简单地在一个挂钩函数中完成,而不是使用 Wordpress has_term()
条件函数来检测购物车项目是否属于特定产品类别。
所以你的代码会更加紧凑和高效:
// Force Coupon codes for Woocommerce
add_action('woocommerce_check_cart_items', 'mandatory_coupon_code');
function mandatory_coupon_code()
{
// set Here your categories IDs, slugs or names
$categories = array(18,19,87);
$found = false;
// Loop through cart items
foreach ( WC()->cart->get_cart() as $cart_item )
if( has_term( $categories, 'product_cat', $cart_item['product_id'] ) ){
// Product category found in cart items
$found = true;
// Exit from loop
break;
}
}
$coupons = WC()->cart->get_applied_coupons();
// The Notice is displayed for that product categories when no mandatory coupon has been entered
if( count( $coupons ) > 0 && $found )
wc_add_notice( __( 'A coupon code is mandatory for this product.', 'woocommerce' ), 'error' );
}
}
此代码进入您的活动子主题(或活动主题)的 function.php 文件。 已测试并有效。
版本 特定优惠券代码且没有产品类别(适用于所有产品):
add_action( 'woocommerce_check_cart_items', 'mandatory_coupon_code' );
function mandatory_coupon_code() {
// HERE set your coupon code
$mandatory_coupon = 'spring10';
$applied_coupons = WC()->cart->get_applied_coupons();
// If coupon is found we exit
if( in_array( $mandatory_coupon, $applied_coupons ) ) return;
// Not found: display an error notice
wc_add_notice( __( 'Please enter coupon code to checkout.', 'woocommerce' ), 'error' );
}
此代码进入您的活动子主题(或活动主题)的 function.php 文件。 已测试并有效。
我希望使用 woocommerce 智能优惠券创建 "invitation codes"。为此,我希望特定产品在购物车/结账时需要优惠券代码。我已经看到了执行此操作的方法,但是它们会影响所有产品,而不仅仅是我想要的产品。
我正在尝试将一个 returned 变量传递给另一个函数,但我不知道该怎么做。
这是最新版本:
//Check to see if user has product with a specific product category in cart
function check_product_in_cart() {
global $woocommerce;
//assigns a default negative value
// categories targeted 87, 18, 19
$product_in_cart = false;
// start of the loop that fetches the cart items
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
$terms = get_the_terms( $_product->id, 'product_cat' );
// second level loop search, in case some items have several categories
foreach ($terms as $term) {
$_categoryid = $term->term_id;
if (( $_categoryid === 87 ) || ( $_categoryid === 18 ) || ( $_categoryid === 19 )) {
//category is in cart!
$product_in_cart = true;
}
}
}
return $product_in_cart;
}
// Force Coupon codes for Woocommerce
add_action('woocommerce_check_cart_items', 'force_coupon_code');
function force_coupon_code( $product_in_cart )
{
global $woocommerce;
if(is_cart() || is_checkout()){
$my_coupon = $woocommerce->cart->applied_coupons;
echo $woocommerce->cart->get_applied_coupons;
if(empty($my_coupon))
{
wc_add_notice( '<strong>' . $btn['label'] . '</strong> ' . __( 'A coupon code is mandatory for this product.', 'woocommerce' ), 'error' );
}
}
}
第一部分应该return产品$product_in_cart,第二部分强制使用优惠券。这是我正在使用的代码的来源。 Mandatory Coupon code and Checking products in cart based on category. I read that placing the variable inside the new function args might achieve this like so,但它根本不起作用。
Updated on 2018-04-01
您使用的代码已过时且复杂。这可以简单地在一个挂钩函数中完成,而不是使用 Wordpress has_term()
条件函数来检测购物车项目是否属于特定产品类别。
所以你的代码会更加紧凑和高效:
// Force Coupon codes for Woocommerce
add_action('woocommerce_check_cart_items', 'mandatory_coupon_code');
function mandatory_coupon_code()
{
// set Here your categories IDs, slugs or names
$categories = array(18,19,87);
$found = false;
// Loop through cart items
foreach ( WC()->cart->get_cart() as $cart_item )
if( has_term( $categories, 'product_cat', $cart_item['product_id'] ) ){
// Product category found in cart items
$found = true;
// Exit from loop
break;
}
}
$coupons = WC()->cart->get_applied_coupons();
// The Notice is displayed for that product categories when no mandatory coupon has been entered
if( count( $coupons ) > 0 && $found )
wc_add_notice( __( 'A coupon code is mandatory for this product.', 'woocommerce' ), 'error' );
}
}
此代码进入您的活动子主题(或活动主题)的 function.php 文件。 已测试并有效。
版本 特定优惠券代码且没有产品类别(适用于所有产品):
add_action( 'woocommerce_check_cart_items', 'mandatory_coupon_code' );
function mandatory_coupon_code() {
// HERE set your coupon code
$mandatory_coupon = 'spring10';
$applied_coupons = WC()->cart->get_applied_coupons();
// If coupon is found we exit
if( in_array( $mandatory_coupon, $applied_coupons ) ) return;
// Not found: display an error notice
wc_add_notice( __( 'Please enter coupon code to checkout.', 'woocommerce' ), 'error' );
}
此代码进入您的活动子主题(或活动主题)的 function.php 文件。 已测试并有效。