1

我想根据日期范围向客户显示价格。

在我的可预订产品中,我有日期范围定价:

  • 底价:第一天100美元,
  • 两天的基本价格增加 60 美元(在一个日期范围内),
  • 三天的基本价格增加 90 美元(在一个日期范围内)。

等等……</p>

这是在 woocommerce 可预订产品编辑设置页面的后端完成的。

我现在的问题是,我在数据库中的任何地方都找不到这些添加(60、90)。和:

$product    = wc_get_product( $product_id );
$price      = $product->get_price();

它只返回基本价格(100 美元)。

对于在数据库中某处查找这些日期范围设置或 woocommerce 将在默认情况下计算此日期范围设置的任何帮助,我们将不胜感激。

Woocommerce 可预订产品日期范围设置

4

2 回答 2

3

对于 WooCommerce 预订,您拥有WC_Product_Booking对象所需的一切:

// Get an instance of the WC_Product object (Here a WC_Product_Booking object)
$product = wc_get_product( $product_id );

// Get the base price
$base_price = $product->get_price();

// Get all related protected data in an array
$product_data = $product->get_data();

// Get the additional pricing data for this bookable product (array)
$product_pricing = $product_data['pricing'];

// iterating through each pricing row
foreach($product_pricing as $key => $princing ){
    $pricing_type           = $princing['type'];
    $pricing_base_cost      = $princing['base_cost']; // <= this is the price you are looking for
    $pricing_base_modifier  = $princing['base_modifier'];
    $pricing_cost           = $princing['cost']; 
    $pricing_modifier       = $princing['modifier'];
    $pricing_from           = $princing['from'];
    $pricing_to             = $princing['to'];
}

// Raw pricing data output (for tests)
echo '<pre>'; print_r($product_pricing); echo '</pre>';

现在在数据库中,您可以在...wp_post_meta下的表中找到此数据,_wc_booking_pricing meta_key因此您也可以从产品 ID 访问它:

$pricing_data = get_post_meta( $product_id, '_wc_booking_pricing', false);

// Raw pricing data output (for tests)
echo '<pre>'; print_r($product_pricing); echo '</pre>';
于 2017-11-27T00:05:03.653 回答
0

我的最终解决方案如下所示:

        $product_pricing = get_post_meta( $product_id, '_wc_booking_pricing', false);
        foreach ($product_pricing as $pricing) {
            if (is_array($pricing)){
                foreach ($pricing as $price) {
                    $cost += $price['base_cost'];
                    }
                }
            }
        }
于 2017-11-27T16:08:53.650 回答