Wie kann ich in WooCommerce einen Rabatt auf Variablen und einzelne Produkte basierend auf der Warenkorbmenge und den Produktattributen anwenden?
P粉592085423
P粉592085423 2023-07-23 13:26:53
0
1
628

Ich versuche, einen prozentualen Rabatt basierend auf der Anzahl der Produkte im Warenkorb mit einem bestimmten Produktattribut zu gewähren.

Genauer gesagt ist es mein Ziel, beim Kauf von mindestens 6 Produkten mit dem Attribut „flaske“ 15 % Rabatt zu gewähren.

Ich habe dies bei Produkten mit variablen Eigenschaften erfolgreich erreicht, aber bei einem einzelnen/einfachen Produkt gelingt mir das nicht.

Das ist mein bisheriger Code (für Mengen- und Preiskonditionen von WooCommerce ausgeliehen)

// 根据购物车中的产品数量和属性进行折扣。
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);
    }
}

Mein aktueller Code funktioniert hervorragend für variable Produkte (Variationen), scheint aber keine Auswirkung auf einzelne Produkte zu haben, selbst wenn ich einzelne Produkte verschenke erhalten dieselben Attribute wie variable Produkte.

Ich vermute, dass das etwas mit der foreach-Schleife zu tun hat, also foreach( $cart_item['variation'] as $attribute => $term_slug ).

Wie kann man es generell so gestalten, dass es auch für ein einzelnes/einfaches Produkt mit dem gleichen Attribut „flaske“ funktioniert?

Vielen Dank für Ihre Hilfe und Anregungen.

P粉592085423
P粉592085423

Antworte allen(1)
P粉323374878

根据数量为每个商品提供Woocommerce百分比折扣

在Woocommerce中排除具有2个特定属性术语的变体,不可使用优惠券

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);
    }
}

这应该有用

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage