WooCommerce 中特定产品 ID 的批量折扣
Bulk Discount for specific product ID in WooCommerce
我想在结账时根据数量阈值对特定产品打折:
- 当产品 >= 10 件时 ----- 每件折扣 2 美元
- 当产品 >= 20 件时 ----- 每件优惠 3 美元
示例所需输出示例:
- 产品 × 10 等于 $730.00 |折扣为 $20.00 |折扣后总计:710.00 美元
- 产品 × 20 等于 $1460.00 |折扣为 60.00 美元 |折扣后总计:1400.00 美元 1,400.00 美元
到目前为止,我有这个,但是当我将 10 件产品添加到购物车时,出现严重错误。
我的代码:
add_action( 'woocommerce_before_calculate_totals', 'quantity_based_pricing', 9999 );
function quantity_based_pricing( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;
// Define discount rules and thresholds
$threshold1 = 10; // Change price if items > 10
$discount1 = 0.02739726027; // Reduce 73 dollar unit price by 2 dollars
$threshold2 = 20; // Change price if items > 20
$discount2 = 0.04109589041; // Reduce 73 dollar unit price by 3 dollars
//compare
foreach ( $cart->get_cart() as $cart_item_key => $cart_item )
// Get product id
$product_id = $cart_item['product_id'];
if ( $cart_item['quantity'] >= $threshold1 && $cart_item['quantity'] < $threshold2 && $cart_item = '283' ) {
$price = round( $cart_item['data']->get_price() * ( 1 - $discount1 ), 2 );
$cart_item['data']->set_price( $price );
} elseif ( $cart_item['quantity'] >= $threshold2 && in_array( $product_id, $specific_product_ids ) ) {
$price = round( $cart_item['data']->get_price() * ( 1 - $discount2 ), 2 );
$cart_item['data']->set_price( $price );
}
}
我做错了什么?如何使这项工作没有错误?
您的代码中有一些错误。请尝试以下操作:
function quantity_based_pricing_discount( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// Define discount rules and thresholds
$threshold1 = 10; // Change price if items > 10
$threshold2 = 20; // Change price if items > 20
$discount_1 = 2; // Reduce unit price by 2 dollars
$discount_2 = 3; // Reduce unit price by 3 dollars
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ) {
// Targeting specific product id
if( $cart_item['product_id'] == '283' ) {
$price = $cart_item['data']->get_price();
$qty = $cart_item['quantity'];
if ( $qty >= $threshold1 && $qty < $threshold2 ) {
$discount = $discount_1;
} elseif ( $qty >= $threshold2 ) {
$discount = $discount_2;
}
if ( isset($discount) ) {
$cart_item['data']->set_price( round( $price - $discount, 2 ) );
}
}
}
}
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
我想在结账时根据数量阈值对特定产品打折:
- 当产品 >= 10 件时 ----- 每件折扣 2 美元
- 当产品 >= 20 件时 ----- 每件优惠 3 美元
示例所需输出示例:
- 产品 × 10 等于 $730.00 |折扣为 $20.00 |折扣后总计:710.00 美元
- 产品 × 20 等于 $1460.00 |折扣为 60.00 美元 |折扣后总计:1400.00 美元 1,400.00 美元
到目前为止,我有这个,但是当我将 10 件产品添加到购物车时,出现严重错误。
我的代码:
add_action( 'woocommerce_before_calculate_totals', 'quantity_based_pricing', 9999 );
function quantity_based_pricing( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;
// Define discount rules and thresholds
$threshold1 = 10; // Change price if items > 10
$discount1 = 0.02739726027; // Reduce 73 dollar unit price by 2 dollars
$threshold2 = 20; // Change price if items > 20
$discount2 = 0.04109589041; // Reduce 73 dollar unit price by 3 dollars
//compare
foreach ( $cart->get_cart() as $cart_item_key => $cart_item )
// Get product id
$product_id = $cart_item['product_id'];
if ( $cart_item['quantity'] >= $threshold1 && $cart_item['quantity'] < $threshold2 && $cart_item = '283' ) {
$price = round( $cart_item['data']->get_price() * ( 1 - $discount1 ), 2 );
$cart_item['data']->set_price( $price );
} elseif ( $cart_item['quantity'] >= $threshold2 && in_array( $product_id, $specific_product_ids ) ) {
$price = round( $cart_item['data']->get_price() * ( 1 - $discount2 ), 2 );
$cart_item['data']->set_price( $price );
}
}
我做错了什么?如何使这项工作没有错误?
您的代码中有一些错误。请尝试以下操作:
function quantity_based_pricing_discount( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// Define discount rules and thresholds
$threshold1 = 10; // Change price if items > 10
$threshold2 = 20; // Change price if items > 20
$discount_1 = 2; // Reduce unit price by 2 dollars
$discount_2 = 3; // Reduce unit price by 3 dollars
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ) {
// Targeting specific product id
if( $cart_item['product_id'] == '283' ) {
$price = $cart_item['data']->get_price();
$qty = $cart_item['quantity'];
if ( $qty >= $threshold1 && $qty < $threshold2 ) {
$discount = $discount_1;
} elseif ( $qty >= $threshold2 ) {
$discount = $discount_2;
}
if ( isset($discount) ) {
$cart_item['data']->set_price( round( $price - $discount, 2 ) );
}
}
}
}
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。