Blog

Przestań przebudowywać każdą stronę WordPress

Praktyczny przewodnik, który krok po kroku odpowiada na zastrzeżenia dotyczące standaryzacji witryn WordPress z użyciem theme.json i wzorców bloków—bez tworzenia każdej witryny klienta według tego samego szablonu.

Podsumowanie

Większość agencji buduje każdą stronę WordPress od pustego motywu, nawet gdy wspólny fundament mógłby skrócić harmonogram o tygodnie. Ten artykuł argumentuje, że theme.json, wzorce bloków i bloki dynamiczne pozwalają ustandaryzować warstwę strukturalną, zachowując jednocześnie charakterystyczny design każdego klienta. Odnosi się bezpośrednio do pięciu zastrzeżeń, które powstrzymują zespoły przed zmianą: „mamy różnych klientów”, „bloki niestandardowe są drogie”, „edytor jest mylący”, „stracimy nasze haki i filtry” oraz „FSE nie jest gotowe na produkcję”. Każde zastrzeżenie otrzymuje praktyczną kontrargumentację i konkretny wzorzec, który można wdrażać stopniowo. Efekt to powtarzalny proces budowy, który wciąż szanuje indywidualne projekty tam, gdzie to właściwe. Ostrzeżenie: nie obiecujemy żadnych przycisków resetowania jednym kliknięciem.

Ile z witryn Twoich klientów dzieli choć jedną linię kodu? Nie chodzi o linię z prawami autorskimi—chodzi o faktyczny kod. Jeśli odpowiedź brzmi „prawie żadna”, już odczułeś ból: ta sama sekcja hero przebudowana po raz dziewiąty, ten sam markup siatki zespołu kopiowany z projektu do projektu, te same poprawki preprocesingu sprawdzane w pół tuzinie motywów. Słyszałeś też obronę: „Każdy klient ma inne potrzeby”. Prawda. Ale wniosek, który wszyscy wyciągają—że każda witryna potrzebuje indywidualnego fundamentu—jest fałszywy. Ekosystem WordPress daje teraz sposób na ustandaryzowanie elementów strukturalnych bez standaryzowania designu: theme.json dla tokenów projektowych, wzorce bloków dla powtarzalnych układów i bloki dynamiczne dla kilku funkcji, które wymagają prawdziwej logiki serwerowej. Ten artykuł dotyczy zastrzeżeń, które powstrzymują agencje przed tym krokiem, oraz tego, co naprawdę działa, gdy się im przeciwstawisz.

Zastrzeżenie „ale każdy klient jest inny”

Podstawowa zasada: standaryzuj fundament, nie powierzchnię. Powód, aby trzymać strukturę we wspólnej bibliotece, to właśnie pozostawienie wolnej warstwy wizualnej. Plik theme.json to nie design—to zbiór tokenów projektowych. Kolory, odstępy i typografia to wartości, nie markup. To kluczowa zmiana: możesz współdzielić markup, podczas gdy theme.json dla każdej witryny sprawia, że wygląda ona zupełnie inaczej dla innej marki.

Weź dwóch klientów: kancelarię prawną i sprzedawcę outdoorowy. Ich języki projektowe są oddalone o mile. Ale oboje potrzebują sekcji hero, siatki opinii, pasa call-to-action. Zamiast przebudowywać markup dla każdego, utrzymuj trzy wzorce bloków i pozwól, aby theme.json każdego klienta definiował kolory, czcionki i odstępy. Struktura pozostaje identyczna; tokeny projektowe przekształcają ją z jednej marki w drugą. Gdy sprzedawca zmieni swoją paletę kolorów w przyszłym roku, edytujesz jeden plik na ich stronie—nie markup w sześciu szablonach.

Praktycznie oznacza to, że Twój zespół tworzy wzorce jako kod, rejestruje je we wspólnej wtyczce i pozwala, aby theme.json na każdej stronie klienta zajmował się malowaniem. Nazwy klas wzorca stają się Twoją architekturą; wartości stają się zmiennymi. Możesz nawet pójść dalej i rozszerzyć theme.json o niestandardowe ustawienia dla typów treści lub wyjścia wtyczek, ale w pewnym momencie budujesz interfejs konfiguracyjny zamiast witryny—to pułapka omówiona w naszym spojrzeniu na rozszerzanie theme.json. Utrzymuj wspólną warstwę szczupłą: powinna zawierać tylko to, co powtarza się u klientów. W chwili, gdy przyłapiesz się na dodawaniu ustawienia „na wszelki wypadek, gdyby ktoś kiedyś chciał”, stworzyłeś abstrakcję, która będzie kosztować więcej utrzymania, niż oszczędza.

Kiedy konfigurujesz nowego klienta, pierwsze trzydzieści minut powinno wyglądać tak: sklonuj wtyczkę ze wspólnymi wzorcami, utwórz nowy theme.json z paletą i skalą czcionek klienta oraz zarejestruj jego logo i stopkę. To nie jest niestandardowa budowa; to zadanie konfiguracyjne. Pozostała praca specyficzna dla klienta idzie w treść, strukturę i wszelkie naprawdę indywidualne funkcje. To różnica między budowaniem każdego domu od zera a posiadaniem zestawu prefabrykowanych planów pięter, które można przemalować i ponownie wytapetować. Analogia jest luźna, ale zasada się trzyma: im więcej przenosisz do wartości theme.json, tym mniej musisz dotykać markupu.

Jednym z najprostszych zwycięstw jest przyjrzenie się, jak działają wzorce bloków. Wzorzec to po prostu zbiór bloków z predefiniowaną treścią i stylami. Możesz zapisać dowolną konfigurację bloku jako wzorzec, a następnie klient może go wstawić bez wiedzy o tym, jak jest zbudowany. Oznacza to, że wzorzec staje się „punktem wejścia” dla nietechnicznych użytkowników. Gdy Twój zespół utrzymuje podstawowy wzorzec w kodzie, klient otrzymuje spójną bibliotekę bez dotykania ani jednego znacznika PHP.

Teraz zastrzeżenie, do którego wracam: nie nadmiernie centralizuj. Theme.json z ustawieniem dla każdego możliwego niuansu to bagno utrzymaniowe. Wspólne wzorce powinny być stanowcze, a nie wszechmocne. Jeśli klient potrzebuje radykalnie innego układu—powiedzmy, strony głównej magazynu z dużą siatką wyróżnionych—może nie pasować do Twojej standardowej biblioteki wzorców. To w porządku. Standaryzacja oznacza, że wygrywasz na 80% projektów, które są podobne, a nie że zmuszasz każdą witrynę do tego samego wzorca.

Zastrzeżenie „bloki niestandardowe rozsadzają budżet”

Oto kontr-zasada, która brzmi nudno, ale oszczędza pieniądze: większość rzeczy, o których myślisz, że potrzebują niestandardowego bloku, nie potrzebuje. Podstawowe bloki plus wzorzec mogą pokryć zdecydowaną większość układów. Niestandardowy blok to ostateczność, a nie pierwsza intencja.

Klasycznym przykładem jest siatka zespołu. Jeśli to jednorazowe, użyj podstawowych bloków „kolumny” i „grupa” i pozwól klientowi wrzucić awatar ręcznie. Jeśli trzech klientów poprosi o tę samą siatkę z tą samą strukturą „linki społecznościowe pod nazwiskiem”, masz teraz kandydata na wzorzec bloku. Gdy wzorzec zaczyna zbierać nowe opcje—efekty najechania, sortowanie, gwiazdki ocen—wzorzec staje się niezarządzalnym workiem, a wtedy czas napisać niestandardowy blok. Błędem uderzającym w budżet jest przeskoczenie od razu do niestandardowego bloku przy pierwszym żądaniu.

Bardziej podstępny scenariusz: klient prosi o „karuzelę studium przypadku”. Pierwszy instynkt: „Potrzebuję bloku karuzeli”. Ale czy potrzebuje karuzeli? Może potrzebuje poziomo przewijanej grupy postów, którą podstawowe bloki obsłużą za pomocą bloku „grupa” i odrobiny CSS. Albo może potrzebuje dynamicznej listy najnowszych studium przypadków, która jest dynamicznym blokiem zapytującym o CPT. Pytanie nie brzmi „jakiej funkcji chce klient?”, ale „od jakich danych zależy?”. Jeśli dane są statyczne i edytowalne przez klienta, wystarczy wzorzec. Jeśli dane pochodzą z zapytania do bazy danych, blok dynamiczny jest uzasadniony. Jeśli dane mają być aktualizowane w czasie rzeczywistym z API, możesz potrzebować integracji REST API—to wykracza poza inny rodzaj budowy.

Kiedy już budujesz blok, block.json jest Twoim przyjacielem. To jedyne źródło prawdy dla atrybutów, skryptów i stylów, co czyni blok przenośnym między projektami. Pozwala również czysto deklarować zależności i tłumaczenia, co jest niezbędne, gdy dystrybuujesz bibliotekę na wielu stronach klientów. Dla treści zależnych od danych na żywo, blok dynamiczny renderuje się po stronie serwera, więc nie musisz wysyłać pakietu JavaScript przy każdym odsłonie strony. A jeśli Twój blok ewoluuje, możesz z wdziękiem obsługiwać przestarzałe wersje, aby istniejąca treść się nie zepsuła—nasz przewodnik po deprecjacji bloków opisuje dokładny wzorzec.

Zanim cokolwiek zbudujesz, przepuść decyzję przez tę siatkę:

PodejścieNajlepsze dlaUnikaj, gdy
Podstawowy blokJednorazowa treść, proste stronyUkład powtarza się u wielu klientów i potrzebuje rozbudowanych opcji
Wzorzec blokuPowtarzalne układy bez logikiUkład potrzebuje warunków, danych dynamicznych lub złożonych interakcji
Niestandardowy blokPowtarzające się, oparte na danych lub bardzo specyficzne zachowanieJedynym powodem jest jednorazowa sekcja, którą można obsłużyć klasą

Pomyślisz też o nazewnictwie bloków od pierwszego dnia. Nazwa bloku to w zasadzie umowa z Twoją treścią. Jeśli nazwiesz go wagent/team-grid, a później zmienisz na wagent/team-carousel, zepsujesz istniejącą treść, chyba że zapewnisz ścieżkę deprecjacji. Wybierz ogólne, oparte na przeznaczeniu nazwy, które nie staną się fałszywą reklamą w miarę ewolucji bloku. To odmiana dyscypliny nazewniczej, której wszyscy nauczyliśmy się z prefiksów wtyczek, i odnosi się w równym stopniu do nazw bloków.

Kontrowersyjna teza, którą mogę powiedzieć, jest najbardziej użyteczna: niestandardowy blok zbudowany, ponieważ klient poprosił o „tylko jeden element”, jest prawie zawsze błędem. Grzecznie odmów, dostarcz podstawowy blok z klasą i oszczędź godziny. Zyskasz większy szacunek klienta—i mniejszą pozycję w budżecie na utrzymanie.

Zastrzeżenie „klienci zepsują edytor”

To zastrzeżenie jest w połowie słuszne. Sam edytor blokowy nie jest problemem; problemem jest dawanie klientom zbyt dużej swobody. theme.json może ograniczyć to, co jest edytowalne: wyłącz edytor szablonów, ogranicz dozwolone bloki i ustaw domyślne style, aby nieodpowiednio umieszczona kolumna wyrządzała mniejsze szkody. Niektórzy klienci i tak zdołają coś zepsuć, ale możesz przywrócić stronę do zapisanego wzorca jednym kliknięciem—czego klasyczny edytor nie mógł zaoferować.

Narysuję scenariusz. Klient dzwoni i mówi: „Przesunąłem sekcję i teraz cała strona wygląda źle”. W klasycznym motywie zalogowałbyś się, sprawdził CSS i prawdopodobnie spędził godzinę na naprawianiu układu. Przy konfiguracji blokowej możesz otworzyć stronę, zaznaczyć obszar treści i zresetować go do zapisanego wzorca. Wzorzec jest punktem odniesienia; zmiany klienta są nakładką. Gdy nakładka się zepsuje, usuwasz ją. To nie tylko lepszy przepływ pracy; to fundamentalnie bardziej wybaczający edytor.

Teraz niuans: większość klientów nie chce w ogóle wiele edytować. Chcą zmienić tekst, wymienić zdjęcia, a może zmienić kolejność sekcji. Wzorzec bloku daje dokładnie to bez odsłaniania całej struktury witryny. W tym sensie edytor nie jest zabawką; to wizjer. Twoim zadaniem jest skalibrować, co klienci mogą zobaczyć. Oznacza to, że możesz wyłączyć ustawienia „Szablony”, ograniczyć wstawianie bloków do wyselekcjonowanej listy, a nawet wstępnie wypełnić puste wzorce treścią zastępczą. Edytor staje się formularzem wprowadzania treści, a nie płótnem do projektowania stron.

Jeśli chodzi o dostępność, zarządzanie fokusem i obsługa klawiatury w edytorze blokowym są ogólnie lepsze niż w polach szablonu klasycznego edytora. Ale nadal musisz zapewnić, że wzorce mają odpowiednią hierarchię nagłówków i dostępne nazwy. Ponieważ wzorzec jest współdzielony między klientami, naprawiasz te problemy tylko raz, co jest kolejną ukrytą korzyścią standaryzacji.

Naprawdę trudną częścią jest strona wewnętrzna. Dla Twojego zespołu nauka prototypowania z blokami wymaga oduczenia się nawyku „rób to w PHP”. To realny koszt, ale to koszt jednorazowy na osobę. To nie powód, aby unikać podejścia; to powód, aby zacząć od jednej biblioteki wzorców i jednego wyrozumiałego klienta, zanim wdrożysz to wszędzie. Nie pozwól, aby refren „moi klienci nie poradzą sobie z blokami” ukrywał fakt, że jeszcze nie skonfigurowałeś ustawień blokowych, aby wyjść im naprzeciw.

Zastrzeżenie „mamy już haki i filtry”

Zasada tutaj jest taka: nie wyrzucasz haków; dodajesz warstwę na wierzch. Bloki są granicą prezentacji; haki to wciąż sposób na wstrzykiwanie logiki. Funkcja renderowania dynamicznego bloku działa w PHP, co oznacza, że możesz wywołać te same funkcje i zastosować te same filtry, którym już ufasz.

Wyobraź sobie wtyczkę, która pozwala dodać pole „polecany produkt” do dowolnego postu za pomocą filtra. Dzięki blokowi dynamicznemu możesz dołączyć blok renderowany po stronie serwera, który uruchamia ten filtr i wypisuje wynik wewnątrz opakowania bloku. Klient wstawia blok; istniejąca logika PHP wykonuje ciężką pracę. Nic nie jest wyrzucane. Dla jeszcze bardziej konkretnego przykładu rozważ niestandardowy blok, który wyświetla najnowsze posty projektów. W funkcji renderowania wywołujesz get_posts(), a następnie w pętli stosujesz the_title() i the_permalink()—te same tagi szablonu, których używasz od lat.

To także miejsce, aby być szczerym co do tego, co się nie przekłada. Niektóre sprytne stare motywy używają template-parts ze zawiłymi warunkami, które przyjmują argumenty zależne od kontekstu strony. Odtworzenie tego jako bloku może być bałaganem. Ale nie musisz odtwarzać wszystkiego naraz. Ścieżka przyrostowa polega na zachowaniu logiki PHP, opakowaniu jej w dynamiczny blok i przeniesieniu markupu do szablonu bloku. Często okaże się, że istniejące wzorce filtrów poradzą sobie z nowymi danymi wyjściowymi. A jeśli logika jest ściśle związana z hierarchią szablonów (np. „na stronach wyników wyszukiwania pokaż to inaczej”), nadal możesz używać klasycznego szablonu dla tych konkretnych widoków, a bloków dla zwykłych stron.

REST API otwiera również inne drzwi: możesz budować bloki, które pobierają dane z innych witryn WordPress lub usług stron trzecich. Dynamiczny blok może wywołać wp_remote_get(), aby pobrać JSON i wyrenderować go po stronie frontendu. To potężny wzorzec dla agencji, w których klienci chcą pokazywać kanały społecznościowe, listy produktów lub dane wewnętrzne bez zarządzania osobną integracją. Trade-off to buforowanie i obsługa błędów—jeśli zdalne API jest wolne, Twoja strona jest wolna. Trzymaj bloki oparte na API z dala od krytycznych treści ponad zakładką, albo użyj renderowania po stronie klienta z odpowiednim stanem ładowania.

Akcje i filtry nadal działają wokół zapisywania i renderowania; architektura haków nie znika, gdy adoptujesz bloki, tylko przenosi się do nowego kontekstu. Jeśli potrzebujesz odświeżyć zrozumienie, gdzie akcje i filtry spotykają się z tym nowym światem bloków, nasze pogłębione spojrzenie na haki jest przydatnym przypomnieniem.

Zastrzeżenie „FSE nie jest gotowe na produkcję”

Słusznie, ale zapytaj, co naprawdę oznacza „ryzykowne”. Pełne edytowanie witryny przeszło już kilka wydań, a theme.json ustabilizował się w stabilnym schemacie. Ryzyko nie polega na tym, że edytor „nagle się psuje”—ryzyko polega na tym, że niestandardowy kod Twojego zespołu może opierać się na starych szablonach PHP, które niezgrabnie współistnieją z szablonami blokowymi. Ponadto niektóre wtyczki innych firm nadal zakładają klasyczny edytor lub customizer. To decyzja o kompatybilności, a nie powód, aby wyrzucić cały model.

Użyteczny sposób myślenia: proste, powtarzalne witryny z treścią zapisaną w blokach są najmniej ryzykowne. Klienci wysokiego ryzyka to ci z głęboko spersonalizowanymi klasycznymi motywami lub autorskimi wtyczkami, które renderują własny frontend. To uzasadniony powód, aby zostać przy klasycznych motywach dla tej małej niszy. Błędem jest udawanie, że „gotowość produkcyjna” to pojedynczy przełącznik, który jest włączony lub wyłączony.

Zanim zaproponujesz klientowi motyw blokowy, przejrzyj szybką listę kontrolną:

  • Czy klient ma mocno spersonalizowany motyw, który wymagałby migracji?
  • Czy niezbędne wtyczki obsługują Edytor witryny i REST API?
  • Czy środowisko hostingowe pozwala na dostęp do plików, którego oczekuje motyw blokowy?
  • Czy zarezerwowałeś czas na projektowanie wzorców, a nie tylko rejestrację bloków?
  • Czy zespół klienta toleruje zmiany w edytorze, czy potrzebuje zablokowanego szablonu?

Jeśli którakolwiek odpowiedź brzmi nie, dostosuj zakres lub użyj podejścia hybrydowego. To nie kompromis; to osąd inżynierski. A jeśli budujesz hybrydę, pamiętaj o historii o hakach i filtrach powyżej—nadal możesz opakować starą logikę w dynamiczne bloki, podczas gdy theme.json zajmuje się globalnym wyglądem.

Wersjonowanie theme.json to nie tylko teoretyczna kwestia. Widziałem, jak niestandardowa biblioteka bloków agencji się psuje, gdy klient zaktualizował WordPressa, a plik style bloku zarejestrowany przez wp_register_style() zmienił uchwyt. Naprawa była łatwa, ale panika prawdziwa. Prosty proces testowy—uruchom aktualizację na kopii stagingowej witryny, kliknij przez kluczowe strony, a następnie opublikuj—rozwiązuje większość tych niespodzianek.

Zastrzeżenie, którego jeszcze sobie nie postawiłeś

Oto meta-zastrzeżenie, które powstrzymuje agencje przed standaryzacją: „To duża zmiana, a nie ma czasu na jej wprowadzenie podczas pracy z klientem”. To prawda—więc nie rób tego podczas pracy z klientem. Wybierz wewnętrzny projekt lub małego klienta i zbuduj jedną bibliotekę wzorców. Użyj theme.json jako systemu tokenów projektowych. Dodaj niestandardowy blok tylko wtedy, gdy jest uzasadniony. Opakuj stare haki tam, gdzie pomagają. Iteruj.

Oto mniej więcej pierwsze 30 dni:

  1. Przeanalizuj swoje ostatnie pięć projektów klienckich i wypisz dziesięć najczęściej powtarzanych elementów układu.
  2. Zamień te dziesięć elementów we wzorce bloków, z małym zestawem klas CSS.
  3. Zbuduj wspólną wtyczkę (lub mu-plugin), która rejestruje te wzorce. Jeśli nie myślałeś jeszcze o organizacji wtyczek, najpierw przejrzyj ten przewodnik na temat tworzenia solidnych wtyczek.
  4. Utwórz jeden theme.json, który odpowiada Twojemu bazowemu designowi; dodawaj wartości specyficzne dla klienta w miarę rozpoczynania projektów.
  5. Wybierz jeden mały wewnętrzny projekt lub przyjaznego klienta i zmigruj go na ten stos.
  6. Udokumentuj jedną historię bohatera klienta, który edytował swoją stronę główną bez dzwonienia do Ciebie.

Na koniec tego eksperymentu nie będziesz mieć plakietki „block-first” do powieszenia na ścianie. Będziesz mieć zespół, który może szybko uruchomić nową stronę klienta ze wspólnej bazy bez przepraszania za harmonogram. Będziesz też w lepszej pozycji, aby odmówić prośbie klienta o 42. niestandardowy blok—bo dokładnie wiesz, co potrafią podstawowe bloki, albo bo możesz pokazać, dlaczego dynamiczny blok byłby naprawdę szybszy.

Czy nadal będziesz budować niektóre indywidualne witryny? Tak. Niektórzy klienci zawsze będą potrzebować niestandardowego szablonu, indywidualnej strony lub autorskiej integracji, której nie warto wciskać we wspólny model. Celem nie jest wyeliminowanie pracy szytej na miarę—chodzi o to, by stała się wyjątkiem, a nie domyślną praktyką.

Powtarzalność pochodzi z nudnych części: solidnego schematu theme.json, jasnej biblioteki wzorców i dyscypliny w utrzymaniu szczupłej warstwy współdzielonej. To nie jest ta błyszcząca wersja, którą słyszysz na webinarach. To ta, która pokonuje poniedziałkowy poranny smutek pustego motywu.

Sources (5)