Woocommerce预订 - 创建预订并":get_bookings_in_date_range"识别它



我的目标是创建一个状态为"购物车内"的预订。下面的代码工作正常,创建具有正确数据的预订。但是当我检查该时间范围内的预订时,创建的预订不存在。我认为这与兑现"get_bookings_in_date_range()"有关。如果是这样,我该如何结清现金?

//This works fine, it returns all the bookingids   
$booking_ids = WC_Bookings_Controller::get_bookings_in_date_range($start_date, $end_date, $product_id, true);
//I use insert_post, because create_wc_booking doesnt accept the "in-cart" status
//It creates a booking with the right data 
$cart_booking = array(
'post_type' => 'wc_booking',
'post_status' => 'in-cart',
'post_author' => 69,
);
$booking_id = wp_insert_post($cart_booking);
//Updating some data - works
update_post_meta($booking_id , "_booking_product_id", $product_id); 
update_post_meta($booking_id , "_booking_start", date("Y-m-d H:i", strtotime($date . $availability[0][0]['from'])));
update_post_meta($booking_id , "_booking_end", date("Y-m-d H:i", strtotime($date . $availability[0][0]['to'])));
update_post_meta($booking_id , "_booking_persons", $personcount);
//Make booking expire after 60 Minutes - works    
custom_schedule_cart_removal($booking_id)
//NOW, this booking exists in the backend but doesnt get recognized by the code below, even though it has the right meta-data
WC_Bookings_Controller::get_bookings_in_date_range($start_date, $end_date, $product_id, true); 

"_booking_end"和"_booking_start"属性的存储值应为 Unix 时间戳。在分配这些值时,您使用的是函数 date(),它反过来:它将时间戳转换为该日期的人类可读字符串。

因此,您可能会存储类似"2018-07-09 00:52"的字符串,而预期值应该是时间戳,例如"1531097445"。因此,对于方法 WC_Bookings_Controller::get_bookings_in_date_range() 来说,它变得不可理解。

假设"$date .$availability[0][0]['from']"和"$date .$availability[0][0]['to']"是有效值,因为发布的代码中没有引用它们,请尝试以这种方式更新"_booking_end"和"_booking_start":

update_post_meta($booking_id , "_booking_start", strtotime($date . $availability[0][0]['from']));
update_post_meta($booking_id , "_booking_end", strtotime($date . $availability[0][0]['to']));

WC_Booking类还具有以下方法来设置这些属性:

/**
* Set start_time.
*
* @param string $timestamp
* @throws WC_Data_Exception
*/
public function set_start( $timestamp ) {
$this->set_prop( 'start', is_numeric( $timestamp ) ? $timestamp : strtotime( $timestamp ) );
}
/**
* Set end_time.
*
* @param string $timestamp
* @throws WC_Data_Exception
*/
public function set_end( $timestamp ) {
$this->set_prop( 'end', is_numeric( $timestamp ) ? $timestamp : strtotime( $timestamp ) );
}

要获取WC_Booking的实例,只需使用get_wc_booking( $booking_id ),如果没有任何现有预订具有提供的 ID,它将检索"false"。

最新更新