Files
2026-05-19 20:05:59 +02:00

6.5 KiB

plan_id, title, storage, legacy_phase, created, status, type, autonomous, delegation, files_modified, quality_radar
plan_id title storage legacy_phase created status type autonomous delegation files_modified quality_radar
20260519-1532-naprawa-inpost-pay-wp-body-open Naprawa InPost Pay przez przywrócenie wp_body_open plan-first null 2026-05-19T15:32:42+02:00 applied_pending_human_verify execute false auto
wp-content/themes/betheme/header.php
degraded
## 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(); ?>>.

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

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

<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

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

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

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>

Task 1: Dodać wp_body_open do header.php wp-content/themes/betheme/header.php Wstawić `<?php wp_body_open(); ?>` bezpośrednio po linii `>`. Zachować istniejący układ HTML/PHP i nie zmieniać pozostałych hooków Betheme. `rg -n "wp_body_open| Spełnia AC-1 i AC-3. Task 2: Sprawdzić składnię PHP zmienionego pliku wp-content/themes/betheme/header.php Uruchomić lint PHP dla zmienionego pliku, jeśli `php` jest dostępny w PATH. `php -l wp-content/themes/betheme/header.php` albo udokumentowany brak PHP CLI Spełnia AC-1 i AC-3. Task 3: Zweryfikować frontend z aktywnym InPost Pay wp-content/themes/betheme/header.php, wp-content/plugins/inpost-pay/src/hooks/front/FrontWidgetV2.php Na środowisku z aktywną wtyczką `inpost-pay` odświeżyć stronę koszyka/checkoutu i sprawdzić, czy w HTML po `` pojawia się skrypt z `IPPWidgetOptions`. DevTools Console: brak `ReferenceError: IPPWidgetOptions is not defined`; Source/Elements: obecny skrypt `IPPWidgetOptions`. Spełnia AC-2. ## 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.
- [ ] `rg -n "wp_body_open|

<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>
SUMMARY.md path: `.paul/plans/20260519-1532-naprawa-inpost-pay-wp-body-open/SUMMARY.md`