Files
krolewskie-miody.pl/.paul/codebase/architecture.md
2026-05-19 20:05:59 +02:00

73 lines
3.7 KiB
Markdown

# 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.*