【发布时间】:2021-07-12 15:40:58
【问题描述】:
您好,我一直在尝试通过代码创建 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', 99, 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', 99, 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 产品还有其他事情要做吗?
谢谢,
【问题讨论】:
-
你/函数的钩子和回调在哪里?
-
add_action('woocommerce_before_calculate_totals', 'tsc_booking_woocommerce_before_calculate_totals', 1000, 1);
-
请在您的问题中添加其他信息,与评论相反。你调试过你的功能吗?真的叫吗?
标签: woocommerce hook-woocommerce woocommerce-bookings