fix: add wp_body_open to WooCommerce header

This commit is contained in:
2026-05-21 14:46:36 +02:00
parent e90c251d0b
commit 07e0174035
10 changed files with 411 additions and 30 deletions

View File

@@ -0,0 +1,158 @@
---
plan_id: 20260521-1428-naprawa-wp-body-open-woocommerce
title: Naprawa wp_body_open na podstronach WooCommerce
storage: plan-first
legacy_phase: null
created: 2026-05-21T14:32:06+02:00
status: applied
type: execute
autonomous: false
delegation: auto
files_modified:
- wp-content/themes/betheme/header-shop.php
quality_radar: degraded
---
<objective>
## Goal
Przywrocic wywolanie `wp_body_open()` na podstronach WooCommerce, w tym na stronie produktu `https://krolewskie-miody.pl/produkt/miod-borowkowy-400g/?showIzi=true`.
## Purpose
Plugin `inpost-pay` podpina inicjalizacje widgetu pod hook `wp_body_open`. Poprzednia poprawka objela `header.php`, ale produkty i strony sklepu laduja osobny `header-shop.php`, przez co `IPPWidgetOptions` nadal moze nie byc wstrzykiwany.
## Output
Zmodyfikowany `wp-content/themes/betheme/header-shop.php` z `<?php wp_body_open(); ?>` bezposrednio po otwarciu znacznika `<body>`.
</objective>
<context>
## Project Docs
@.paul/PROJECT.md
@.paul/STATE.md
@.paul/codebase/architecture.md
@.paul/codebase/db_schema.md
@.paul/codebase/impact_map.md
@.paul/codebase/quality_risks.md
@.paul/codebase/tooling_status.md
## Source Files
@wp-content/themes/betheme/header.php
@wp-content/themes/betheme/header-shop.php
@wp-content/themes/betheme/woocommerce.php
@wp-content/themes/betheme/single-template.php
@wp-content/plugins/inpost-pay/src/hooks/front/FrontWidgetV2.php
</context>
<clarifications>
- No clarifications needed.
</clarifications>
<impact_scan>
## Quality Radar
**Status:** degraded
**Tools:** `codebase-memory-mcp` probowal zaindeksowac repo, ale timeoutowal po 120s; `jscpd` i `ast-grep` sa wylaczone przez `.paul/config.md`; uzyto zawezonych skanow `rg` i bezposredniego odczytu plikow.
## Affected Areas
- Motyw Betheme / frontend WooCommerce - `wp-content/themes/betheme/header-shop.php`, `wp-content/themes/betheme/woocommerce.php`, `wp-content/themes/betheme/single-template.php`.
- Integracja InPost Pay - `wp-content/plugins/inpost-pay/src/hooks/front/FrontWidgetV2.php`, ktory rejestruje skrypt pod `wp_body_open`.
## Duplicate / Hardcoded Risks
- Dwa osobne naglowki frontendowe (`header.php` i `header-shop.php`) wymagaja tej samej kompatybilnosci z hookiem WordPress. Obsluga: Task 1 doda hook do wariantu shop, a Task 2 zweryfikuje wszystkie frontendowe `<body>` w motywie.
- Brak child theme oznacza ryzyko nadpisania zmiany przy aktualizacji Betheme. Deferred: nie tworzymy child theme w tym hotfixie, bo zakres to pilna naprawa widgetu na podstronach.
## Explicit Deferrals
- Nie modyfikujemy pluginu `inpost-pay`; jego uzycie `wp_body_open` jest zgodne z mechanizmem WordPress.
- Nie refaktoryzujemy struktury naglowkow Betheme ani nie tworzymy child theme w tym planie.
</impact_scan>
<acceptance_criteria>
## AC-1: Produkt WooCommerce uruchamia `wp_body_open`
```gherkin
Given strona produktu WooCommerce laduje naglowek `header-shop.php`
When WordPress renderuje znacznik `<body>`
Then `wp_body_open()` jest wywolane bezposrednio po `<body <?php body_class(); ?>>`
```
## AC-2: InPost Pay ma punkt wstrzykniecia na podstronach sklepu
```gherkin
Given plugin `inpost-pay` rejestruje `FrontWidgetV2::add_root_script_after_body_open` na hooku `wp_body_open`
When uzytkownik otwiera produkt z `?showIzi=true`
Then kod `IPPWidgetOptions` moze zostac wstrzykniety tak jak na stronie glownej
```
## AC-3: Zakres zmian pozostaje waski
```gherkin
Given hotfix dotyczy brakujacego hooka w motywie
When zmiana jest wykonana
Then nie sa modyfikowane pluginy, WooCommerce core, konfiguracja bazy ani niepowiazane szablony
```
</acceptance_criteria>
<tasks>
<task type="auto">
<name>Task 1: Dodaj `wp_body_open()` do naglowka shop</name>
<files>wp-content/themes/betheme/header-shop.php</files>
<action>
Dodaj `<?php wp_body_open(); ?>` bezposrednio po linii `<body <?php body_class(); ?>>`, zachowujac analogiczny uklad jak w `wp-content/themes/betheme/header.php`.
</action>
<verify>`rg -n "wp_body_open|<body" wp-content/themes/betheme/header.php wp-content/themes/betheme/header-shop.php`</verify>
<done>AC-1, AC-2</done>
</task>
<task type="auto">
<name>Task 2: Zweryfikuj pozostale frontendowe warianty body</name>
<files>wp-content/themes/betheme/header.php, wp-content/themes/betheme/header-shop.php, wp-content/themes/betheme/template-blank.php, wp-content/themes/betheme/under-construction.php</files>
<action>
Sprawdz wszystkie istotne frontendowe wystapienia `<body` w Betheme. Potwierdz, ze standardowe strony i strony WooCommerce maja `wp_body_open()`. Nie rozszerzaj hotfixu na specjalne tryby `template-blank.php`, `under-construction.php` ani builder/admin, chyba ze sa bezposrednio uzywane przez zglaszana podstrone produktu.
</action>
<verify>`rg -n "<body|wp_body_open" wp-content/themes/betheme -g "*.php"`</verify>
<done>AC-3</done>
</task>
<task type="checkpoint:human-verify" gate="blocking">
<name>Task 3: Manualna weryfikacja widgetu InPost Pay na produkcie</name>
<files>https://krolewskie-miody.pl/produkt/miod-borowkowy-400g/?showIzi=true</files>
<action>
Po wdrozeniu otworz wskazana strone produktu z `?showIzi=true`, sprawdz konsole przegladarki i potwierdz, ze nie wystepuje blad `IPPWidgetOptions is not defined`, a widget InPost Pay dziala na podstronie.
</action>
<verify>Manual browser check on production/staging URL</verify>
<done>AC-2</done>
</task>
</tasks>
<boundaries>
## Do Not Change
- Nie modyfikowac `wp-content/plugins/inpost-pay/`.
- Nie modyfikowac `wp-content/plugins/woocommerce/`.
- Nie zmieniac checkoutu, metod platnosci, metod dostawy ani ustawien bazy.
- Nie cofaj poprzedniej zmiany w `wp-content/themes/betheme/header.php`.
## Scope Limits
- Zakres obejmuje tylko brakujace `wp_body_open()` w sciezce naglowka WooCommerce.
- Child theme jest rekomendowanym kierunkiem na przyszlosc, ale nie jest czescia tego hotfixu.
</boundaries>
<verification>
- [ ] `rg -n "wp_body_open|<body" wp-content/themes/betheme/header.php wp-content/themes/betheme/header-shop.php`
- [ ] `php -l wp-content/themes/betheme/header-shop.php` jezeli `php` jest dostepny w PATH.
- [ ] Manualnie sprawdzic produkt `https://krolewskie-miody.pl/produkt/miod-borowkowy-400g/?showIzi=true`.
- [ ] Quality Radar relevant risks handled or deferred.
</verification>
<success_criteria>
- [ ] All AC pass.
- [ ] `header-shop.php` ma `wp_body_open()` bezposrednio po `<body>`.
- [ ] Nie ma bledu `IPPWidgetOptions is not defined` na wskazanej stronie produktu po wdrozeniu.
- [ ] Docs/radar reports updated when relevant.
</success_criteria>
<output>
SUMMARY.md path: `.paul/plans/20260521-1428-naprawa-wp-body-open-woocommerce/SUMMARY.md`
</output>

View File

@@ -0,0 +1,71 @@
---
plan_id: 20260521-1428-naprawa-wp-body-open-woocommerce
title: Naprawa wp_body_open na podstronach WooCommerce
completed: 2026-05-21T14:43:02+02:00
storage: plan-first
quality_radar: degraded
---
# Summary: Naprawa wp_body_open na podstronach WooCommerce
## Objective
Przywrocic kompatybilnosc `wp_body_open()` dla podstron WooCommerce renderowanych przez shopowy naglowek Betheme, tak aby `inpost-pay` mogl wstrzyknac `IPPWidgetOptions` rowniez na stronach produktu i sklepu.
## What Was Built
| Area | Result |
|------|--------|
| Betheme / WooCommerce header | Dodano `<?php wp_body_open(); ?>` bezposrednio po `<body <?php body_class(); ?>>` w `wp-content/themes/betheme/header-shop.php`. |
| Zakres innych podstron | Potwierdzono, ze standardowe strony uzywaja `header.php`, a WooCommerce uzywa `header-shop.php`; oba glowne frontendowe naglowki maja teraz `wp_body_open()`. |
## Files Modified
- `wp-content/themes/betheme/header-shop.php` - dodany brakujacy hook `wp_body_open()` dla sciezki WooCommerce.
- `.paul/STATE.md` - zamkniecie loopa i zapis stanu po UNIFY.
- `.paul/codebase/impact_map.md` - dopisany impact scan dla InPost Pay i WooCommerce header.
- `.paul/codebase/quality_risks.md` - dopisane ryzyka dotyczace dwoch naglowkow i braku child theme.
- `.paul/codebase/tooling_status.md` - zapis plan scan i post-apply scan.
- `.paul/codebase/radar/codebase-memory-plan.txt` - surowe notatki ze skanu planu.
- `.paul/codebase/radar/codebase-memory-post-apply.txt` - surowe notatki ze skanu po APPLY.
- `.paul/plans/20260521-1428-naprawa-wp-body-open-woocommerce/PLAN.md` - status zmieniony na `applied`.
## Acceptance Criteria Results
| Criterion | Status | Evidence |
|-----------|--------|----------|
| AC-1 | Pass | `wp-content/themes/betheme/header-shop.php` ma `wp_body_open()` bezposrednio po `<body <?php body_class(); ?>>`. |
| AC-2 | Pass for code path; manual runtime check pending after deploy | `inpost-pay` podpina `FrontWidgetV2::add_root_script_after_body_open` do `wp_body_open`, a shopowy naglowek teraz uruchamia hook. Przegladarkowa weryfikacja URL-a produkcyjnego wymaga wdrozenia. |
| AC-3 | Pass | Nie zmieniono pluginu `inpost-pay`, WooCommerce core, checkoutu, platnosci, dostaw ani konfiguracji bazy. |
## Verification Results
| Check | Result | Notes |
|-------|--------|-------|
| `rg -n "wp_body_open|<body" wp-content\themes\betheme\header.php wp-content\themes\betheme\header-shop.php` | Pass | `header.php` i `header-shop.php` maja `wp_body_open()` po `<body>`. |
| `rg -n "<body|wp_body_open" wp-content\themes\betheme -g "*.php"` | Pass | Glowne frontendowe naglowki sa pokryte. Specjalne tryby `template-blank.php`, `under-construction.php` i visual builder pozostaly bez zmian celowo. |
| `php -l wp-content\themes\betheme\header-shop.php` | Pass | `No syntax errors detected in wp-content\themes\betheme\header-shop.php`. |
## Quality Radar Results
**Status:** degraded
- New risks: brak nowych ryzyk runtime poza istniejacym ryzykiem zmian bez child theme.
- Resolved risks: WooCommerce/product pages nie sa juz pominiete przez brak `wp_body_open()` w `header-shop.php`.
- Deferred risks: brak child theme; nie naprawiane w tym hotfixie, bo zakres byl pilna kompatybilnosc InPost Pay.
- Raw outputs: `.paul/codebase/radar/codebase-memory-plan.txt`, `.paul/codebase/radar/codebase-memory-post-apply.txt`.
## Deviations
- `codebase-memory-mcp` nie zakonczyl indeksowania repo w czasie 120s; zastosowano zawężony skan `rg` i bezposredni odczyt plikow.
- Manualna weryfikacja produkcyjnego URL-a nie byla wykonywana lokalnie w tej sesji; pozostaje krokiem po wdrozeniu.
## Key Decisions / Patterns
- `header.php` pokrywa zwykle strony, a `header-shop.php` pokrywa strony WooCommerce; oba musza utrzymywac kompatybilnosc z `wp_body_open()`.
- Specjalne szablony z wlasnym `<body>` nie zostaly zmienione, bo nie obsluguja zglaszanej sciezki produktu.
## Follow-up
- Po wdrozeniu sprawdzic `https://krolewskie-miody.pl/produkt/miod-borowkowy-400g/?showIzi=true` w przegladarce i potwierdzic brak `IPPWidgetOptions is not defined`.
- Przy kolejnej pracy nad motywem rozwazyc child theme, zeby hotfixy Betheme nie byly tracone przy aktualizacji.