Добавляйте буферный период к продуктам WooCommerce, доступным для бронирования, только при наличии существующих заказов.Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Добавляйте буферный период к продуктам WooCommerce, доступным для бронирования, только при наличии существующих заказов.

Сообщение Anonymous »

Я использую WooCommerce Bookings, и если я добавляю буфер к продукту с помощью пользовательского интерфейса администратора, он добавляет буфер, даже если в этот день нет заказов на этот продукт. Это ограничивает количество часов, которые кто-то может выбрать, что нехорошо, поскольку я настроил продукты так, чтобы клиенты могли выбирать шестичасовой блок, начиная с верхнего часа. Используя пользовательский интерфейс администратора, он создает буфер, так что вместо возможности забронировать продукт в 7 утра, 8 утра, 9 утра и т. д. вы можете бронировать продукты только (если буфер установлен на 2 часа, скажем) в 7 утра, 9 утра, 11 утра. и т. д.
Я пытаюсь добавить буфер к продукту, когда (и только когда) на него есть бронирование.
Предположим, товар забронирован на период с 8:00 до 12:00 2 июня. Я хочу, чтобы кто-то мог его зарезервировать, но я хочу, чтобы у него был двухчасовой буфер после окончания существующего бронирования. Таким образом, если кто-то попытается забронировать место на 2 июня, он увидит наличие мест начиная с 14:00. Однако я не хочу, чтобы буфер влиял на доступное время начала, если в этот день нет заказов на этот продукт.
Приведенный ниже код отлично работает для получения идентификатора продукта. кто-то смотрит, и я получаю заказы нормально ($bookings возвращает действительную информацию), но фильтр молча терпит неудачу. Буфер не изменяется (или, по крайней мере, если это так, это не отображается в раскрывающемся списке «Время начала» в пользовательском интерфейсе), поэтому первое доступное время начала в моем примере — 12 часов дня, то есть вообще без буфера. "wc_bookings_get_time_slots" кажется не тем, что мне нужно, но я не могу найти то, что нужно...
add_action('woocommerce_before_single_product', 'custom_set_buffer_period_for_viewed_product');
function custom_set_buffer_period_for_viewed_product() {
// Ensure WooCommerce functions are available
if (function_exists('is_product') && is_product()) {
global $product;

$product_id = $product->get_id();
error_log("Product ID $product_id");

$buffer_before = 0;
$buffer_after = 120;

if ($product_id) {
// Check if there are existing bookings for the product
$bookings = WC_Bookings_Controller::get_bookings_for_objects(array($product_id));
error_log(print_r($bookings,true));
add_filter('wc_bookings_get_time_slots', function($booking, $booking_id) use ($buffer_before, $buffer_after) {
// Apply the buffer period if there are existing bookings
$booking->set_buffer_period($buffer_before, $buffer_after);
return $booking;
}, 10, 2);
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/785 ... e-existing
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»