Last active
September 15, 2022 12:16
-
-
Save apintocr/65715de169d0e640d7c95e283b8d0183 to your computer and use it in GitHub Desktop.
WooCommerce Bookings Availability Search
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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 <[email protected]> | |
* @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'], | |
); |
Hi,
i really apreciate your work.
could you just explain how it should be used?
thanks
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
@clifford
Thanks for your feedback.
Please understand that this gist was always intended to serve as a example, like I stated on the comments it is almost pseudo-code.
It did worked fine, it still works, however it was a specific project where this was enough.
You are correct as this does not really do what it should, sadly it is not as simple as it looks to accommodate for all cases (if it where WCBookings would have a function for it ;) ).
Do you have any tips for improvement?
I'd really like to improve it.