WooCommerce:从所有优惠券中排除捆绑包
WooCommerce: Exclude bundles from all coupons
我正在使用自定义代码来阻止所有优惠券中的产品。
为此,每个产品在后端都有一个额外的复选框。
代码主要基于该答案:
您可以在此处看到后端复选框:
到目前为止一切正常。
但是在我们更改捆绑包以单独定价捆绑产品后,该复选框不再起作用。
我猜代码不适用于捆绑包内的产品。
这是使优惠券在产品级别无效并将产品折扣金额设置为零的代码:
// Make coupons invalid at product level
add_filter('woocommerce_coupon_is_valid_for_product', 'set_coupon_validity_for_excluded_products', 12, 4);
function set_coupon_validity_for_excluded_products($valid, $product, $coupon, $values ){
if( ! count(get_option( '_products_disabled_for_coupons' )) > 0 ) return $valid;
$disabled_products = get_option( '_products_disabled_for_coupons' );
if( in_array( $product->get_id(), $disabled_products ) )
$valid = false;
return $valid;
}
// Set the product discount amount to zero
add_filter( 'woocommerce_coupon_get_discount_amount', 'zero_discount_for_excluded_products', 12, 5 );
function zero_discount_for_excluded_products($discount, $discounting_amount, $cart_item, $single, $coupon ){
if( ! count(get_option( '_products_disabled_for_coupons' )) > 0 ) return $discount;
$disabled_products = get_option( '_products_disabled_for_coupons' );
if( in_array( $cart_item['product_id'], $disabled_products ) )
$discount = 0;
return $discount;
}
有没有办法检查购物车项目的产品类型并禁用捆绑产品的优惠券?
我知道如何检查产品类型,并且尝试了一些方法。但到目前为止没有任何效果。
我在下面的答案中尝试了一些东西和来自 Howard E 的代码。不幸的是,目前没有任何效果。
但我意识到了一些事情。
如果捆绑包有正常价格和促销价,则一切正常。但是,如果捆绑产品是单独拼装的(如下图所示),代码将不再有效。
我想我必须检查一个项目是否是父捆绑项目的一部分?
可以在购物车中吗?
我无法对此进行测试,但似乎以下内容应该有效。
// Make coupons invalid at product level.
add_filter( 'woocommerce_coupon_is_valid_for_product', 'set_coupon_validity_for_excluded_products', 12, 4 );
function set_coupon_validity_for_excluded_products( $valid, $product, $coupon, $values ) {
if ( 'bundle' === $product->get_type() ) {
$valid = false;
}
return $valid;
}
// Set the product discount amount to zero.
add_filter( 'woocommerce_coupon_get_discount_amount', 'zero_discount_for_excluded_products', 12, 5 );
function zero_discount_for_excluded_products( $discount, $discounting_amount, $cart_item, $single, $coupon ) {
$product = wc_get_product( $cart_item['product_id'] );
if ( 'bundle' === $product->get_type() ) {
$discount = 0;
}
return $discount;
}
我找到了解决办法!
我将 if 语句更改为以下代码:
if( in_array( $product->get_id(), $disabled_products ) or wc_pb_is_bundled_cart_item($cart_item) === true )
和:
if( in_array( $cart_item['product_id'], $disabled_products ) or wc_pb_is_bundled_cart_item($cart_item) === true )
通过添加 wc_pb_is_bundled_cart_item($cart_item) === true
我可以检查购物车商品是否是捆绑包的一部分,并将该商品从任何优惠券中排除。
我正在使用自定义代码来阻止所有优惠券中的产品。 为此,每个产品在后端都有一个额外的复选框。
代码主要基于该答案:
您可以在此处看到后端复选框:
到目前为止一切正常。
但是在我们更改捆绑包以单独定价捆绑产品后,该复选框不再起作用。
我猜代码不适用于捆绑包内的产品。
这是使优惠券在产品级别无效并将产品折扣金额设置为零的代码:
// Make coupons invalid at product level
add_filter('woocommerce_coupon_is_valid_for_product', 'set_coupon_validity_for_excluded_products', 12, 4);
function set_coupon_validity_for_excluded_products($valid, $product, $coupon, $values ){
if( ! count(get_option( '_products_disabled_for_coupons' )) > 0 ) return $valid;
$disabled_products = get_option( '_products_disabled_for_coupons' );
if( in_array( $product->get_id(), $disabled_products ) )
$valid = false;
return $valid;
}
// Set the product discount amount to zero
add_filter( 'woocommerce_coupon_get_discount_amount', 'zero_discount_for_excluded_products', 12, 5 );
function zero_discount_for_excluded_products($discount, $discounting_amount, $cart_item, $single, $coupon ){
if( ! count(get_option( '_products_disabled_for_coupons' )) > 0 ) return $discount;
$disabled_products = get_option( '_products_disabled_for_coupons' );
if( in_array( $cart_item['product_id'], $disabled_products ) )
$discount = 0;
return $discount;
}
有没有办法检查购物车项目的产品类型并禁用捆绑产品的优惠券?
我知道如何检查产品类型,并且尝试了一些方法。但到目前为止没有任何效果。
我在下面的答案中尝试了一些东西和来自 Howard E 的代码。不幸的是,目前没有任何效果。
但我意识到了一些事情。
如果捆绑包有正常价格和促销价,则一切正常。但是,如果捆绑产品是单独拼装的(如下图所示),代码将不再有效。
我想我必须检查一个项目是否是父捆绑项目的一部分? 可以在购物车中吗?
我无法对此进行测试,但似乎以下内容应该有效。
// Make coupons invalid at product level.
add_filter( 'woocommerce_coupon_is_valid_for_product', 'set_coupon_validity_for_excluded_products', 12, 4 );
function set_coupon_validity_for_excluded_products( $valid, $product, $coupon, $values ) {
if ( 'bundle' === $product->get_type() ) {
$valid = false;
}
return $valid;
}
// Set the product discount amount to zero.
add_filter( 'woocommerce_coupon_get_discount_amount', 'zero_discount_for_excluded_products', 12, 5 );
function zero_discount_for_excluded_products( $discount, $discounting_amount, $cart_item, $single, $coupon ) {
$product = wc_get_product( $cart_item['product_id'] );
if ( 'bundle' === $product->get_type() ) {
$discount = 0;
}
return $discount;
}
我找到了解决办法!
我将 if 语句更改为以下代码:
if( in_array( $product->get_id(), $disabled_products ) or wc_pb_is_bundled_cart_item($cart_item) === true )
和:
if( in_array( $cart_item['product_id'], $disabled_products ) or wc_pb_is_bundled_cart_item($cart_item) === true )
通过添加 wc_pb_is_bundled_cart_item($cart_item) === true
我可以检查购物车商品是否是捆绑包的一部分,并将该商品从任何优惠券中排除。