Я пытаюсь выяснить, как я могу получить все даты бронирования для определенного продукта — но это кажется сложнее, чем можно подумать (или, может быть, это потому, что я не знаю, что я делаю).
Я потратил пару часов на это, и я не могу никуда добраться, пока я пытался:
$WCBooking = new WC_Product_Booking('booking');
$WCBooking -> get_bookings_in_date_range($dToday, $dOneYear)
$WCBooking -> get_all_resources_availability($dToday, $dOneYear, $iProductID)
просто возвращает пустой массив,
также пытался запросить все сообщения о бронировании, но я не могу найти информацию о их дате начала и окончания 🙁
$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']
сделали свое дело, дело в том, что они сохранили мета поста как ГГГГммддччммсс, так что сначала пришлось разделить его 🙁
Начиная с 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;
}