我有一家商店,如果批量购买产品,我们会给予折扣(产品的批量报价不同)。那部分已经整理好了。
目前,我使用这样的负面费用来应用折扣:
function sale_custom_price($cart_object) {
foreach ($cart_object->cart_contents as $p) {
$prod_id = $p['product_id'];
$prod_n = $p['quantity'];
$prod_price = $p['data']->price;
$prod_name = $p['data']->post->post_title;
$prod_total = $p['line_total'];
/*
calc_discount: NULL for no discount for this product
else
array(
n => how many are required, e.g. 12
free_pcs_deal => how many of these should be free, e.g. 1
)
*/
$discount = calc_discount($prod_id, $prod_n);
if (is_null($discount)) {
continue;
}
$discount_n = $discount['n'];
$free_pcs_deal = $discount['free_pcs_deal'];
if ($discount_n <= 0) {
continue;
}
$discount_txt = $prod_name . ' (' . $discount_n . ' x ' . $free_pcs_deal . ' stk.)';
$discount = -1 * $discount_n * $free_pcs_deal * $prod_price;
$cart_object->add_fee('Rabat: ' . $discount_txt, $discount, true, '');
}
}
add_action( 'woocommerce_cart_calculate_fees', 'sale_custom_price', 2, 1);
但这种情况不受支持,将来也不可能实现。相反,我想自动调整产品价格。
假设客户购买了12件产品A.正常价格是100,但是产品A有大量买入12,只需支付11(买11送一)。因此,目前产品价格为12 * 100 = 1200,负面费用为100.因此,所有12种产品A的平均产品价格为11 * 100/12 = 91.67。我希望在我的购物车中使用它。
但我无法让它在购物车中显示修改后的价格以及正确的line_total和line_subtotal以及订单总数。所以我似乎找不到合适的action
/ filter
。
我尝试过这样的事情:
$cart = WC()->cart->cart_contents;
foreach ($cart as $key => $p) {
$custom_price = 111; // of course replaced by logic calculating the new, modified price
WC()->cart->cart_contents[$key]['data']->price = $custom_price;
}
我在woocommerce_cart_updated
,woocommerce_before_cart_contents
,woocommerce_add_to_cart
和其他人中尝试了这种逻辑,但它不会显示更新价格,line_total,订单总数等的正确购物车。
我可以通过woocommerce_cart_item_price
挂钩计算和显示更新的价格,但这只是显示,它不在业务逻辑中,因此所有总计都被修改。
我做错了什么?
答案 0 :(得分:0)
在计算总计之前尝试进行价格自定义。您可以使用此挂钩“woocommerce_before_calculate_totals”并降低挂钩的优先级,以便任何其他插件/自定义都不会覆盖它。
以下是您可以根据需要自定义的一段代码:
function calculate_custom_price( $cart_object ) {
// Loop for all products in cart
foreach ( $cart_object->cart_contents as $key => $value ) {
if(isset($value['_custom_customized']) && !empty($value['_custom_customized']) && (!isset($isProcessed) || empty($isProcessed))) {
$fltCustomPrice = 0.00;
$quantity = intval( $value['quantity'] );
$orgPrice = floatval( $value['data']->price );
// For all sub products of build your own basket
foreach($value['_custom_customized'] AS $keyInner => $arrValInner) {
$fltCustomPrice += floatval($arrValInner['price']) * floatval($arrValInner['quantity']);
}
$cart_object->cart_contents[$key]['data']->price = ( $orgPrice + $fltCustomPrice );
}
}
}
add_action( 'woocommerce_before_calculate_totals', 'calculate_custom_price', 2, 1 );
答案 1 :(得分:0)
private void rect_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
rect.Focus();
}
在活动主题的functions.php中尝试此代码段