Php 从Woocommerce中的优惠券使用中排除具有2个特定属性术语的变体
我需要防止使用优惠券,如果客户的购物车中有以下属性术语的任何特定产品变化:Php 从Woocommerce中的优惠券使用中排除具有2个特定属性术语的变体,php,wordpress,woocommerce,custom-taxonomy,coupon,Php,Wordpress,Woocommerce,Custom Taxonomy,Coupon,我需要防止使用优惠券,如果客户的购物车中有以下属性术语的任何特定产品变化: attribute\u pa\u style=>whirly attribute\u pa\u style=>circle 我已经浏览了Woocommerce脚本,这些脚本适用于限制特定产品和特定类别,但对于属性和所有优惠券,我无法理解 非常感谢您的帮助。这可以通过使用woocommerce\u优惠券\u是否有效来实现。过滤挂钩,方法如下: add_filter( 'woocommerce_coupon_is_val
attribute\u pa\u style=>whirly
attribute\u pa\u style=>circle
非常感谢您的帮助。这可以通过使用
woocommerce\u优惠券\u是否有效来实现。
过滤挂钩,方法如下:
add_filter( 'woocommerce_coupon_is_valid', 'check_if_coupons_are_valid', 10, 3 );
function check_if_coupons_are_valid( $is_valid, $coupon, $discount ){
// YOUR ATTRIBUTE SETTINGS BELOW:
$taxonomy = 'pa_style';
$term_slugs = array('swirly', 'circle');
// Loop through cart items and check for backordered items
foreach ( WC()->cart->get_cart() as $cart_item ) {
foreach( $cart_item['variation'] as $attribute => $term_slug ) {
if( $attribute === 'attribute_'.$taxonomy && in_array( $term_slug, $term_slugs ) ) {
$is_valid = false; // attribute found, coupons are not valid
break; // Stop and exit from the loop
}
}
}
return $is_valid;
}
代码进入活动子主题(或活动主题)的function.php文件。已测试且有效。是否将“样式”产品属性用于产品变体?您的目标产品类型是什么?是的,样式属性用于变体。该产品是一个可变产品,有两个属性用于“颜色”和“样式”的变化。我想针对任何具有要从优惠券中排除的样式属性的产品。如果只选择了一个“样式”属性,我想拒绝优惠券,如何更新此代码?后来我把这个改成了“风格”——是或否(术语)。如果产品仅为“样式”属性选择了变体“是”,我想拒绝优惠券。我尝试删除阵列,但无法找到它。非常感谢您的帮助。我尝试过这个,但它使优惠券对那些不在数组中的人无效。因此,我的分类法是
finish
,我的数组是“装箱”、“拉伸”
,但如果我向购物车中添加了第三个产品,而该产品不在此数组中,优惠券将不会应用于该“有效”产品。请你能帮帮我吗@loictheaztec@MitchellK这是正常的,因为这是本代码的目的:如果任何产品变体在购物车中有“漩涡”或“圆形”术语表示“pa_style”属性,则会使优惠券无效,即使有其他项目没有。此优惠券不能应用于其他项目,因为这适用于购物车百分比和购物车固定等全球优惠券类型。是否有办法解决此问题?我正在努力实现@MitchellK的目标。允许将优惠券应用于购物车中不受此功能限制的其他产品。这些是基于百分比的优惠券,但我需要它们对购物车中每个合格产品打15%的折扣,或者购物车总额(不包括不合格的产品金额)…有可能吗?我在这里尝试了这个答案,但它仍然拒绝了所有-我一直在使用这个。术语_slug的拼写必须与属性下“值”部分中的拼写完全相同。因此,它将当前优惠券应用于与您定义的任何slug都不匹配的所有项目。当客户添加不适用于优惠券的其他项目时,优惠券将从所有项目中删除。这可能不是最好的解决办法,我相信会有更聪明、更复杂的方法来处理这个问题。对于我的需要,我发现它正是我需要的,我想要从折扣中排除的属性的术语slug就是“是”。分类法是“pa_定制”,变体是“是”或“否”。所以,拼写不是问题。我很想知道你是怎么做到的。我真的很想让这些优惠券为购物车中的其他产品工作,或者购物车总计,如果购物车中的产品不包含“是”变量。