Get pricing data for a bookable product with date ranges in WooCommerce

百般思念 提交于 2019-12-11 07:34:25

问题


I would like to show to customers the price according to a date range.

In on of my bookable product with date rage pricing I have:

  • the base price: 100$ for the first day,
  • adds $60 to the base price for two days (in a date range),
  • adds 90$ to the base price for three days (in a date range).

And so on…

This is done in the backend of the woocommerce bookable product edit settings page.

My problem is now, that I cannot find those additions (60, 90) anywhere in the database. With:

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

It only return the base price (100$).

Any help in finding those date range settings somewhere in the database or where woocommerce would calculate this per default is appreciated.


回答1:


For WooCommerce Bookings you have everything needed in the WC_Product_Booking object:

// 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>';

Now in the database you can find this data in wp_post_meta table under _wc_booking_pricing meta_key… So from the product ID you can access it too with:

$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>';



回答2:


My final solution looks like this:

        $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'];
                    }
                }
            }
        }


来源:https://stackoverflow.com/questions/47501425/get-pricing-data-for-a-bookable-product-with-date-ranges-in-woocommerce

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!