WooCommerce-Integration für Entwickler

Templates

Zwei Templates stellen den Shop-Bereich dar. Kopieren Sie das gewünschte Template in Ihr Theme, um es anzupassen. Zuerst wird das Child-Theme geprüft. Ist dort keine Kopie vorhanden, verwendet das Plugin sein eigenes Template.

TemplatePfad im ThemeVerwendung
picker.phpyourtheme/baza-booking-calendar/woocommerce/picker.phpAuswahl von Datum und Uhrzeit auf der Buchungsproduktseite
cart-summary.phpyourtheme/baza-booking-calendar/woocommerce/cart-summary.phpBuchungsdetails unter einer Position im klassischen Warenkorb und Checkout

Jedes Template erhält seine Daten in $args. Die Angaben sind am Anfang der jeweiligen Datei dokumentiert. Der Pfad lässt sich außerdem mit apply_filters( 'baza_bc_woocommerce_template', $file, $name, $args ) ändern.

Struktur der Datum- und Zeitauswahl

Das Skript modules/woocommerce/assets/woo-picker.js findet seine Elemente anhand von data-bbc-role. Fehlt ein erforderliches Element, stoppt es mit einem Fehler in der Konsole.

Erforderliche Rollen: prev, next, title, grid, slots, extras, total, book, note.

Tags, Klassen, Reihenfolge und zusätzliche Struktur können Sie ändern. Die vom Skript erzeugten Zeilen verwenden feste Klassen für die Gestaltung: bbc-woo-picker__day mit .is-picked, __slot mit .is-picked, __time, __price, __extra, __extras-toggle, __qty, __step und __veil. Die letzte Klasse ist die Ladeebene blockUI blockOverlay.

Für .bbc-woo-picker stehen die CSS-Variablen --bbc-woo-accent, --bbc-woo-on-accent, --bbc-woo-radius, --bbc-woo-ink und --bbc-woo-gap bereit. Die ersten vier übernimmt das Skript von der Schaltfläche Add to cart des aktiven Themes.

Block-Warenkorb

Die Blöcke Cart und Checkout sowie der Mini-Warenkorb geben Positionsdaten als einfachen Text aus. Das Zusammenfassungs-Template wird dort nicht verwendet. Für jeden Tag und jede Zusatzleistung entsteht eine eigene Zeile. Mit baza_bc_woocommerce_item_rows können Sie diese Zeilen ändern.

Filter und Aktionen

HookZweck
baza_bc_woocommerce_template (filter)Pfad eines Templates: ( $file, $name, $args ).
baza_bc_woocommerce_summary_data (filter)Daten für die Warenkorbzusammenfassung: ( array $data { days, extras }, array $input ).
baza_bc_woocommerce_item_rows (filter)Textzeilen einer Position im Block-Warenkorb, Mini-Warenkorb und in der Bestellung: ( array $rows { key, value }, array $input ).
baza_bc_woocommerce_product_dates (action)Wird auf der Buchungsproduktseite an der Stelle der Datumsauswahl ausgelöst: ( WC_Product $product ). Hier können Sie eine eigene Auswahl ausgeben, nachdem Sie die Standardausgabe mit remove_action( ..., [ 'BazaBookingCalendar\BBC_Woo_Cart', 'render_calendar' ] ) entfernt haben.
baza_bc_woocommerce_offline_methods (filter)Gateway-IDs für spätere Zahlung. Standard: bacs, cheque, cod.
baza_bc_woocommerce_paid_on_completion (filter)Gateway-IDs, deren Bestellung erst mit completed als bezahlt gilt. Standard: cod.
baza_bc_woocommerce_send_shop_emails (filter)Geben Sie true zurück, um die eigenen Kunden-E-Mails des Shops für Buchungsbestellungen zu senden. Standardmäßig deaktiviert.
baza_bc_price_journal_recorded (action)Wird nach dem Speichern einer Preisänderung ausgelöst: ( $booking_id, array $entry ).
baza_bc_internal_booking_meta_prefixes (filter)Präfixe von Metadaten, die im Buchungsbereich, in E-Mails und Kalenderereignissen ausgeblendet werden. Standard: bbc_, woo_. Schlüssel mit führendem _ sind immer ausgeblendet.

Ablauf im Code

  1. Produktseite. BBC_Woo_Cart::render_calendar() lädt das Auswahlskript und gibt views/picker.php aus. Die Oberfläche nutzt öffentliche admin-ajax.php-Aktionen. Alle lesen nur Daten, mit Ausnahme der letzten Aktion, die eine Position in den Warenkorb legt.

Anfragen der Auswahloberfläche

  • bbc_woo_days mit product und month=YYYY-MM: Tage mit freien Zeiten.
  • bbc_woo_slots mit product und date: freie Uhrzeiten des Tages mit Preisen.
  • bbc_woo_extras mit product: Zusatzleistungen.
  • bbc_woo_quote mit product, slots[] und extras[id]=qty: Gesamtbetrag.
  • bbc_woo_add mit denselben Daten: zum Warenkorb hinzufügen.
  1. Preisberechnung. Der Server bestimmt immer den Preis. BBC_Booking_Create::create( $input, [ 'quote' => true ] ) prüft die Eingaben und führt BBC_Booking_Calculate aus, erstellt aber keine Buchung. Aus dem Browser werden nur Zeitfenster, IDs der Zusatzleistungen und Mengen übernommen.
  2. Warenkorbposition. WC()->cart->add_to_cart() erhält bbc_booking als { input, total }. woocommerce_before_calculate_totals setzt den endgültigen Preis ohne Shop-Steuer. woocommerce_check_cart_items prüft im Warenkorb und im Checkout erneut. Ein belegter Termin erzeugt einen Fehler, ein geänderter Preis aktualisiert die Position.
  3. Bestellung. woocommerce_checkout_create_order speichert die Formulare in _bbc_inputs der Bestellung. woocommerce_checkout_order_processed und woocommerce_store_api_checkout_order_processed rufen BBC_Woo_Cart::create_bookings() auf. Pro Position entsteht eine pending-Buchung, die den Termin reserviert. IDs werden in _bbc_booking_ids der Bestellung und woo_order_id der Buchung gespeichert.
  4. Statusabgleich. BBC_WooCommerce::order_status_changed() setzt bezahlte Buchungen auf booked, lässt unbezahlte Offline-Methoden auf pending, lehnt pending bei cancelled oder failed ab und lehnt booked nach refunded ab. Wird eine Buchung im Plugin abgelehnt und enthält die Bestellung keine aktive Buchung mehr, wird eine unbezahlte Bestellung storniert.

Vom Shop gespeicherte Buchungsmetadaten

Das Präfix woo_ blendet diese Felder im Buchungsbereich aus: woo_order_id, woo_payment_method, woo_payment_title, woo_payment_state mit paid, waiting, cancelled, failed oder refunded, woo_payment_offline und woo_waiting_payment. Ein WooCommerce-Gutschein speichert außerdem promo_sale und coupon_code.

Preisprotokoll

BBC_Price_Journal::record( $booking_id, $kind, $reason, $before, $after, $by = [] ) schreibt eine Änderung in bbc_price_journal und in das Aktivitätsprotokoll. $by hat das Format [ 'type' => admin|client|shop|system, 'user' => id, 'label' => text ]. Ohne Angabe wird der aktuelle Benutzer oder system verwendet. Mit BBC_Price_Journal::entries( $id ) lesen Sie die Einträge.

Lizenz und Kompatibilität

  • Der Funktionsschlüssel woocommerce ist in jedem Tarif enthalten und aktiviert Zahlungsanbieter, Produkttyp, Warenkorb und Import. Der Statusabgleich bereits erstellter Bestellungen ist davon unabhängig.
  • HPOS sowie die Blöcke Cart und Checkout sind als kompatibel deklariert.
  • Der Import aus WooCommerce Bookings erfolgt über BBC_Woo_Import unter WooCommerce > Import bookings. Dank _bbc_imported_from_wc kann er sicher erneut ausgeführt werden.
Zuletzt geändert: 24.10.2026