问题描述
您好,我一直在尝试通过代码创建 woocommerce 预订,我设法创建了一个预订并将其添加到用户的购物车中。问题是我无法设置预订的价格。我尝试了多种解决方案,例如:
add_filter('woocommerce_add_cart_item','tsc_booking_woocommerce_add_cart_item',99,1);
function tsc_booking_woocommerce_add_cart_item($cart_item)
{
try {
session_start();
if (!empty($cart_item['booking']) && isset($cart_item['booking']
['_cost']) && '' !== $cart_item['booking']['_cost']) {
$cart_item['data']->set_price(100);
$cart_item['custom_price'] = 100;
}
return $cart_item;
} catch (Exception $e) {
throw $e;
}
}
add_filter('woocommerce_get_cart_item_from_session','tsc_booking_woocommerce_get_cart_item_from_session',3);
function tsc_booking_woocommerce_get_cart_item_from_session($woo_data,$values,$key)
{
if (!isset($woo_data['custom_price']) || empty($woo_data['custom_price'])) {
return $woo_data;
}
$woo_data['data']->set_price($woo_data['custom_price']);
return $woo_data;
}
add_filter('woocommerce_bookings_calculated_booking_cost','tsc_booking_woocommerce_bookings_calculated_booking_cost',3);
function tsc_booking_woocommerce_bookings_calculated_booking_cost($booking_cost,$booking,$posted)
{
try {
return 100;
} catch (Exception $e) {
throw $e;
}
}
但它们似乎不起作用。
记录的解决方案是使用“woocommerce_before_calculate_totals”钩子,但它不起作用。 我已经调试了代码,所有的函数都被调用了,似乎没有任何错误。
add_action('woocommerce_before_calculate_totals','tsc_booking_woocommerce_before_calculate_totals',1000,1);
function tsc_booking_woocommerce_before_calculate_totals($cart)
{
if (is_admin() && !defined('DOING_AJAX'))
return;
if (did_action('woocommerce_before_calculate_totals') >= 2)
return;
foreach ($cart->get_cart() as $cart_item) {
$cart_item['data']->set_price(100);
}
}
我很确定这适用于普通的 WC_Product 对于 Booking 产品还有其他事情要做吗?
谢谢,
解决方法
我明白了...
以防万一有人像我刚刚遇到的那样头痛。
购物车中的价格重置为 0 的原因是另一个插件“Woocommerce Membership”。该产品的会员折扣价为 100 欧元,因为我使用的是 100 欧元的测试价格……两者加起来为 0。我猜会员插件在设置产品价格时优先级较低。>