Pomiń system motywów WordPressa. Buduj szablony używając czystego HTML, PHP i CSS. Zero zbędnego kodu. 100% kontroli.
Całkowicie wyłącza aktywny motyw. Nie walczysz ze `style.css` ani nadpisywaniem hooków. Zaczynasz z czystą kartką.
Pisz czysty PHP bezpośrednio w builderze. Logika wykonuje się przed renderowaniem HTML. Pełny dostęp do funkcji WP i WC.
Wbudowany system tłumaczeń inspirowany Polylang. Twórz szablony specyficzne dla języka bez dodatkowych wtyczek.
Buduj własne szablony Produktu, Archiwum, Koszyka i Kasy. Pełna kontrola nad doświadczeniem zakupowym.
Zarządzaj globalnymi snippetami (GTM, Meta Pixel, reset CSS) z precyzyjną kontrolą lokalizacji i priorytetu.
Projektuj własne karty wpisów lub produktów używając zmiennych HTML, a następnie wyświetlaj je gdziekolwiek za pomocą shortcode'u.
Dołącz do deweloperów budujących lżejsze i szybsze strony WordPress.
Pełna dokumentacja techniczna. Rozwiń tylko ten fragment, który akurat Cię interesuje — reszta pozostaje zwinięta.
PURITY zastępuje system motywów WordPressa. Zamiast walczyć
z style.css motywu, przejmujesz pełną kontrolę nad
dokumentem HTML.
/wp-content/plugins/purity/.purity — bez
numeru wersji. Aktualizacje automatyczne rozpoznają wtyczkę po nazwie
katalogu i przestaną działać, jeśli ją zmienisz.
purity/
├── purity.php // punkt wejścia, ładuje moduły
├── includes/
│ ├── post-types.php // typy treści smb_template, smb_snippet
│ ├── meta-boxes.php // edytor: zakładki HTML/PHP/CSS/JS
│ ├── template-loader.php // routing szablonów
│ ├── conditions.php // warunki wyświetlania
│ ├── code-snippets.php // globalne snippety
│ ├── loop-builder.php // shortcode [smb_loop]
│ ├── multilingual.php // system wielojęzyczny
│ ├── seo-head.php // meta SEO, hreflang, llms.txt
│ ├── api-bridge.php // REST API
│ └── toolkit.php // SMTP, WebP, logi, cookies
├── templates/ // canvas.php, custom-page.php
└── plugin-update-checker/ // aktualizacje z GitHuba
PURITY przechwytuje każde żądanie przez filtr template_include
(priorytet 99), rozpoznaje typ strony i szuka pasującego szablonu.
Gdy szablon przejmuje kontrolę, motyw jest całkowicie wyłączany.
Każda sekcja renderuje się w stałej kolejności — to nie jest szczegół kosmetyczny, tylko podstawa działania:
<style>.<script>.function_exists().
<style>, a CSS globalnego snippetu
zawsze przegrywa kaskadę z CSS-em sekcji przy tej samej specyficzności.
Typ szablonu decyduje, gdzie się pojawi. Gdy pasuje kilka szablonów, PURITY bierze najnowszy, który spełnia warunki wyświetlania.
| Typ | Kiedy się renderuje |
|---|---|
header | Na górze każdej strony obsługiwanej przez PURITY |
footer | Na dole każdej strony obsługiwanej przez PURITY |
single_post | Pojedynczy wpis blogowy |
archive | Listy wpisów, archiwa, strona bloga |
404 | Strona „nie znaleziono” |
single_{typ} | Pojedynczy wpis własnego typu treści |
Wzorzec single_{typ} jest dynamiczny — każdy publiczny,
własny typ treści zarejestrowany na stronie pojawi się automatycznie
na liście wyboru.
Ten sam typ szablonu może mieć kilka wariantów rozdzielonych warunkami: język, konkretne identyfikatory stron albo rodzaj strony. Dzięki temu jedna instalacja obsługuje np. osobny nagłówek dla wersji polskiej i angielskiej.
PURITY nie tworzy własnych tabel dla treści — wszystko siedzi
w standardowym post meta. Poniżej klucze używane
w bieżącej wersji.
| Klucz | Zawartość |
|---|---|
_smb_sections | Tablica sekcji {html, php, css, js} — wersja live |
_smb_sections_draft | Wersja robocza tej samej tablicy |
_smb_template_type | Typ szablonu (header, footer, 404…) |
_smb_conditions | Warunki wyświetlania |
_smb_use_builder | 1 = zwykła strona WP przejęta przez builder |
_smb_language | Kod języka treści |
_smb_translation_group | Łączy tłumaczenia tej samej strony |
_smb_seo_description | Ręczny opis meta (nadpisuje automatyczny) |
_smb_html_code | Starszy format: pojedyncza sekcja HTML |
_smb_php_code | Starszy format: pojedyncza sekcja PHP |
_smb_css_code | Starszy format: pojedyncza sekcja CSS |
_smb_js_code | Starszy format: pojedyncza sekcja JS |
_draft. Nowe wdrożenia powinny używać
_smb_sections.
Snippety to globalne fragmenty kodu wykonywane w wybranym miejscu cyklu życia strony — idealne dla Google Tag Managera, Meta Pixela czy globalnego resetu CSS.
| Lokalizacja | Zastosowanie |
|---|---|
init | Logika serwerowa, rejestracja typów treści |
wp_head | Style globalne, tagi weryfikacyjne, skrypty analityczne |
wp_body_open | Kod tuż po otwarciu <body> |
wp_footer | Skrypty, które nie mogą blokować renderowania |
admin_head | Zmiany w panelu administracyjnym |
Snippety mają priorytet i wyłącznik. Każdy jest wykonywany w bloku
try/catch, więc błąd w jednym z nich nie kładzie całej strony.
Zaprojektuj wygląd pojedynczej karty wpisu lub produktu, a następnie wyświetl listę w dowolnym miejscu za pomocą shortcode’u:
[smb_loop] // treść zapętlona według zapytaniaWbudowany system tłumaczeń w stylu Polylang, obsługujący 12 języków — bez dodatkowych wtyczek.
_smb_language oznacza język konkretnej strony._smb_translation_group spina wersje językowe tej samej treści.hreflang, dzięki którym wyszukiwarki rozumieją, że strony
są wersjami językowymi, a nie duplikatami.
Ponieważ PURITY wyłącza motyw, usuwa też wszystkie znaczniki, które
WordPress normalnie umieszcza w sekcji <head>.
Moduł SEO przywraca je i uzupełnia.
robots./llms.txt — indeks treści dla wyszukiwarek opartych na AI.
Własny opis ustawisz kluczem _smb_seo_description. Jeśli go
nie ma, moduł użyje zajawki, a w dalszej kolejności wyciągnie pierwsze
zdania z treści strony.
Jeśli strona korzysta z Yoasta albo Rank Matha, moduł sam ustępuje im pola na stronach spoza PURITY. Można go też wyłączyć całkowicie:
add_filter( 'smb_seo_enabled', '__return_false' );
PURITY udostępnia własne API w przestrzeni purity/v1.
Każde żądanie wymaga nagłówka X-Purity-Token z kluczem
wygenerowanym dla danej strony.
| Endpoint | Działanie |
|---|---|
GET /list | Wszystkie strony, szablony i snippety |
GET /element/{id} | Pobranie kodu elementu |
POST /element/{id} | Zapis kodu (obsługuje wersje robocze) |
POST /create | Utworzenie nowego szablonu lub strony |
GET|POST /media | Biblioteka multimediów |
Poniższe błędy powtarzały się w kolejnych projektach i żadnego nie dało się rozpoznać z samego CSS-u. Warto je sprawdzić zanim coś się zepsuje.
Objaw Sekcja hero jest za wysoka, widać tylko jej górny fragment, a pod nią pojawia się niewyjaśniona pusta przestrzeń.
Przyczyna Kod próbuje skasować padding kontenera motywu parą ujemny margines + dodatni padding. PURITY renderuje bezpośrednio w <body>, więc nie ma czego kasować — realna wysokość rośnie o dołożony padding.
Rozwiązanie Usuń takie pary całkowicie. Wystarczy min-height: 100vh bez marginesów. Poziome wyłamanie na pełną szerokość to osobna, poprawna technika — nie myl jej z kompensacją pionową.
Objaw Między dwiema ciemnymi sekcjami pojawia się jasny pasek, choć każda z osobna wygląda poprawnie.
Przyczyna Tła nie dziedziczą się między sąsiednimi sekcjami. Każdy piksel niepokryty własnym tłem sekcji pokazuje domyślną biel przeglądarki.
Rozwiązanie Ustaw jednolite tło na html, body jako pierwszą regułę globalną. Sekcje z tłem background-attachment: fixed muszą dodatkowo mieć własny background-color.
Objaw Pływający nagłówek pokazuje szew, niedopasowane zaokrąglenie albo kolorowy pasek przy rozwijaniu menu.
Przyczyna Stan zamknięty i otwarty zbudowano jako dwa osobne elementy, każdy z własnym zaokrągleniem i tłem. Najmniejsza różnica staje się widoczna.
Rozwiązanie Jeden kontener na oba stany, overflow: hidden na elemencie zewnętrznym, rozwijanie przez max-height w środku. Chowając panel, łącz max-height: 0 z opacity: 0 — samo zerowanie wysokości potrafi zostawić widoczne krawędzie.
position: sticky potrafi po cichu przestać działaćObjaw Przyklejony nagłówek działa na jednych stronach, a na innych odjeżdża przy przewijaniu — mimo identycznego CSS-u.
Przyczyna sticky psuje dowolny element nadrzędny z overflow innym niż visible albo tworzący kontekst nakładania. Struktura nadrzędna bywa różna na różnych typach stron.
Rozwiązanie Dla nagłówków wybieraj position: fixed — odnosi się do okna przeglądarki i omija cały ten problem.
align-items: center nie gwarantuje wyrównaniaObjaw Logo i przycisk menu w jednym rzędzie wyglądają na przesunięte względem siebie.
Przyczyna Wyśrodkowane zostaje pudełko każdego elementu z osobna. Obrazek w odnośniku dziedziczy interlinię i dostaje niewidoczną nadwyżkę wysokości, której przycisk nie ma.
Rozwiązanie Nadaj obu elementom tę samą jawną wysokość i ustaw line-height: 0 na opakowaniu obrazka.
Kod PHP sekcji wykonuje się po stronie serwera — błąd składni potrafi zatrzymać renderowanie strony. Dlatego każda sekcja ma wersję roboczą: testuj zmiany w wersji roboczej, publikuj dopiero po sprawdzeniu.
Jeśli strona przestała się otwierać, wyłącz wtyczkę przez FTP — zmień
nazwę katalogu purity na dowolną inną. WordPress
automatycznie ją dezaktywuje i wróci do motywu. Treść pozostaje
nienaruszona w bazie danych; po przywróceniu nazwy wszystko wraca.