Інтеграція WooCommerce для розробників
Шаблони
За відображення частини магазину відповідають два шаблони. Скопіюйте потрібний шаблон у тему, щоб змінити його. Спочатку перевіряється дочірня тема. Якщо копії немає, використовується шаблон плагіна.
| Шаблон | Шлях у темі | Призначення |
|---|---|---|
picker.php | yourtheme/baza-booking-calendar/woocommerce/picker.php | Вибір дати й часу на сторінці товару з бронюванням |
cart-summary.php | yourtheme/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_. Ключі з початковим _ приховані завжди. |
Як працює інтеграція в коді
- Сторінка товару.
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з тими самими даними: додавання до кошика.
- Розрахунок ціни. Ціну завжди визначає сервер.
BBC_Booking_Create::create( $input, [ 'quote' => true ] )виконує перевірки та запускаєBBC_Booking_Calculate, але не створює бронювання. З браузера приймаються тільки рядки слотів, ідентифікатори додаткових послуг та їх кількість. - Позиція кошика.
WC()->cart->add_to_cart()отримує даніbbc_bookingу вигляді{ input, total }. Хукwoocommerce_before_calculate_totalsвстановлює остаточну ціну без податку магазину.woocommerce_check_cart_itemsповторює перевірку в кошику й під час оформлення. Зайнятий час спричиняє помилку, а змінена ціна оновлює позицію. - Замовлення.
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бронювання. - Синхронізація статусу.
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.
