从 WooCommerce 优惠券中排除具有特定属性术语的产品

问题描述

我想从所有 WooCommerce 优惠券中排除具有特定属性(例如 attribute_pa_brand => mybrand)的产品。

我遵循了这个答案 Exclude variations with 2 specific attribute terms from coupon usage in Woocommerce,但它似乎只适用于可变产品类型,而我只需要它用于简单产品

我将不胜感激。

解决方法

linked code from your question 用于产品变体类型。现在要使其适用于简单产品和可变产品(不针对特定变体属性术语),您将使用以下内容:

add_filter( 'woocommerce_coupon_is_valid','custom_coupon_validity',10,3 );
function custom_coupon_validity( $is_valid,$coupon,$discount ){
    // YOUR ATTRIBUTE SETTINGS BELOW:
    $taxonomy   = 'pa_brand'; // Set the taxonomy (start always with "pa_" + the slug)
    $term_names = array('Apple','Sony'); // Set your term NAMES to be excluded

    $term_ids = array(); // Initializing

    // Convert term names to term Ids
    foreach ( $term_names as $term_name ) {
        // Set each term id in the array
        $term_ids[] = get_term_by( 'name',$term_name,$taxonomy )->term_id;
    }

    // Loop through cart items and check for backordered items
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        $product = $cart_item['variation_id'] > 0 ? wc_get_product($cart_item['product_id']) : $cart_item['data'];
        // Loop through product attributes
        foreach( $product->get_attributes() as $attribute => $values ) {
            if( $attribute === $taxonomy && array_intersect( $values->get_options(),$term_ids ) ) {
                $is_valid = false; // attribute found,coupons are not valid
                break; // Stop and exit from the loop
            }
        }
    }
    return $is_valid;
}

代码位于活动子主题(或活动主题)的functions.php 文件中。在上一个 WooCommerce 版本上测试并适用于简单和可变的产品。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...