Интеграция WooCommerce для разработчиков

Шаблоны

За отображение части магазина отвечают два шаблона. Скопируйте нужный шаблон в тему, чтобы изменить его. Сначала проверяется дочерняя тема. Если копии нет, используется шаблон плагина.

ШаблонПуть в темеНазначение
picker.phpyourtheme/baza-booking-calendar/woocommerce/picker.phpВыбор даты и времени на странице товара с бронированием
cart-summary.phpyourtheme/baza-booking-calendar/woocommerce/cart-summary.phpДанные бронирования под позицией в классической корзине и оформлении заказа

Каждый шаблон получает данные в $args. Они описаны в начале соответствующего файла. Путь также можно изменить через apply_filters( 'baza_bc_woocommerce_template', $file, $name, $args ).

Структура выбора даты и времени

Скрипт modules/woocommerce/assets/woo-picker.js находит нужные элементы по атрибуту data-bbc-role. Если обязательного элемента нет, выполнение останавливается с ошибкой в консоли.

Обязательные роли: prev, next, title, grid, slots, extras, total, book, note.

Теги, классы, порядок и дополнительную разметку можно менять. Созданные скриптом строки имеют фиксированные классы для стилизации: bbc-woo-picker__day с .is-picked, __slot с .is-picked, __time, __price, __extra, __extras-toggle, __qty, __step и __veil. Последний класс используется для слоя загрузки blockUI blockOverlay.

Для .bbc-woo-picker доступны CSS-переменные --bbc-woo-accent, --bbc-woo-on-accent, --bbc-woo-radius, --bbc-woo-ink и --bbc-woo-gap. Первые четыре скрипт получает от кнопки Add to cart активной темы.

Блочная корзина

Блоки Cart и Checkout, а также мини-корзина преобразуют данные позиции в обычный текст. Поэтому шаблон итогов там не используется: для каждого дня и каждой дополнительной услуги создаётся отдельная строка. Изменить строки можно фильтром baza_bc_woocommerce_item_rows.

Фильтры и действия

ХукНазначение
baza_bc_woocommerce_template (filter)Путь к шаблону: ( $file, $name, $args ).
baza_bc_woocommerce_summary_data (filter)Данные для итогов в корзине: ( array $data { days, extras }, array $input ).
baza_bc_woocommerce_item_rows (filter)Текстовые строки позиции в блочной корзине, мини-корзине и заказе: ( array $rows { key, value }, array $input ).
baza_bc_woocommerce_product_dates (action)Вызывается на странице товара с бронированием в месте вывода календаря: ( WC_Product $product ). Здесь можно вывести собственный интерфейс, предварительно убрав стандартный через remove_action( ..., [ 'BazaBookingCalendar\BBC_Woo_Cart', 'render_calendar' ] ).
baza_bc_woocommerce_offline_methods (filter)Идентификаторы способов оплаты позже. По умолчанию: bacs, cheque, cod.
baza_bc_woocommerce_paid_on_completion (filter)Идентификаторы способов, для которых оплата считается полученной только при статусе completed. По умолчанию: cod.
baza_bc_woocommerce_send_shop_emails (filter)Верните true, чтобы отправлять клиентам собственные письма магазина для заказов с бронированием. По умолчанию выключено.
baza_bc_price_journal_recorded (action)Вызывается после записи изменения цены: ( $booking_id, array $entry ).
baza_bc_internal_booking_meta_prefixes (filter)Префиксы метаданных, скрытых в панели бронирования, письмах и событиях календаря. По умолчанию: bbc_, woo_. Ключи с начальным _ скрыты всегда.

Как интеграция работает в коде

  1. Страница товара. BBC_Woo_Cart::render_calendar() подключает скрипт выбора и выводит views/picker.php. Интерфейс обращается к публичным действиям admin-ajax.php. Все они только читают данные, кроме последнего, который добавляет позицию в корзину.

Запросы интерфейса выбора

  • bbc_woo_days с product и month=YYYY-MM: дни со свободным временем.
  • bbc_woo_slots с product и date: свободные часы дня с ценами.
  • bbc_woo_extras с product: дополнительные услуги.
  • bbc_woo_quote с product, slots[] и extras[id]=qty: общая сумма.
  • bbc_woo_add с теми же данными: добавление в корзину.
  1. Расчёт цены. Цену всегда определяет сервер. BBC_Booking_Create::create( $input, [ 'quote' => true ] ) выполняет проверки и запускает BBC_Booking_Calculate, но не создаёт бронирование. Из браузера принимаются только строки слотов, идентификаторы дополнительных услуг и их количество.
  2. Позиция корзины. WC()->cart->add_to_cart() получает данные bbc_booking в виде { input, total }. Хук woocommerce_before_calculate_totals устанавливает окончательную цену без налога магазина. woocommerce_check_cart_items повторяет проверку в корзине и при оформлении. Занятое время вызывает ошибку, а изменившаяся цена обновляет позицию.
  3. Заказ. woocommerce_checkout_create_order сохраняет формы в метаданных заказа _bbc_inputs. Действия woocommerce_checkout_order_processed и woocommerce_store_api_checkout_order_processed запускают BBC_Woo_Cart::create_bookings(). Для каждой позиции создаётся одно бронирование со статусом pending, удерживающее время. Идентификаторы сохраняются в _bbc_booking_ids заказа и woo_order_id бронирования.
  4. Синхронизация статуса. BBC_WooCommerce::order_status_changed() переводит оплаченное бронирование в booked, оставляет неоплаченные офлайн-способы в pending, отклоняет pending для cancelled или failed и отклоняет booked после refunded. Если бронирование отклонено в плагине и в заказе не осталось активных бронирований, неоплаченный заказ отменяется.

Метаданные бронирования, которые записывает магазин

Префикс woo_ скрывает эти поля в панели: woo_order_id, woo_payment_method, woo_payment_title, woo_payment_state со значениями paid, waiting, cancelled, failed или refunded, woo_payment_offline и woo_waiting_payment. Купон WooCommerce также записывает promo_sale и coupon_code.

Журнал цен

BBC_Price_Journal::record( $booking_id, $kind, $reason, $before, $after, $by = [] ) записывает изменение в метаданные bbc_price_journal и журнал активности. Массив $by имеет формат [ 'type' => admin|client|shop|system, 'user' => id, 'label' => text ]. Если его не передать, используется текущий пользователь или system. Для чтения используйте BBC_Price_Journal::entries( $id ).

Лицензия и совместимость

  • Ключ возможности woocommerce доступен в каждом плане и открывает платёжный шлюз, тип товара, корзину и импорт. Синхронизация статусов уже созданных заказов от него не зависит.
  • Объявлена совместимость с HPOS и блоками Cart и Checkout.
  • Импорт из WooCommerce Bookings выполняет BBC_Woo_Import в WooCommerce > Import bookings. Повторный импорт безопасен благодаря метаданным _bbc_imported_from_wc.
Последнее изменение: 24.10.2026