我有下面的代码来更新基于所选项目的小计。客户可以订购5美元的产品样品,或者他们可以以每平方英尺7.95美元的价格购买产品。我试图让set_price()
更新它以显示5美元,或者,例如,如果客户购买40平方英尺,则显示318美元。然而,我只能看到7.95美元在任何一种情况下,这是“正常价格”从产品页面上的后端 Jmeter 板。
add_action('woocommerce_before_calculate_totals', 'set_custom_calculated_item_price', 10, 1);
// add_action('woocommerce_calculate_totals', 'set_custom_calculated_item_price', 10, 1);
// add_action('woocommerce_after_calculate_totals', 'set_custom_calculated_item_price', 10, 1);
function set_custom_calculated_item_price($cart) {
if (is_admin() && !defined('DOING_AJAX')) {
return;
}
if (did_action('woocommerce_before_calculate_totals') >= 2) {
return;
}
foreach($cart->get_cart() as $cart_item) {
$product = $cart_item['data'];
write_log(create_message('product: ', $product));
if (isset($cart_item['cost'])) {
$product->set_price($cart_item['cost']);
}
if (str_starts_with($cart_item['product_sku'], 'S-')) {
$name = get_the_title($product->get_id()) . ' (Sample)';
$product->set_name($name);
}
}
}
字符串
正如你所看到的,我尝试了三种不同的挂钩,试图让这个更新,但没有一个给我预期的变化。我仍然只看到7.95美元,如上所述。
有没有人知道我下一步可以尝试什么?谢谢!
编辑:这是我目前看到的截图。我需要更改的小计是在行项目上。购物车小计是正确的,但我显然需要向客户显示每个行项目的正确小计。
x1c 0d1x的数据
1条答案
按热度按时间h6my8fg21#
实际上,我最近遇到了一个非常类似的问题。我也使用before_calculate_totals钩子设置了一个自定义价格,我的购物车总数会更新,但我的商品只会显示为以前的价格。经过大量搜索,我遇到了一个非常有用的Github问题线程,其中包含另一个用户分享的修复。
https://github.com/woocommerce/woocommerce/issues/26422#issuecomment-1025490033
字符串
基本上迫使购物车重新计算价格导致正确的价格被显示。
另一方面,你有没有试过不把$cart_item ['data']赋给一个变量,甚至在一开始测试时赋给一个固定的值?
型
如果这些对你不起作用的另一个选择是尝试在'update_cart_product_subtotal_price'钩子上设置价格:
型