我正在尝试根据购物车中每个产品的数量金额应用折扣。每个产品都有自己的数量折扣,由自定义字段设置。我正在使用操作“woocommerce\\u before\\u calculate\\u totals”,并在foreach循环中尝试应用自定义字段中的折扣。但是,它仅适用于购物车中的第一个项目。第二项为全价。我不明白为什么它对购物车中的其他物品不起作用。
这是我当前的代码:
add_action( \'woocommerce_before_calculate_totals\', \'set_custom_cart_item_price\', 20, 1 );
function set_custom_cart_item_price( $wc_cart ) {
if ( is_admin() && ! defined( \'DOING_AJAX\' ) )
return;
// First loop to check if product 11 is in cart
foreach ( $wc_cart->get_cart() as $key => $cart_item ){
// This is necessary for WC 3.0+
$qty = $cart_item[\'quantity\'];
$discount1 = get_post_meta($cart_item[\'product_id\'], \'_discount_1_4_items\', true);
$discount2 = get_post_meta($cart_item[\'product_id\'], \'_discount_5_9_items\', true);
$discount3 = get_post_meta($cart_item[\'product_id\'], \'_discount_10_19_items\', true);
$discount4 = get_post_meta($cart_item[\'product_id\'], \'_discount_20_items\', true);
$OriginalPrice = $cart_item[\'data\']->get_price();
if($qty >= 1 && $qty <=4){
$FinalPrice = $OriginalPrice*$discount1;
}elseif($qty >= 5 && $qty <=9){
$FinalPrice = $OriginalPrice*$discount2;
}elseif($qty >= 10 && $qty <=19){
$FinalPrice = $OriginalPrice*$discount3;
}elseif($qty >= 20 ){
$FinalPrice = $OriginalPrice*$discount4;
}
$cart_item[\'data\']->set_price( $FinalPrice );
}
}
最合适的回答,由SO网友:Tyler Robinson 整理而成
因此,解决这个问题的方法不是将代码放在函数中。php,您可以在主题文件夹中创建一个“woocommerce”文件夹,并将woocommerce插件中的“cart”文件夹和“cart.php”模板文件放在其中。然后将与“woocommerce\\u before\\u calculate\\u totals”操作中相同的代码放置在购物车模板的循环中。下面的代码就是我放在购物车中的代码。php文件,它现在可以工作了!
$qty = $cart_item[\'quantity\'];
$discount1 = get_post_meta($cart_item[\'product_id\'], \'_discount_1_4_items\', true);
$discount2 = get_post_meta($cart_item[\'product_id\'], \'_discount_5_9_items\', true);
$discount3 = get_post_meta($cart_item[\'product_id\'], \'_discount_10_19_items\', true);
$discount4 = get_post_meta($cart_item[\'product_id\'], \'_discount_20_items\', true);
$OriginalPrice = $cart_item[\'data\']->get_price();
if($qty >= 1 && $qty <=4){
$FinalPrice = $OriginalPrice*$discount1;
}elseif($qty >= 5 && $qty <=9){
$FinalPrice = $OriginalPrice*$discount2;
}elseif($qty >= 10 && $qty <=19){
$FinalPrice = $OriginalPrice*$discount3;
}elseif($qty >= 20 ){
$FinalPrice = $OriginalPrice*$discount4;
}
$cart_item[\'data\']->set_price( $FinalPrice );