Я использую 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
Добавляйте буферный период к продуктам WooCommerce, доступным для бронирования, только при наличии существующих заказов. ⇐ Php
Кемеровские программисты php общаются здесь
1716967566
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);
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78546696/add-a-buffer-period-to-woocommerce-bookable-products-only-if-there-are-existing[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия