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

@@ -4,45 +4,50 @@
Zobacz: `.paul/PROJECT.md`
**Core value:** Klienci mogą przeglądać i kupować miody online.
**Current focus:** Apply naprawy InPost Pay wykonany; czeka manualna weryfikacja frontendu.
**Core value:** Klienci moga przegladac i kupowac miody online.
**Current focus:** Hotfix InPost Pay dla podstron WooCommerce zakonczony w PAUL; pozostaje weryfikacja po wdrozeniu.
## Current Position
Milestone: opcjonalny kontekst legacy, obecnie nieużywany
Phase: plan-first / hotfix kompatybilności motywu
Plan: `20260519-1532-naprawa-inpost-pay-wp-body-open` applied, human verification pending
Status: APPLY automated tasks complete; checkpoint pending
Last activity: 2026-05-19T15:35:26+02:00 - Added `wp_body_open()` to `wp-content/themes/betheme/header.php`
Milestone: opcjonalny kontekst legacy, obecnie nieuzywany
Phase: plan-first / hotfix kompatybilnosci motywu - Complete
Plan: `20260521-1428-naprawa-wp-body-open-woocommerce` complete
Status: Loop complete, ready for next PLAN
Last activity: 2026-05-21T14:43:02+02:00 - Created `.paul/plans/20260521-1428-naprawa-wp-body-open-woocommerce/SUMMARY.md`
Progress:
- Milestone: [----------] 0%
- Phase: [##########] 100%
## Loop Position
Aktywna praca powinna przechodzić przez pętlę:
Current loop state:
```text
PLAN -> APPLY -> UNIFY -> VERIFY
PLAN --> APPLY --> UNIFY
x x x [Loop complete - ready for next PLAN]
```
Current loop state: PLAN complete, APPLY automated tasks complete, VERIFY checkpoint pending before UNIFY.
## Session Continuity
Last session: 2026-05-19T15:35:26+02:00
Stopped at: Blocking human verification checkpoint for InPost Pay frontend
Next action: Verify frontend, then run `$paul-unify .paul/plans/20260519-1532-naprawa-inpost-pay-wp-body-open/PLAN.md` if accepted
Resume file: `.paul/plans/20260519-1532-naprawa-inpost-pay-wp-body-open/PLAN.md`
Last session: 2026-05-21T14:43:02+02:00
Stopped at: Loop complete for `20260521-1428-naprawa-wp-body-open-woocommerce`
Next action: Deploy and verify product URL, or start next plan if needed
Resume file: `.paul/plans/20260521-1428-naprawa-wp-body-open-woocommerce/SUMMARY.md`
## Git State
- Przed inicjalizacją w working tree widoczne były usunięte starsze pliki `.paul/` oraz zmodyfikowany `.vscode/ftp-kr.json`.
- Przed inicjalizacja w working tree widoczne byly usuniete starsze pliki `.paul/` oraz zmodyfikowany `.vscode/ftp-kr.json`.
- Nie odtwarzano `.paul/ROADMAP.md` ani retired codebase map files podczas init.
- Ostatni `git status --short` przed utworzeniem planu nie pokazal zmian.
## Active Decisions
- Domyślnym miejscem planów jest `.paul/plans/`.
- Milestones i roadmaps pozostają opcjonalnym kontekstem legacy.
- Quality Radar jest włączony, ale cięższe narzędzia `jscpd` i `ast-grep` są domyślnie wyłączone.
- Bieżący plan dotyka `wp-content/themes/betheme/header.php`, ponieważ brak `wp_body_open()` blokuje skrypt `IPPWidgetOptions` z `inpost-pay`.
- Domyslnym miejscem planow jest `.paul/plans/`.
- Milestones i roadmaps pozostaja opcjonalnym kontekstem legacy.
- Quality Radar jest wlaczony, ale ciezsze narzedzia `jscpd` i `ast-grep` sa domyslnie wylaczone.
- Poprzedni plan dodal `wp_body_open()` do `wp-content/themes/betheme/header.php`.
- Nowe zgloszenie pokazuje, ze WooCommerce laduje osobny `wp-content/themes/betheme/header-shop.php`, gdzie hook nadal nie istnieje.
## Accumulated Context
@@ -50,22 +55,45 @@ Resume file: `.paul/plans/20260519-1532-naprawa-inpost-pay-wp-body-open/PLAN.md`
Date: 2026-05-19
Documents: `.paul/codebase/`
Quality Radar: degraded - `codebase-memory-mcp` działa i zwrócił architekturę grafu, ale szerokie zapytania timeoutowały; `jscpd` i `ast-grep` są wyłączone przez config.
Quality Radar: degraded - `codebase-memory-mcp` dzialal czesciowo, ale szerokie zapytania timeoutowaly; `jscpd` i `ast-grep` sa wylaczone przez config.
### Plan Created
### Previous Plan Created
Date: 2026-05-19
Plan: `.paul/plans/20260519-1532-naprawa-inpost-pay-wp-body-open/PLAN.md`
Quality Radar: degraded targeted scan - potwierdzono brak `wp_body_open()` w `wp-content/themes/betheme/header.php` i zależność `inpost-pay` od hooka `wp_body_open`.
Quality Radar: degraded targeted scan - potwierdzono brak `wp_body_open()` w `wp-content/themes/betheme/header.php` i zaleznosc `inpost-pay` od hooka `wp_body_open`.
### Apply Executed
### Previous Apply Executed
Date: 2026-05-19
Plan: `.paul/plans/20260519-1532-naprawa-inpost-pay-wp-body-open/PLAN.md`
Changed: `wp-content/themes/betheme/header.php`
Result: dodano `<?php wp_body_open(); ?>` bezpośrednio po `<body <?php body_class(); ?>>`.
Verification: `rg` potwierdził zmianę; `php -l` pominięty, bo `php` nie jest w PATH.
Checkpoint: wymagana manualna weryfikacja frontendu z aktywnym `inpost-pay`.
Result: dodano `<?php wp_body_open(); ?>` bezposrednio po `<body <?php body_class(); ?>>`.
Verification: `rg` potwierdzil zmiane; `php -l` pominiety, bo `php` nie jest w PATH.
Checkpoint result: uzytkownik zglosil, ze strona glowna dziala, ale podstrona produktu nadal ma problem.
### Follow-up Plan Created
Date: 2026-05-21
Plan: `.paul/plans/20260521-1428-naprawa-wp-body-open-woocommerce/PLAN.md`
Quality Radar: degraded targeted scan - MCP timeoutowal, fallback `rg` potwierdzil, ze WooCommerce laduje `header-shop.php`, ktory nie ma `wp_body_open()`.
Planned change: dodac `<?php wp_body_open(); ?>` do `wp-content/themes/betheme/header-shop.php` bezposrednio po `<body <?php body_class(); ?>>`.
### Follow-up Apply Executed
Date: 2026-05-21
Plan: `.paul/plans/20260521-1428-naprawa-wp-body-open-woocommerce/PLAN.md`
Changed: `wp-content/themes/betheme/header-shop.php`
Result: dodano `<?php wp_body_open(); ?>` bezposrednio po `<body <?php body_class(); ?>>`.
Verification: `rg` potwierdzil `wp_body_open()` w `header.php` i `header-shop.php`; `php -l wp-content\themes\betheme\header-shop.php` zwrocil `No syntax errors detected`.
Checkpoint: wymagana manualna weryfikacja wskazanej strony produktu z `?showIzi=true`.
### Follow-up Unify Executed
Date: 2026-05-21
Plan: `.paul/plans/20260521-1428-naprawa-wp-body-open-woocommerce/PLAN.md`
Summary: `.paul/plans/20260521-1428-naprawa-wp-body-open-woocommerce/SUMMARY.md`
Result: petla PAUL zamknieta. Kodowo AC-1 i AC-3 spelnione; AC-2 spelnione dla sciezki hooka, z follow-upem przegladarkowym po wdrozeniu.
## Active Blockers
@@ -73,8 +101,8 @@ Checkpoint: wymagana manualna weryfikacja frontendu z aktywnym `inpost-pay`.
## Pending Actions
- Sprawdź frontend z aktywnym `inpost-pay`: brak `ReferenceError: IPPWidgetOptions is not defined`.
- Jeśli checkpoint przejdzie, uruchom `$paul-unify .paul/plans/20260519-1532-naprawa-inpost-pay-wp-body-open/PLAN.md`.
- Po wdrozeniu sprawdzic frontend z aktywnym `inpost-pay`: brak `ReferenceError: IPPWidgetOptions is not defined` na stronie produktu `https://krolewskie-miody.pl/produkt/miod-borowkowy-400g/?showIzi=true`.
- Przy kolejnej zmianie motywu rozwazyc child theme, zeby hotfixy Betheme nie byly nadpisywane przy aktualizacji.
---
*STATE.md - aktualizowany po istotnych działaniach PAUL*
*STATE.md - aktualizowany po istotnych dzialaniach PAUL*

View File

@@ -0,0 +1,20 @@
# 2026-05-21
## Co zrobiono
- [20260521-1428-naprawa-wp-body-open-woocommerce] Dodano brakujacy `wp_body_open()` do shopowego naglowka Betheme, zeby InPost Pay mogl dzialac na produktach WooCommerce.
- Potwierdzono, ze zwykle strony uzywaja `header.php`, a podstrony WooCommerce uzywaja `header-shop.php`.
- Zweryfikowano skladnie `wp-content/themes/betheme/header-shop.php` przez `php -l`.
- Zamknieto petle PAUL przez `SUMMARY.md`.
## Zmienione pliki
- `wp-content/themes/betheme/header-shop.php`
- `.paul/plans/20260521-1428-naprawa-wp-body-open-woocommerce/PLAN.md`
- `.paul/plans/20260521-1428-naprawa-wp-body-open-woocommerce/SUMMARY.md`
- `.paul/STATE.md`
- `.paul/codebase/impact_map.md`
- `.paul/codebase/quality_risks.md`
- `.paul/codebase/tooling_status.md`
- `.paul/codebase/radar/codebase-memory-plan.txt`
- `.paul/codebase/radar/codebase-memory-post-apply.txt`

View File

@@ -67,3 +67,14 @@
- Kilka pluginów obsługuje InPost, więc zmiana w `ws-inpost-map` może kolidować z gotowymi integracjami.
- Tracking i płatności zależą od poprawnych eventów WooCommerce po checkout.
- Brak dumpa bazy utrudnia potwierdzenie, które pluginy są aktywne w środowisku.
## Plan Scan: InPost Pay `wp_body_open` Na Podstronach WooCommerce
**Data analizy:** 2026-05-21
**Tryb radaru:** `plan`
**Scope:** `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`
- Strona glowna uzywa `wp-content/themes/betheme/header.php`, gdzie poprzednio dodano `<?php wp_body_open(); ?>`.
- Podstrony WooCommerce, w tym produkt, moga uzywac `get_header( 'shop' )`, czyli `wp-content/themes/betheme/header-shop.php`.
- `header-shop.php` ma osobny znacznik `<body <?php body_class(); ?>>` i obecnie nie uruchamia `wp_body_open()`.
- `inpost-pay` podpina skrypt inicjalizacyjny pod `wp_body_open`, wiec brak hooka w wariancie shop blokuje `IPPWidgetOptions` na produktach i stronach sklepu.
- Obszar weryfikacji: strona produktu z `?showIzi=true`, strona sklepu/archiwum, koszyk/checkout jezeli uzywaja wariantu shop.

View File

@@ -52,3 +52,11 @@
- Duplikaty i duże pliki w vendorowych pluginach są oczekiwane i nie powinny automatycznie prowadzić do refaktoryzacji.
- Motywy `twentytwenty*` mogą być nieaktywne; pozostają w repo jako standardowe motywy WordPress.
- Brak pełnej informacji z bazy oznacza, że "zainstalowany" nie znaczy "aktywny".
## Plan Scan: InPost Pay `wp_body_open` Na Podstronach WooCommerce
**Data analizy:** 2026-05-21
- Istnieja dwa frontendowe naglowki Betheme dla normalnych stron i sklepu: `header.php` oraz `header-shop.php`.
- Ryzyko duplikacji poprawki: naprawa tylko w `header.php` nie obejmuje WooCommerce, bo `woocommerce.php` i szablony produktowe moga ladowac `header-shop.php`.
- Ryzyko aktualizacji motywu pozostaje: brak child theme oznacza, ze zmiana w `wp-content/themes/betheme/header-shop.php` moze zostac nadpisana przy aktualizacji Betheme.
- Deferred: nie tworzymy child theme w tym hotfixie, bo celem jest szybkie przywrocenie kompatybilnosci `wp_body_open` dla podstron sklepu.

View File

@@ -0,0 +1,20 @@
Timestamp: 2026-05-21T14:32:06+02:00
Mode: plan
Scope: InPost Pay / wp_body_open / WooCommerce product pages
codebase-memory-mcp:
- list_projects did not include this repository.
- index_repository(mode=fast) for C:\visual-studio-code\krolewskie-miody.pl timed out after 120s.
- Status: degraded.
Fallback targeted scan:
- `rg -n "wp_body_open|<body|body_class|get_header\(|header\.php|woocommerce_before_single_product" wp-content\themes wp-content\plugins\inpost-pay wp-content\plugins\woocommerce -g "*.php"`
- `wp-content/themes/betheme/header.php` has `<body <?php body_class(); ?>>` followed by `<?php wp_body_open(); ?>`.
- `wp-content/themes/betheme/header-shop.php` has `<body <?php body_class(); ?>>` without `wp_body_open()`.
- `wp-content/themes/betheme/woocommerce.php` calls `get_header( 'shop' );`.
- `wp-content/themes/betheme/single-template.php` calls `get_header( 'shop' );` for `single-product` and `shop-archive` templates.
- `wp-content/plugins/inpost-pay/src/hooks/front/FrontWidgetV2.php` registers `add_root_script_after_body_open` on `wp_body_open`.
Conclusion:
- The homepage fix covered `header.php`, but WooCommerce product/shop pages can render through `header-shop.php`.
- Add `wp_body_open()` directly after the `<body>` tag in `header-shop.php`.

View File

@@ -0,0 +1,21 @@
Timestamp: 2026-05-21T14:37:52+02:00
Mode: post-apply
Scope: .paul/plans/20260521-1428-naprawa-wp-body-open-woocommerce/PLAN.md
codebase-memory-mcp:
- Post-apply MCP graph scan not rerun because the plan scan already degraded: repository indexing timed out after 120s.
- Fallback verification used targeted `rg` and `php -l`.
Changed files:
- `wp-content/themes/betheme/header-shop.php`
Verification:
- `rg -n "wp_body_open|<body" wp-content\themes\betheme\header.php wp-content\themes\betheme\header-shop.php`
Result: both `header.php` and `header-shop.php` contain `<body <?php body_class(); ?>>` immediately followed by `<?php wp_body_open(); ?>`.
- `rg -n "<body|wp_body_open" wp-content\themes\betheme -g "*.php"`
Result: standard frontend header and shop header include `wp_body_open()`. Special templates `template-blank.php`, `under-construction.php`, visual builder headers, and demo builder header still have separate `<body>` tags and were intentionally not changed.
- `php -l wp-content\themes\betheme\header-shop.php`
Result: No syntax errors detected.
Checkpoint:
- Manual production/staging verification remains required for `https://krolewskie-miody.pl/produkt/miod-borowkowy-400g/?showIzi=true`.

View File

@@ -51,3 +51,46 @@ Użyj `$paul-plan [work]` dla konkretnej zmiany. Przy planowaniu zawęź radar d
- Verification: `rg` potwierdził `wp_body_open()` bezpośrednio po `<body <?php body_class(); ?>>`.
- PHP lint: skipped, `php` nie jest dostępny w PATH.
- Raw output: `.paul/codebase/radar/codebase-memory-post-apply-20260519-1532-naprawa-inpost-pay-wp-body-open.txt`
## 2026-05-21T14:32:06+02:00 - Plan Scan
**Mode:** `plan`
**Scope:** InPost Pay / `wp_body_open` / WooCommerce product pages
**Tools:**
- `codebase-memory-mcp`: degraded. Repo not present in `list_projects`; `index_repository(mode=fast)` timed out after 120s.
- `jscpd`: disabled by policy (`quality_radar.tools.jscpd: false`).
- `ast-grep`: disabled by policy (`quality_radar.tools.ast_grep: false`).
- Fallback: targeted `rg` scans and direct file reads.
**Commands / checks attempted:**
- MCP `list_projects`
- MCP `index_repository` for `C:\visual-studio-code\krolewskie-miody.pl`
- `rg -n "wp_body_open|<body|body_class|get_header\(|header\.php|woocommerce_before_single_product" wp-content\themes wp-content\plugins\inpost-pay wp-content\plugins\woocommerce -g "*.php"`
- `rg -n 'wp_body_open|IPPWidgetOptions|body_open|showIzi' wp-content\plugins\inpost-pay wp-content\themes\betheme -g '*.php' -g '*.js'`
**Raw output:**
- `.paul/codebase/radar/codebase-memory-plan.txt`
**Next action:**
- Apply planned hotfix in `wp-content/themes/betheme/header-shop.php`.
## 2026-05-21T14:37:52+02:00 - Post-Apply Scan
**Mode:** `post-apply`
**Scope:** `.paul/plans/20260521-1428-naprawa-wp-body-open-woocommerce/PLAN.md`
**Tools:**
- `codebase-memory-mcp`: degraded. Full graph scan not rerun because repository indexing timed out during plan scan.
- `jscpd`: disabled by policy (`quality_radar.tools.jscpd: false`).
- `ast-grep`: disabled by policy (`quality_radar.tools.ast_grep: false`).
- Fallback: targeted `rg` scans and `php -l`.
**Commands / checks attempted:**
- `rg -n "wp_body_open|<body" wp-content\themes\betheme\header.php wp-content\themes\betheme\header-shop.php`
- `rg -n "<body|wp_body_open" wp-content\themes\betheme -g "*.php"`
- `php -l wp-content\themes\betheme\header-shop.php`
**Raw output:**
- `.paul/codebase/radar/codebase-memory-post-apply.txt`
**Next action:**
- Manual browser verification on product URL with `?showIzi=true`.

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.

View File

@@ -34,6 +34,7 @@ if( !empty( get_post_meta(get_the_ID(), 'mfn-post-js', true) ) ) echo get_post_m
</head>
<body <?php body_class(); ?>>
<?php wp_body_open(); ?>
<?php if( mfn_is_blocks() ): ?>