如何使用 PHP 获取特定产品的所有预订日期?

How do I get all booking dates for a specific product with PHP?

我想知道如何获得特定产品的所有预订日期 - 但它似乎比人们想象的要难(或者可能是因为我不知道自己在做什么) .

到目前为止我已经用了几个小时了,但我无法到达任何地方,到目前为止我已经尝试过:

$WCBooking = new WC_Product_Booking('booking');
$WCBooking -> get_bookings_in_date_range($dToday, $dOneYear)
$WCBooking -> get_all_resources_availability($dToday, $dOneYear, $iProductID)

只是returns一个空数组,

也尝试查询所有预订帖子,但我找不到他们的开始和结束日期信息:(

    $aBookings = new WP_Query( 
    array( 
        'post_type' => 'wc_booking', 
        'posts_per_page' => -1 )
    );

接下来我应该尝试什么?我想应该没那么难,但我不确定我哪里错了

$aBookings = new WP_Query( 
array( 
    'post_type' => 'wc_booking', 
    'posts_per_page' => -1 )
);   

$oCustomPostMeta = get_post_custom($oPost->ID);
$oCustomPostMeta['_booking_start']
$oCustomPostMeta['_booking_end']

成功了,问题是他们将 post 元保存为 YYYYmmddhhmmss,所以只需要先将其拆分 :(

从 WooCommerce 3.0 开始:

$booking_ids = WC_Bookings_Controller::get_bookings_in_date_range($submitStartTime, $submitEndTime, $product_id, true);

时间戳是纪元,因此 strtotime 可能非常有用。在允许其他人添加到购物车之前,我需要额外验证以检查是否存在任何预订或购物车内预订。

add_action( 'woocommerce_add_to_cart_validation', 'woo_add_to_cart_validation, 10, 5 );
function woo_add_to_cart_validation( $passed, $product_id ) { 

    //Build timestamp from the potential product values
    $submitStartTime = strtotime( $_POST['wc_bookings_field_start_date_year'] . "-" . $_POST['wc_bookings_field_start_date_month'] . '-' . $_POST['wc_bookings_field_start_date_day'] . " " . $_POST['wc_bookings_field_start_date_time']);
    //Compare with a 30 minute booking.
    $submitEndTime = $submitStartTime + (60 * 30);

    //Verify that no bookings exist (as orders or in cart)
    $booking_ids = WC_Bookings_Controller::get_bookings_in_date_range($submitStartTime, $submitEndTime, $product_id, true);

    if( $booking_ids ) {
        wc_add_notice( __( 'The date/time you selected has already been booked. Please select another.', 'woocommerce-bookings' ), 'error' );
        $passed = false;
    }

    return $passed;
}