# Architektura **Data analizy:** 2026-05-19 ## Przegląd Wzorca **Ogólnie:** monolityczna aplikacja WordPress/WooCommerce z dużą liczbą pluginów i vendorowym motywem. **Kluczowe cechy:** - Request lifecycle kontroluje WordPress core przez `index.php`, `wp-blog-header.php`, `wp-load.php` i `wp-settings.php`. - Logika sprzedażowa przechodzi przez WooCommerce w `wp-content/plugins/woocommerce/`. - Customizacja rozpoznana w kodzie to plugin `wp-content/plugins/ws-inpost-map/`. - Motyw `wp-content/themes/betheme/` dostarcza dużą część warstwy prezentacji i shortcodeów. ## Warstwy **WordPress Core:** - Cel: bootstrap aplikacji, ładowanie konfiguracji, pluginów, motywów i hooków. - Lokalizacje: `index.php`, `wp-load.php`, `wp-settings.php`, `wp-config.php`. - Uwaga: w repozytorium nie ma pełnego `wp-admin/` ani `wp-includes/`, więc snapshot jest niepełnym drzewem WordPress. **WooCommerce:** - Cel: koszyk, checkout, zamówienia, płatności, wysyłki i model danych sklepu. - Lokalizacje: `wp-content/plugins/woocommerce/`, pluginy `woo-*`, `woocommerce-*`. - Używane przez: customowy plugin `wp-content/plugins/ws-inpost-map/` oraz liczne integracje płatności/dostaw. **Motyw:** - Cel: frontend, szablony, shortcode'y i builder. - Lokalizacje: `wp-content/themes/betheme/`, `wp-content/themes/twentytwenty*/`. - Ryzyko: brak widocznego child theme; customizacje w `wp-content/themes/betheme/` utrudnią aktualizacje. **Custom Plugin: `ws-inpost-map`:** - Cel: dodać wybór Paczkomatu InPost na checkout i zapisać wybrany punkt do zamówienia. - Entry point: `wp-content/plugins/ws-inpost-map/ws-inpost-map.php`. - Manager: `wp-content/plugins/ws-inpost-map/App/WsInpostMap.php`. - Hooki checkoutu: `wp-content/plugins/ws-inpost-map/App/WsInpostActions.php`. - Metoda wysyłki: `wp-content/plugins/ws-inpost-map/App/WsInpostShippingMethod.php`. - Panel ustawień: `wp-content/plugins/ws-inpost-map/App/WSInpostSettings.php`. - Assety: `wp-content/plugins/ws-inpost-map/App/Assets.php`. ## Przepływ Danych **Checkout z Paczkomatem:** 1. WordPress ładuje plugin przez `wp-content/plugins/ws-inpost-map/ws-inpost-map.php`. 2. `WSIM_InpostMapPlugin` uruchamia `WsInpostMapOnCheckout\App\WsInpostMap`. 3. `WsInpostMap` tworzy `WsInpostActions`, `Assets` i `WSInpostSettings`. 4. `WsInpostActions` rejestruje hooki WooCommerce, jeśli istnieje klasa `woocommerce` i opcja `active-button` jest włączona. 5. Frontend checkoutu ładuje mapę i pole `billing__paczkomat_id`. 6. `saveCustomFieldOrderMeta` zapisuje wartość jako order meta `paczkomat_id`. 7. `displayPaczkomatFieldInOrder` pokazuje zapisany Paczkomat w adminie zamówienia. **Metoda dostawy:** 1. `woocommerce_shipping_init` ładuje `App/WsInpostShippingMethod.php`. 2. `woocommerce_shipping_methods` rejestruje `wsim_inpost_shipping_method`. 3. `WSIM_InpostShippingMethod` pobiera ustawienia instancji WooCommerce i dodaje rate przez `calculate_shipping`. ## Entry Points - `index.php` - web entry point WordPress. - `wp-login.php`, `xmlrpc.php`, `wp-cron.php` - standardowe entry pointy WordPress. - `wp-content/plugins/ws-inpost-map/ws-inpost-map.php` - entry point customowego pluginu. - `wp-content/themes/betheme/functions.php` - bootstrap motywu. ## Cross-Cutting Concerns - Hooki WordPress/WooCommerce są głównym mechanizmem integracji. - Dane sklepu żyją w bazie WordPress/WooCommerce, a customowe dane InPost są w order meta `paczkomat_id`. - Tłumaczenia przez text domain `ws-inpost-map` i katalog `wp-content/plugins/ws-inpost-map/languages/`. - Assety frontendowe pluginu InPost są ładowane globalnie przez `wp_enqueue_scripts`, a nie tylko na checkout. --- *Aktualizuj po zmianie aktywnego motywu, checkoutu, płatności, dostaw albo custom pluginów.*