Integracja WooCommerce dla programistów

Szablony

Za część sklepową odpowiadają dwa szablony. Skopiuj wybrany szablon do motywu, aby go zmienić. Najpierw sprawdzany jest motyw potomny. Jeśli kopia nie istnieje, używany jest szablon wtyczki.

SzablonŚcieżka w motywieZastosowanie
picker.phpyourtheme/baza-booking-calendar/woocommerce/picker.phpWybór daty i godziny na stronie produktu rezerwacyjnego
cart-summary.phpyourtheme/baza-booking-calendar/woocommerce/cart-summary.phpSzczegóły rezerwacji pod pozycją w klasycznym koszyku i formularzu zamówienia

Każdy szablon otrzymuje dane w $args. Są one opisane na początku odpowiedniego pliku. Ścieżkę można również zmienić przez apply_filters( 'baza_bc_woocommerce_template', $file, $name, $args ).

Struktura wyboru daty i godziny

Skrypt modules/woocommerce/assets/woo-picker.js odnajduje elementy za pomocą atrybutu data-bbc-role. Gdy brakuje wymaganego elementu, działanie zatrzymuje się z błędem w konsoli.

Wymagane role: prev, next, title, grid, slots, extras, total, book, note.

Możesz zmieniać znaczniki, klasy, kolejność i dodatkową strukturę. Wiersze tworzone przez skrypt mają stałe klasy do stylowania: bbc-woo-picker__day z .is-picked, __slot z .is-picked, __time, __price, __extra, __extras-toggle, __qty, __step oraz __veil. Ostatnia klasa obsługuje warstwę ładowania blockUI blockOverlay.

Dla .bbc-woo-picker dostępne są zmienne CSS --bbc-woo-accent, --bbc-woo-on-accent, --bbc-woo-radius, --bbc-woo-ink i --bbc-woo-gap. Pierwsze cztery skrypt pobiera z przycisku Add to cart aktywnego motywu.

Koszyk blokowy

Bloki Cart i Checkout oraz minikoszyk zamieniają dane pozycji na zwykły tekst. Szablon podsumowania nie jest tam używany. Każdy dzień i każda usługa dodatkowa otrzymują osobny wiersz. Wiersze można zmienić filtrem baza_bc_woocommerce_item_rows.

Filtry i akcje

HookZastosowanie
baza_bc_woocommerce_template (filter)Ścieżka szablonu: ( $file, $name, $args ).
baza_bc_woocommerce_summary_data (filter)Dane używane w podsumowaniu koszyka: ( array $data { days, extras }, array $input ).
baza_bc_woocommerce_item_rows (filter)Tekstowe wiersze pozycji w koszyku blokowym, minikoszyku i zamówieniu: ( array $rows { key, value }, array $input ).
baza_bc_woocommerce_product_dates (action)Uruchamiana na stronie produktu rezerwacyjnego w miejscu kalendarza: ( WC_Product $product ). Możesz tu wyświetlić własny interfejs po usunięciu standardowego przez remove_action( ..., [ 'BazaBookingCalendar\BBC_Woo_Cart', 'render_calendar' ] ).
baza_bc_woocommerce_offline_methods (filter)Identyfikatory metod płatności późniejszej. Domyślnie: bacs, cheque, cod.
baza_bc_woocommerce_paid_on_completion (filter)Identyfikatory metod, dla których płatność jest uznawana dopiero przy statusie completed. Domyślnie: cod.
baza_bc_woocommerce_send_shop_emails (filter)Zwróć true, aby wysyłać klientom wiadomości sklepu dla zamówień rezerwacyjnych. Domyślnie wyłączone.
baza_bc_price_journal_recorded (action)Uruchamiana po zapisaniu zmiany ceny: ( $booking_id, array $entry ).
baza_bc_internal_booking_meta_prefixes (filter)Prefiksy metadanych ukrytych w panelu rezerwacji, wiadomościach i zdarzeniach kalendarza. Domyślnie: bbc_, woo_. Klucze zaczynające się od _ są zawsze ukryte.

Jak integracja działa w kodzie

  1. Strona produktu. BBC_Woo_Cart::render_calendar() ładuje skrypt wyboru i wyświetla views/picker.php. Interfejs korzysta z publicznych akcji admin-ajax.php. Wszystkie tylko odczytują dane poza ostatnią, która dodaje pozycję do koszyka.

Żądania interfejsu wyboru

  • bbc_woo_days z product i month=YYYY-MM: dni z wolnymi terminami.
  • bbc_woo_slots z product i date: wolne godziny danego dnia z cenami.
  • bbc_woo_extras z product: usługi dodatkowe.
  • bbc_woo_quote z product, slots[] i extras[id]=qty: łączna kwota.
  • bbc_woo_add z tymi samymi danymi: dodanie do koszyka.
  1. Obliczanie ceny. Cenę zawsze ustala serwer. BBC_Booking_Create::create( $input, [ 'quote' => true ] ) wykonuje kontrole i uruchamia BBC_Booking_Calculate, ale nie tworzy rezerwacji. Z przeglądarki przyjmowane są wyłącznie ciągi terminów, identyfikatory usług dodatkowych i ich liczba.
  2. Pozycja koszyka. WC()->cart->add_to_cart() otrzymuje dane bbc_booking jako { input, total }. Hook woocommerce_before_calculate_totals ustawia ostateczną cenę bez podatku sklepu. woocommerce_check_cart_items ponawia kontrolę w koszyku i przy kasie. Zajęty termin wywołuje błąd, a zmieniona cena aktualizuje pozycję.
  3. Zamówienie. woocommerce_checkout_create_order zapisuje formularze w metadanych zamówienia _bbc_inputs. Akcje woocommerce_checkout_order_processed i woocommerce_store_api_checkout_order_processed uruchamiają BBC_Woo_Cart::create_bookings(). Dla każdej pozycji powstaje jedna rezerwacja ze statusem pending, która blokuje termin. Identyfikatory trafiają do _bbc_booking_ids zamówienia i woo_order_id rezerwacji.
  4. Synchronizacja statusu. BBC_WooCommerce::order_status_changed() zmienia opłaconą rezerwację na booked, pozostawia nieopłacone metody offline jako pending, odrzuca pending przy cancelled lub failed oraz odrzuca booked po refunded. Gdy rezerwacja zostanie odrzucona we wtyczce i w zamówieniu nie pozostaną aktywne rezerwacje, nieopłacone zamówienie jest anulowane.

Metadane rezerwacji zapisywane przez sklep

Prefiks woo_ ukrywa te pola w panelu: woo_order_id, woo_payment_method, woo_payment_title, woo_payment_state o wartościach paid, waiting, cancelled, failed lub refunded, woo_payment_offline i woo_waiting_payment. Kupon WooCommerce zapisuje także promo_sale i coupon_code.

Dziennik cen

BBC_Price_Journal::record( $booking_id, $kind, $reason, $before, $after, $by = [] ) zapisuje zmianę w metadanych bbc_price_journal oraz dzienniku aktywności. Tablica $by ma format [ 'type' => admin|client|shop|system, 'user' => id, 'label' => text ]. Jeśli jej nie podasz, używany jest aktualny użytkownik albo system. Do odczytu służy BBC_Price_Journal::entries( $id ).

Licencja i zgodność

  • Klucz funkcji woocommerce jest dostępny w każdym planie i włącza bramkę płatniczą, typ produktu, koszyk oraz import. Synchronizacja statusu już utworzonych zamówień nie zależy od tego klucza.
  • Zadeklarowano zgodność z HPOS oraz blokami Cart i Checkout.
  • Import z WooCommerce Bookings obsługuje BBC_Woo_Import w WooCommerce > Import bookings. Ponowne uruchomienie jest bezpieczne dzięki metadanym _bbc_imported_from_wc.
Ostatnia modyfikacja: 24.10.2026