PURITY to wtyczka, która wyłącza system motywów WordPressa i oddaje Ci cały dokument: HTML, PHP, CSS i JS. Z wbudowanym SEO, wielojęzycznością, API dla agentów AI i zestawem narzędzi, które zastępują kilkanaście wtyczek.
01 Jak to działa
PURITY przechwytuje każde żądanie, zanim WordPress sięgnie po motyw. Zostaje to, co w WordPressie najlepsze: baza, panel, wtyczki i WooCommerce. Dokument HTML piszesz sam, od pierwszego do ostatniego znaku.
Wyniki z audytu websbutler.com z 1 października 2026. Nagłówek, stopka, formularze i każda sekcja tej witryny to zwykły kod zapisany w PURITY.
02 Wszystkie funkcje
Bez wersji „pro” i bez dodatków do dokupienia. Wszystko poniżej jest w tej samej paczce.
Nagłówek, stopka, wpis, archiwum i 404 piszesz w HTML, PHP, CSS i JS. Żadnego generowanego kodu.
Każda sekcja ma osobne pole PHP, CSS, HTML i JS oraz własny zasięg zmiennych.
Jeden typ szablonu, wiele wariantów: według języka, konkretnych stron albo rodzaju strony.
Każdy publiczny typ treści dostaje własny szablon single_{typ}, bez dodatkowej konfiguracji.
Włączasz go osobno dla każdej strony, więc migrujesz witrynę kawałek po kawałku.
Każdy element ma szkic obok wersji publicznej. Testujesz zmianę, zanim zobaczą ją odwiedzający.
Czerwona kropka przy elemencie i licznik w menu pokazują, co czeka na publikację.
Jedno kliknięcie kopiuje stronę, szablon albo snippet ze wszystkimi sekcjami i ustawieniami.
Projektujesz kartę wpisu albo produktu i wyświetlasz listę shortcode’em [smb_loop].
Kod wykonywany w wybranym miejscu: init, wp_head, wp_body_open, wp_footer albo admin_head.
Ustalasz kolejność snippetów i wyłączasz każdy z osobna, bez kasowania kodu.
Każdy snippet działa w bloku try/catch, więc pomyłka w jednym nie zatrzymuje całej witryny.
Pełny dostęp do funkcji WordPressa i WooCommerce wprost w sekcji. Logika wykonuje się przed renderowaniem HTML.
Własny wygląd produktu, archiwum, koszyka i kasy. Sklep wygląda jak Twoja marka, nie jak motyw.
Lista produktów, zmiana ceny i dane sprzedaży dostępne dla zewnętrznych narzędzi.
Właściciel sklepu widzi zamówienia i zmienia ich status w panelu WebsButler, bez logowania do WordPressa.
Własny tytuł SEO i opis dla każdej strony. Gdy opisu brak, PURITY bierze zajawkę albo pierwsze zdania treści.
Canonical na każdej stronie oraz noindex tam, gdzie strona nie powinna trafić do wyników.
Tytuł, opis i obraz podglądu przy udostępnianiu linku. Obraz ustawiasz ręcznie albo wybiera się sam.
Budowany automatycznie z grup tłumaczeń, żeby wyszukiwarki nie brały wersji językowych za duplikaty.
/sitemap.xml generowana przez PURITY, bez wewnętrznych typów treści. Zastępuje mapę WordPressa.
Adresy map po Yoaście i Rank Math prowadzą do nowej, a robots.txt wskazuje właściwy plik.
/llms.txt: spis treści witryny dla wyszukiwarek i asystentów opartych na AI.
Jeśli masz Yoasta albo Rank Math, PURITY odczytuje ich pola i ustępuje im na stronach spoza buildera.
Wbudowany system tłumaczeń w stylu Polylanga. Bez dodatkowej wtyczki i bez abonamentu.
Wersje językowe tej samej strony są ze sobą powiązane, więc przełącznik zawsze trafia we właściwe miejsce.
Osobne szablony dla każdej wersji językowej, wybierane warunkami wyświetlania.
Gotowy mechanizm, który sam znajduje odpowiednik bieżącej strony w innym języku.
Jedno żądanie tworzy kopię strony w nowym języku i łączy ją z oryginałem.
Wgrywane obrazy zamieniają się na WebP, więc strona waży mniej bez Twojej pracy.
Wyłącza zbędne rozmiary miniatur, które WordPress tworzy dla każdego zdjęcia.
Logo i ikony w formacie wektorowym prosto do biblioteki mediów.
Poczta ze strony wychodzi przez prawdziwy serwer pocztowy. Wiadomość testową wysyłasz jednym przyciskiem.
Tryby zgody, własne teksty w każdym języku i własne kolory. Bez zewnętrznej usługi.
Google Analytics 4, Microsoft Clarity i Meta Pixel włączają się dopiero wtedy, gdy odwiedzający się zgodzi.
Wbudowany dziennik wejść: miasto, kraj i strona, na którą trafił odwiedzający. Dane starsze niż 90 dni kasują się same.
Przycisk „Zaloguj się kontem Google” dla użytkowników witryny.
Limit rewizji wpisów, wyłączenie e-maili o aktualizacjach i podgląd zajętości serwera.
purity/v1Lista elementów, odczyt i zapis kodu, tworzenie stron, media, produkty, statystyki i SEO.
Każda instalacja ma własny klucz dostępu, niezależny od innych witryn.
Zewnętrzne narzędzie zapisuje wersję roboczą, a Ty decydujesz, kiedy ją opublikować.
Agent AI czyta kod strony, wprowadza zmianę i publikuje ją przez API. Tę stronę zbudowałem właśnie tak.
Panel klienta podpisuje każde żądanie kluczem ECDSA P-256. Witryna sprawdza podpis kluczem publicznym.
Z panelu klienta wchodzisz do WordPressa bez wpisywania hasła.
Nowe wersje wtyczki instalują się z poziomu WordPressa, jak każda inna aktualizacja.
03 Mniej wtyczek
Typowa strona na WordPressie to motyw, builder i kilkanaście wtyczek, z których każda dokłada własne skrypty, własne aktualizacje i własne luki. PURITY robi te same rzeczy w jednym miejscu.
04 SEO i API
Wyłączenie motywu usuwa też wszystko, co WordPress wstawia do sekcji head. Moduł SEO oddaje te znaczniki w uporządkowanej formie, a API pozwala narzędziom czytać i zapisywać kod strony.
<title>PURITY: WordPress bez motywu, w czystym kodzie</title><meta name="description" content="Wtyczka, która wyłącza motyw i oddaje Ci dokument…"><link rel="canonical" href="https://websbutler.com/purity-by-websbutler/"><meta name="robots" content="index, follow"><link rel="alternate" hreflang="pl" href="https://websbutler.com/purity-by-websbutler/"><meta property="og:title" content="PURITY by WebsButler"><meta property="og:image" content="https://websbutler.com/…/purity.webp"><meta name="twitter:card" content="summary_large_image">
# agent AI albo Twój skrypt, przez REST APIGET /wp-json/purity/v1/list→ 54 elementy: strony, szablony, snippetyGET /wp-json/purity/v1/element/626→ sekcje: html, php, css, jsPOST /wp-json/purity/v1/element/626?is_draft=true→ "Draft saved securely."POST /wp-json/purity/v1/element/626→ "Element updated live."POST /wp-json/purity/v1/seo→ tytuł i opis zapisane
Strony websbutler.com buduję razem z Claude: agent pobiera kod sekcji przez API, wprowadza zmianę, zapisuje wersję roboczą, a po sprawdzeniu publikuje. Opisy meta, tytuły i dane strukturalne ustawia tym samym kanałem.
05 Dokumentacja
Pełna dokumentacja techniczna. Rozwiń tylko ten fragment, który Cię interesuje.
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 |
GET|POST /seo | Tytuły SEO, opisy meta i obraz podglądu |
POST /translate/{id} | Kopia elementu w innym języku |
POST /link | Powiązanie istniejących wersji językowych |
GET /products, GET /stats | Produkty i sprzedaż WooCommerce |
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.
06 Pytania i odpowiedzi
Masz inne pytanie? Napisz, odpowiem osobiście, zwykle w ciągu godziny.
Zadaj pytanieTak. Wtyczkę pobierasz bezpłatnie i instalujesz jak każdą inną. Nie ma wersji „pro” ani płatnych dodatków.
Dla osób, które wolą pisać kod niż przeciągać klocki: programistów, agencji i zespołów pracujących z agentami AI. Jeśli nie chcesz dotykać kodu, lepszym wyborem będzie strona, którą buduję na PURITY za Ciebie.
Nie. Samo HTML i CSS wystarczą, żeby zbudować stronę. PHP przydaje się tam, gdzie treść ma pochodzić z WordPressa: tytuły wpisów, pola własne, produkty sklepu.
Motyw przestaje być używany na stronach obsługiwanych przez PURITY, ale nie musisz go usuwać. Wtyczki, baza danych i panel WordPressa działają dalej. Builder włączasz osobno dla każdej strony, więc reszta serwisu zostaje na starym rozwiązaniu, dopóki jej nie przeniesiesz.
Kopiujesz wyrenderowany HTML z przeglądarki do pola HTML sekcji, style do pola CSS, skrypty do pola JS i usuwasz shortcode’y starego buildera. Migrujesz stronę po stronie, porównując obie wersje.
Zmiany testujesz w wersji roboczej, zanim je opublikujesz. Gdyby strona mimo to przestała się otwierać, zmieniasz przez FTP nazwę katalogu wtyczki: WordPress ją wyłączy i wróci do motywu, a treść zostanie nienaruszona w bazie.
Tak. Możesz zbudować własne szablony produktu, archiwum, koszyka i kasy, a przez API odczytywać produkty, zmieniać ceny i pobierać dane sprzedaży.
07 Kontakt
PURITY to narzędzie, na którym buduję strony i sklepy dla klientów. Napisz, czego potrzebujesz, a odpowiem osobiście.
Chcesz najpierw zobaczyć efekt? Case study to strony zbudowane na PURITY, a darmowy audyt pokaże, ile może zyskać Twoja.