WordPress — Как я могу получить все даты бронирования для определенного продукта с помощью PHP?

Я пытаюсь выяснить, как я могу получить все даты бронирования для определенного продукта — но это кажется сложнее, чем можно подумать (или, может быть, это потому, что я не знаю, что я делаю).

Я потратил пару часов на это, и я не могу никуда добраться, пока я пытался:

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

Что я должен попробовать дальше? Я подумал, что это не должно быть так сложно, но я не уверен, где я иду не так

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']

сделали свое дело, дело в том, что они сохранили мета поста как ГГГГммддччммсс, так что сначала пришлось разделить его 🙁

1

Другие решения

Начиная с 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;
}
1

По вопросам рекламы [email protected]