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 motywie | Zastosowanie |
|---|---|---|
picker.php | yourtheme/baza-booking-calendar/woocommerce/picker.php | Wybór daty i godziny na stronie produktu rezerwacyjnego |
cart-summary.php | yourtheme/baza-booking-calendar/woocommerce/cart-summary.php | Szczegół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
| Hook | Zastosowanie |
|---|---|
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
- Strona produktu.
BBC_Woo_Cart::render_calendar()ładuje skrypt wyboru i wyświetlaviews/picker.php. Interfejs korzysta z publicznych akcjiadmin-ajax.php. Wszystkie tylko odczytują dane poza ostatnią, która dodaje pozycję do koszyka.
Żądania interfejsu wyboru
bbc_woo_dayszproductimonth=YYYY-MM: dni z wolnymi terminami.bbc_woo_slotszproductidate: wolne godziny danego dnia z cenami.bbc_woo_extraszproduct: usługi dodatkowe.bbc_woo_quotezproduct,slots[]iextras[id]=qty: łączna kwota.bbc_woo_addz tymi samymi danymi: dodanie do koszyka.
- Obliczanie ceny. Cenę zawsze ustala serwer.
BBC_Booking_Create::create( $input, [ 'quote' => true ] )wykonuje kontrole i uruchamiaBBC_Booking_Calculate, ale nie tworzy rezerwacji. Z przeglądarki przyjmowane są wyłącznie ciągi terminów, identyfikatory usług dodatkowych i ich liczba. - Pozycja koszyka.
WC()->cart->add_to_cart()otrzymuje danebbc_bookingjako{ input, total }. Hookwoocommerce_before_calculate_totalsustawia ostateczną cenę bez podatku sklepu.woocommerce_check_cart_itemsponawia kontrolę w koszyku i przy kasie. Zajęty termin wywołuje błąd, a zmieniona cena aktualizuje pozycję. - Zamówienie.
woocommerce_checkout_create_orderzapisuje formularze w metadanych zamówienia_bbc_inputs. Akcjewoocommerce_checkout_order_processediwoocommerce_store_api_checkout_order_processeduruchamiająBBC_Woo_Cart::create_bookings(). Dla każdej pozycji powstaje jedna rezerwacja ze statusem pending, która blokuje termin. Identyfikatory trafiają do_bbc_booking_idszamówienia iwoo_order_idrezerwacji. - 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
woocommercejest 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_Importw WooCommerce > Import bookings. Ponowne uruchomienie jest bezpieczne dzięki metadanym_bbc_imported_from_wc.
