cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menggunakan diskaun pada pembolehubah dan produk individu dalam WooCommerce berdasarkan kuantiti troli dan atribut produk?

Saya cuba menggunakan peratusan diskaun berdasarkan bilangan produk dalam troli dengan atribut produk tertentu.

Lebih tepat lagi, matlamat saya adalah untuk memohon diskaun 15% apabila membeli sekurang-kurangnya 6 produk dengan atribut "flaske".

Saya telah berjaya mencapai ini pada produk dengan sifat berubah-ubah yang ditetapkan, tetapi saya nampaknya tidak boleh melakukannya untuk produk tunggal/mudah.

Ini adalah kod saya setakat ini (dipinjam daripada WooCommerce untuk syarat kuantiti dan harga)

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

Kod semasa saya berfungsi hebat untuk produk berubah-ubah (variasi) tetapi nampaknya tidak memberi kesan pada produk tunggal walaupun saya memberikan Produk tunggal diberi atribut yang sama seperti produk berubah-ubah.

Saya mengesyaki ini ada kaitan dengan gelung foreach, iaitu foreach( $cart_item['variation'] sebagai $attribute => $term_slug ).

Bagaimana untuk menjadikannya berfungsi secara umum supaya ia juga berfungsi untuk produk tunggal/mudah dengan atribut "flaske" yang sama?

Terima kasih banyak atas bantuan dan cadangan anda.

P粉592085423P粉592085423532 hari yang lalu675

membalas semua(1)saya akan balas

  • P粉323374878

    P粉3233748782023-07-24 12:53:06

    Diskaun peratusan Woocommerce untuk setiap item berdasarkan kuantiti

    Kecualikan varian dengan 2 istilah atribut khusus dalam Woocommerce daripada menggunakan kupon

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

    Ini sepatutnya berfungsi

    balas
    0
  • Batalbalas