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.
| Template | Pfad im Theme | Verwendung |
|---|---|---|
picker.php | yourtheme/baza-booking-calendar/woocommerce/picker.php | Auswahl von Datum und Uhrzeit auf der Buchungsproduktseite |
cart-summary.php | yourtheme/baza-booking-calendar/woocommerce/cart-summary.php | Buchungsdetails 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
| Hook | Zweck |
|---|---|
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
- Produktseite.
BBC_Woo_Cart::render_calendar()lädt das Auswahlskript und gibtviews/picker.phpaus. Die Oberfläche nutzt öffentlicheadmin-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_daysmitproductundmonth=YYYY-MM: Tage mit freien Zeiten.bbc_woo_slotsmitproductunddate: freie Uhrzeiten des Tages mit Preisen.bbc_woo_extrasmitproduct: Zusatzleistungen.bbc_woo_quotemitproduct,slots[]undextras[id]=qty: Gesamtbetrag.bbc_woo_addmit denselben Daten: zum Warenkorb hinzufügen.
- Preisberechnung. Der Server bestimmt immer den Preis.
BBC_Booking_Create::create( $input, [ 'quote' => true ] )prüft die Eingaben und führtBBC_Booking_Calculateaus, erstellt aber keine Buchung. Aus dem Browser werden nur Zeitfenster, IDs der Zusatzleistungen und Mengen übernommen. - Warenkorbposition.
WC()->cart->add_to_cart()erhältbbc_bookingals{ input, total }.woocommerce_before_calculate_totalssetzt den endgültigen Preis ohne Shop-Steuer.woocommerce_check_cart_itemsprüft im Warenkorb und im Checkout erneut. Ein belegter Termin erzeugt einen Fehler, ein geänderter Preis aktualisiert die Position. - Bestellung.
woocommerce_checkout_create_orderspeichert die Formulare in_bbc_inputsder Bestellung.woocommerce_checkout_order_processedundwoocommerce_store_api_checkout_order_processedrufenBBC_Woo_Cart::create_bookings()auf. Pro Position entsteht eine pending-Buchung, die den Termin reserviert. IDs werden in_bbc_booking_idsder Bestellung undwoo_order_idder Buchung gespeichert. - 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
woocommerceist 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_Importunter WooCommerce > Import bookings. Dank_bbc_imported_from_wckann er sicher erneut ausgeführt werden.
