165 lines
6.5 KiB
Markdown
165 lines
6.5 KiB
Markdown
---
|
|
plan_id: 20260519-1532-naprawa-inpost-pay-wp-body-open
|
|
title: Naprawa InPost Pay przez przywrócenie wp_body_open
|
|
storage: plan-first
|
|
legacy_phase: null
|
|
created: 2026-05-19T15:32:42+02:00
|
|
status: applied_pending_human_verify
|
|
type: execute
|
|
autonomous: false
|
|
delegation: auto
|
|
files_modified:
|
|
- wp-content/themes/betheme/header.php
|
|
quality_radar: degraded
|
|
---
|
|
|
|
<objective>
|
|
## Goal
|
|
Naprawić błąd `IPPWidgetOptions is not defined` po instalacji `inpost-pay`.
|
|
|
|
## Purpose
|
|
Wtyczka `inpost-pay` rejestruje skrypt inicjalizujący `IPPWidgetOptions` na hooku `wp_body_open`. Motyw `betheme` nie wywołuje tego hooka po otwarciu `<body>`, więc konfiguracja widgetu nie trafia do HTML przed uruchomieniem `woocommerceizi.js`.
|
|
|
|
## Output
|
|
Jedna zmiana w `wp-content/themes/betheme/header.php`: dodanie `<?php wp_body_open(); ?>` bezpośrednio po `<body <?php body_class(); ?>>`.
|
|
</objective>
|
|
|
|
<context>
|
|
## Project Docs
|
|
@.paul/PROJECT.md
|
|
@.paul/STATE.md
|
|
@.paul/codebase/architecture.md
|
|
@.paul/codebase/impact_map.md
|
|
@.paul/codebase/quality_risks.md
|
|
|
|
## Source Files
|
|
@wp-content/themes/betheme/header.php
|
|
@wp-content/plugins/inpost-pay/src/hooks/front/FrontWidgetV2.php
|
|
@wp-content/plugins/inpost-pay/src/InpostPay.php
|
|
</context>
|
|
|
|
<clarifications>
|
|
- Support InPost wskazał brak `wp_body_open()` w `header.php` jako przyczynę niewstrzyknięcia skryptu z `IPPWidgetOptions`.
|
|
- W repo nie widać child theme dla `betheme`, więc plan dotyka parent theme. To jest świadome odstępstwo od preferowanej reguły projektu; ryzyko nadpisania przy aktualizacji motywu jest zapisane w impact scan i granicach.
|
|
</clarifications>
|
|
|
|
<impact_scan>
|
|
## Quality Radar
|
|
|
|
**Status:** degraded
|
|
**Tools:** `codebase-memory-mcp` częściowo dostępny; szerokie zapytania po repo timeoutują. Użyto zawężonego `rg` i odczytu konkretnych plików.
|
|
|
|
## Affected Areas
|
|
|
|
- Motyw frontend: `wp-content/themes/betheme/header.php`.
|
|
- InPost Pay widget: `wp-content/plugins/inpost-pay/src/hooks/front/FrontWidgetV2.php`.
|
|
- InPost Pay JS: `wp-content/plugins/inpost-pay/src/InpostPay.php` rejestruje `assets/js/woocommerceizi.js`.
|
|
|
|
## Findings
|
|
|
|
- `FrontWidgetV2::attach_hook()` podpina `add_root_script_after_body_open` do `wp_body_open`.
|
|
- `FrontWidgetV2::add_root_script_after_body_open()` emituje `const IPPWidgetOptions = {...}`.
|
|
- `wp-content/themes/betheme/header.php` ma `<body <?php body_class(); ?>>`, ale nie ma `wp_body_open()`.
|
|
- Brak child theme w `wp-content/themes/` oznacza ryzyko, że zmiana w `betheme` zostanie nadpisana podczas aktualizacji motywu.
|
|
|
|
## Duplicate / Hardcoded Risks
|
|
|
|
- Nie tworzyć fallbacku `IPPWidgetOptions` w custom JS, bo byłby drugim źródłem prawdy obok `inpost-pay`.
|
|
- Nie modyfikować `wp-content/plugins/inpost-pay/`, bo problem leży po stronie niewywołanego hooka motywu.
|
|
|
|
## Explicit Deferrals
|
|
|
|
- Utworzenie child theme zostaje poza zakresem tej poprawki, bo użytkownik zgłasza pilny błąd produkcyjny i wsparcie InPost wskazało minimalną zmianę.
|
|
</impact_scan>
|
|
|
|
<acceptance_criteria>
|
|
|
|
## AC-1: Hook WordPress Jest Wywoływany Po Otwarciu Body
|
|
```gherkin
|
|
Given aktywny motyw renderuje `wp-content/themes/betheme/header.php`
|
|
When strona frontendowa otwiera znacznik `<body>`
|
|
Then bezpośrednio po nim wywoływane jest `wp_body_open()`
|
|
```
|
|
|
|
## AC-2: InPost Pay Może Wstrzyknąć Konfigurację Widgetu
|
|
```gherkin
|
|
Given wtyczka `inpost-pay` jest aktywna
|
|
When WordPress uruchamia hook `wp_body_open`
|
|
Then `FrontWidgetV2::add_root_script_after_body_open()` może wypisać skrypt z `IPPWidgetOptions`
|
|
```
|
|
|
|
## AC-3: Zakres Zmiany Jest Minimalny
|
|
```gherkin
|
|
Given poprawka dotyczy kompatybilności motywu z hookiem WordPress
|
|
When kod zostanie zmieniony
|
|
Then nie są modyfikowane pliki `wp-content/plugins/inpost-pay/` ani inne integracje checkoutu
|
|
```
|
|
|
|
</acceptance_criteria>
|
|
|
|
<tasks>
|
|
|
|
<task type="auto">
|
|
<name>Task 1: Dodać wp_body_open do header.php</name>
|
|
<files>wp-content/themes/betheme/header.php</files>
|
|
<action>
|
|
Wstawić `<?php wp_body_open(); ?>` bezpośrednio po linii `<body <?php body_class(); ?>>`.
|
|
Zachować istniejący układ HTML/PHP i nie zmieniać pozostałych hooków Betheme.
|
|
</action>
|
|
<verify>`rg -n "wp_body_open|<body|body_class" wp-content/themes/betheme/header.php`</verify>
|
|
<done>Spełnia AC-1 i AC-3.</done>
|
|
</task>
|
|
|
|
<task type="auto">
|
|
<name>Task 2: Sprawdzić składnię PHP zmienionego pliku</name>
|
|
<files>wp-content/themes/betheme/header.php</files>
|
|
<action>
|
|
Uruchomić lint PHP dla zmienionego pliku, jeśli `php` jest dostępny w PATH.
|
|
</action>
|
|
<verify>`php -l wp-content/themes/betheme/header.php` albo udokumentowany brak PHP CLI</verify>
|
|
<done>Spełnia AC-1 i AC-3.</done>
|
|
</task>
|
|
|
|
<task type="checkpoint:human-verify" gate="blocking">
|
|
<name>Task 3: Zweryfikować frontend z aktywnym InPost Pay</name>
|
|
<files>wp-content/themes/betheme/header.php, wp-content/plugins/inpost-pay/src/hooks/front/FrontWidgetV2.php</files>
|
|
<action>
|
|
Na środowisku z aktywną wtyczką `inpost-pay` odświeżyć stronę koszyka/checkoutu i sprawdzić, czy w HTML po `<body>` pojawia się skrypt z `IPPWidgetOptions`.
|
|
</action>
|
|
<verify>DevTools Console: brak `ReferenceError: IPPWidgetOptions is not defined`; Source/Elements: obecny skrypt `IPPWidgetOptions`.</verify>
|
|
<done>Spełnia AC-2.</done>
|
|
</task>
|
|
|
|
</tasks>
|
|
|
|
<boundaries>
|
|
## Do Not Change
|
|
- Nie modyfikować `wp-content/plugins/inpost-pay/`.
|
|
- Nie modyfikować `wp-content/plugins/ws-inpost-map/`.
|
|
- Nie zmieniać logiki checkoutu, płatności, dostaw ani assetów Betheme.
|
|
- Nie dodawać własnego globalnego `IPPWidgetOptions` poza mechanizmem `inpost-pay`.
|
|
|
|
## Scope Limits
|
|
- Plan naprawia brak standardowego hooka WordPress w aktywnym headerze.
|
|
- Plan nie rozwiązuje ogólnego problemu braku child theme.
|
|
- Plan nie potwierdza konfiguracji merchant InPost Pay ani poprawności danych API.
|
|
</boundaries>
|
|
|
|
<verification>
|
|
- [ ] `rg -n "wp_body_open|<body|body_class" wp-content/themes/betheme/header.php`
|
|
- [ ] `php -l wp-content/themes/betheme/header.php` albo zanotowany brak PHP CLI
|
|
- [ ] Frontend manualnie: brak błędu `IPPWidgetOptions is not defined`
|
|
- [ ] Quality Radar relevant risks handled or deferred.
|
|
</verification>
|
|
|
|
<success_criteria>
|
|
- [ ] `wp_body_open()` jest w `wp-content/themes/betheme/header.php` bezpośrednio po `<body <?php body_class(); ?>>`.
|
|
- [ ] Nie zmieniono plików pluginu `inpost-pay`.
|
|
- [ ] PHP lint przechodzi albo brak PHP CLI jest udokumentowany.
|
|
- [ ] Na środowisku z aktywnym `inpost-pay` widget nie zgłasza `IPPWidgetOptions is not defined`.
|
|
</success_criteria>
|
|
|
|
<output>
|
|
SUMMARY.md path: `.paul/plans/20260519-1532-naprawa-inpost-pay-wp-body-open/SUMMARY.md`
|
|
</output>
|