Rumah > Soal Jawab > teks badan
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粉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