Інтеграція 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