Skip to content

Instantly share code, notes, and snippets.

@apintocr
Last active September 15, 2022 12:16
Show Gist options
  • Star 17 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save apintocr/65715de169d0e640d7c95e283b8d0183 to your computer and use it in GitHub Desktop.
Save apintocr/65715de169d0e640d7c95e283b8d0183 to your computer and use it in GitHub Desktop.
WooCommerce Bookings Availability Search
<?php
/**
* WooCommerce Bookings Availability Search
*
* This is almost pseudo code, it only serves to explain the "how to do it" and does not attempt to be "The Way" to do it.
* NOTE: This NEEDS to be refined in order to work as expected.
*
* @author António Pinto <apinto@vanguardly.com>
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
* @var string $bookStart (example: '2016-06-14 16:23:00')
* @var string $bookEnd (example: '2016-06-14 16:23:00')
*/
// Creating DateTime() objects from the input data.
$dateTimeStart = new DateTime($bookStart);
$dateTimeEnd = new DateTime($bookEnd);
// Get all Bookings in Range
$bookings = WC_Bookings_Controller::get_bookings_in_date_range(
$dateTimeStart->getTimestamp(),
$dateTimeEnd->getTimestamp(),
'',
false
);
// Build Array of all the Booked Products for the given Date-Time interval.
$exclude[] = 0;
foreach ($bookings as $booking) {
$exclude[] = $booking->product_id;
}
// Do a regular WP_Query using 'post__not_in' with the previous array.
$args = array (
'post__not_in' => $exclude,
'post_type' => ['product'],
'post_status' => ['published'],
);
@ChobPT
Copy link

ChobPT commented Oct 9, 2019

For your convenience, I've converted the above into an easy to use shortcode.

https://gist.github.com/ChobPT/fd0dd3c62d375d5814dad8e2ea68cc82

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment