Integrácia WooCommerce pre vývojárov

Šablóny

Obchodnú časť vykresľujú dve šablóny. Ak ich chcete upraviť, skopírujte vybranú šablónu do témy. Najskôr sa kontroluje odvodená téma. Ak kópia neexistuje, použije sa šablóna pluginu.

ŠablónaCesta v témePoužitie
picker.phpyourtheme/baza-booking-calendar/woocommerce/picker.phpVýber dátumu a času na stránke rezervačného produktu
cart-summary.phpyourtheme/baza-booking-calendar/woocommerce/cart-summary.phpÚdaje rezervácie pod položkou v klasickom košíku a pokladni

Každá šablóna dostáva údaje v $args. Sú zdokumentované na začiatku príslušného súboru. Cestu možno zmeniť aj cez apply_filters( 'baza_bc_woocommerce_template', $file, $name, $args ).

Štruktúra výberu dátumu a času

Skript modules/woocommerce/assets/woo-picker.js vyhľadáva prvky podľa atribútu data-bbc-role. Ak povinný prvok chýba, vykonávanie sa zastaví s chybou v konzole.

Povinné roly: prev, next, title, grid, slots, extras, total, book, note.

Značky, triedy, poradie a doplnkovú štruktúru môžete meniť. Riadky vytvorené skriptom majú pevné triedy na štýlovanie: bbc-woo-picker__day s .is-picked, __slot s .is-picked, __time, __price, __extra, __extras-toggle, __qty, __step a __veil. Posledná trieda je načítavacia vrstva blockUI blockOverlay.

Pre .bbc-woo-picker sú dostupné CSS premenné --bbc-woo-accent, --bbc-woo-on-accent, --bbc-woo-radius, --bbc-woo-ink a --bbc-woo-gap. Prvé štyri skript preberá z tlačidla Add to cart aktívnej témy.

Blokový košík

Bloky Cart a Checkout aj minikošík prevádzajú údaje položky na obyčajný text. Šablóna súhrnu sa tam nepoužíva. Pre každý deň a každú doplnkovú službu vznikne samostatný riadok. Riadky môžete zmeniť filtrom baza_bc_woocommerce_item_rows.

Filtre a akcie

HookÚčel
baza_bc_woocommerce_template (filter)Cesta k šablóne: ( $file, $name, $args ).
baza_bc_woocommerce_summary_data (filter)Údaje pre súhrn v košíku: ( array $data { days, extras }, array $input ).
baza_bc_woocommerce_item_rows (filter)Textové riadky položky v blokovom košíku, minikošíku a objednávke: ( array $rows { key, value }, array $input ).
baza_bc_woocommerce_product_dates (action)Spúšťa sa na stránke rezervačného produktu v mieste kalendára: ( WC_Product $product ). Tu môžete vykresliť vlastné rozhranie po odstránení predvoleného cez remove_action( ..., [ 'BazaBookingCalendar\BBC_Woo_Cart', 'render_calendar' ] ).
baza_bc_woocommerce_offline_methods (filter)Identifikátory spôsobov platby neskôr. Predvolené: bacs, cheque, cod.
baza_bc_woocommerce_paid_on_completion (filter)Identifikátory spôsobov, pri ktorých sa platba považuje za prijatú až so stavom completed. Predvolené: cod.
baza_bc_woocommerce_send_shop_emails (filter)Vráťte true, ak chcete klientom posielať vlastné e-maily obchodu pre rezervačné objednávky. Predvolene vypnuté.
baza_bc_price_journal_recorded (action)Spúšťa sa po zapísaní zmeny ceny: ( $booking_id, array $entry ).
baza_bc_internal_booking_meta_prefixes (filter)Predpony metadát skrytých v paneli rezervácie, e-mailoch a udalostiach kalendára. Predvolené: bbc_, woo_. Kľúče začínajúce znakom _ sú skryté vždy.

Ako integrácia funguje v kóde

  1. Stránka produktu. BBC_Woo_Cart::render_calendar() načíta skript výberu a vykreslí views/picker.php. Rozhranie používa verejné akcie admin-ajax.php. Všetky iba čítajú údaje okrem poslednej, ktorá pridá položku do košíka.

Požiadavky rozhrania výberu

  • bbc_woo_days s product a month=YYYY-MM: dni s voľnými termínmi.
  • bbc_woo_slots s product a date: voľné časy dňa s cenami.
  • bbc_woo_extras s product: doplnkové služby.
  • bbc_woo_quote s product, slots[] a extras[id]=qty: celková suma.
  • bbc_woo_add s rovnakými údajmi: pridanie do košíka.
  1. Výpočet ceny. Cenu vždy určuje server. BBC_Booking_Create::create( $input, [ 'quote' => true ] ) vykoná kontroly a spustí BBC_Booking_Calculate, ale nevytvorí rezerváciu. Z prehliadača sa prijímajú iba reťazce termínov, identifikátory doplnkových služieb a ich množstvo.
  2. Položka košíka. WC()->cart->add_to_cart() dostane údaje bbc_booking ako { input, total }. Hook woocommerce_before_calculate_totals nastaví konečnú cenu bez dane obchodu. woocommerce_check_cart_items zopakuje kontrolu v košíku a pri pokladni. Obsadený termín vyvolá chybu a zmenená cena aktualizuje položku.
  3. Objednávka. woocommerce_checkout_create_order uloží formuláre do metadát objednávky _bbc_inputs. Akcie woocommerce_checkout_order_processed a woocommerce_store_api_checkout_order_processed spustia BBC_Woo_Cart::create_bookings(). Pre každú položku vznikne jedna rezervácia so stavom pending, ktorá drží termín. Identifikátory sa uložia do _bbc_booking_ids objednávky a woo_order_id rezervácie.
  4. Synchronizácia stavu. BBC_WooCommerce::order_status_changed() zmení zaplatenú rezerváciu na booked, ponechá nezaplatené offline spôsoby ako pending, odmietne pending pri cancelled alebo failed a odmietne booked po refunded. Ak rezerváciu odmietnete v plugine a objednávka už nemá aktívne rezervácie, nezaplatená objednávka sa zruší.

Metadáta rezervácie zapisované obchodom

Predpona woo_ skrýva tieto polia v paneli: woo_order_id, woo_payment_method, woo_payment_title, woo_payment_state s hodnotami paid, waiting, cancelled, failed alebo refunded, woo_payment_offline a woo_waiting_payment. Kupón WooCommerce zapisuje aj promo_sale a coupon_code.

Denník cien

BBC_Price_Journal::record( $booking_id, $kind, $reason, $before, $after, $by = [] ) zapíše zmenu do metadát bbc_price_journal a denníka aktivity. Pole $by má formát [ 'type' => admin|client|shop|system, 'user' => id, 'label' => text ]. Ak ho neuvediete, použije sa aktuálny používateľ alebo system. Záznamy načítate cez BBC_Price_Journal::entries( $id ).

Licencia a kompatibilita

  • Kľúč funkcie woocommerce je dostupný v každom pláne a sprístupní platobnú bránu, typ produktu, košík a import. Synchronizácia stavu už vytvorených objednávok od neho nezávisí.
  • Deklarovaná je kompatibilita s HPOS a blokmi Cart a Checkout.
  • Import z WooCommerce Bookings vykonáva BBC_Woo_Import v časti WooCommerce > Import bookings. Opakované spustenie je bezpečné vďaka metadátam _bbc_imported_from_wc.
Naposledy upravené: 24.10.2026