【发布时间】:2019-12-21 15:46:42
【问题描述】:
我有一个默认价格值为 100 的简单产品。
当您选择产品时,它必须直接结帐,我的处理方式如下:
/checkout/?add-to-cart=78
但是,必须可以覆盖该产品的价格,因为它是志愿者捐赠金额。
我正在尝试这个:
/checkout/?add-to-cart=78&donation=200
在我的functions.php中我有:
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 10, 1);
function add_custom_price( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Avoiding hook repetition (when using price calculations for example)
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
foreach ( $cart->get_cart() as $cart ) {
$id = $cart['data']->get_id();
if ($id === 78 && $_GET['donation']) {
$price = $_GET['donation'];
}
else {
$price = $cart['data']->get_price();
}
$cart['data']->set_price( $price );
}
}
当页面第一次加载时,它已将价格设置为 200。但是,JS 在重新加载到此 url 后进行 ajax 调用:
/?wc-ajax=update_order_review
将价格重置为 100。
如何阻止它重置价格?
【问题讨论】:
标签: php wordpress woocommerce cart checkout