Comment appliquer une remise sur des variables et des produits individuels dans WooCommerce en fonction de la quantité du panier et des attributs du produit ?
P粉592085423
P粉592085423 2023-07-23 13:26:53
0
1
627

J'essaie d'appliquer un pourcentage de remise basé sur le nombre de produits dans le panier avec un attribut de produit spécifique.

Plus précisément, mon objectif est d'appliquer 15% de réduction à l'achat d'au moins 6 produits avec l'attribut "flaske".

J'ai réussi à y parvenir sur des produits avec des propriétés variables, mais je n'arrive pas à le faire pour un produit unique/simple.

Voici mon code jusqu'à présent (emprunté à WooCommerce pour les conditions de quantité et de prix)

// 根据购物车中的产品数量和属性进行折扣。
add_action( 'woocommerce_cart_calculate_fees','wc_cart_item_quantity_discount' );
function wc_cart_item_quantity_discount( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // 初始化变量。
    $min_item_amount = 6; // 最小数量。
    $discount = $items_count = $percent = $items_subtotal = 0;
    $taxonomy   = 'pa_variant'; // 分类
    $term_slugs = array('flaske'); // 术语
    // 遍历购物车中的物品
    foreach( $cart->get_cart() as $cart_item_key => $cart_item ) {
      // 遍历变体
      foreach( $cart_item['variation'] as $attribute => $term_slug ) {
        // 只计算具有属性且数量超过6的物品。
        if( $cart_item['data']->get_price() >= $min_item_amount && $attribute === 'attribute_'.$taxonomy && in_array( $term_slug, $term_slugs ) ) {
            $items_count += $cart_item['quantity'];
            $items_subtotal += $cart_item['line_subtotal'];
        }
      }
    }
    // 条件百分比。
    if ($items_count >= 6 ) {
        $percent = 15;
    }
    // 折扣(应税)。
    if( $items_count > 0 ) {
        // 计算
        $discount -= ($items_subtotal / 100) * $percent;
        $cart->add_fee( __( "Mix & Match rabat - $percent%", "woocommerce" ), $discount, true);
    }
}

Mon code actuel fonctionne très bien pour les produits variables (variations) mais ne semble pas avoir d'effet sur des produits uniques même si je donne des produits uniques reçoivent les mêmes attributs que les produits variables.

Je soupçonne que cela a quelque chose à voir avec la boucle foreach, c'est-à-dire foreach( $cart_item['variation'] as $attribute => $term_slug ).

Comment le faire fonctionner en général pour qu'il fonctionne également pour un produit unique/simple avec le même attribut « flacon » ?

Merci beaucoup pour votre aide et vos suggestions.

P粉592085423
P粉592085423

répondre à tous(1)
P粉323374878

Pourcentage de remise Woocommerce pour chaque article en fonction de la quantité

Excluez les variantes avec 2 termes d'attributs spécifiques dans Woocommerce de l'utilisation des coupons

add_action( 'woocommerce_cart_calculate_fees','wc_cart_item_quantity_discount' );
function wc_cart_item_quantity_discount( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // 初始化变量。
    $min_item_amount = 6; // 最小数量
    $discount = $items_count = $percent = $items_subtotal = 0;
    $taxonomy   = 'pa_variant'; // 分类
    $term_slugs = array('flaske'); 
    // 遍历购物车中的物品
    foreach( $cart->get_cart() as $cart_item_key => $cart_item ) {
        $product = $cart_item['data'];
        $price   = $product->get_price();

        // 产品变种
        if( $product->is_type('variation') ) {
            // 遍历变种属性
            foreach ($cart_item['variation'] as $attribute => $term_slug) {
                // 只计算具有属性且数量大于6的物品。
                if ($price >= $min_item_amount && $attribute === 'attribute_' . $taxonomy && in_array($term_slug, $term_slugs)) {
                    $items_count += $cart_item['quantity'];
                    $items_subtotal += $cart_item['line_subtotal'];
                }
            }
        } 
        // 简单产品
        elseif ( $product->is_type('simple') ) {
            $attributes = $product->get_attributes();

            if( ! empty($attributes) && array_key_exists($taxonomy, $attributes) ) {
                $terms = (array) $attributes[$taxonomy]->get_terms(); // array of WP_Term objects
                $slugs = array_map(function($term) { return $term->slug; }, $terms); // Extract only the term slugs

                if ($price >= $min_item_amount && count( array_intersect($slugs, $term_slugs) ) > 0 ) {
                    $items_count += $cart_item['quantity'];
                    $items_subtotal += $cart_item['line_subtotal'];
                }
            }
        }
    }
    // 条件百分比
    if ($items_count >= 6) {
        $percent = 15;
    }
    // 折扣(应税)。
    if ($items_count > 0) {
        // 计算
        $discount -= ($items_subtotal / 100) * $percent;
        $cart->add_fee(__("Mix & Match rabat - $percent%", "woocommerce"), $discount, true);
    }
}

Cela devrait fonctionner

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal