Woocommerce 预订设置价格不起作用

问题描述

您好,我一直在尝试通过代码创建 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。我猜会员插件在设置产品价格时优先级较低。>