Dostępne w Hamburgu

Programista WordPress w Hamburgu

Hamburg jako centrum mediów i logistyki wymaga solidnych platform cyfrowych. Dostarczamy nowoczesne rozwiązania WordPress dla północnioniemieckiego rynku.

Programista WordPress → Hamburg

Wspieramy społeczność WordPress w Hamburgu

Nie jesteśmy tylko zdalną agencją. Jesteśmy aktywną częścią ekosystemu. Wierzymy w Open Source i wnosimy wkład w społeczność, która napędza ponad 40% sieci (W3Techs).

Kontekst lokalny: Skalowalna architektura, wysoki poziom bezpieczeństwa oraz integracje z systemami enterprise dopasowane do wymagań lokalnego rynku.

Programista WordPress & WooCommerce w Hamburgu

01. Wydajność dla lokalnego SEO

W Hamburgu, gdzie konkurencja jest wysoka, szybkość strony to Twój najważniejszy atut SEO. Nasz stack Astro + Headless WP gwarantuje wyniki, które zostawiają konkurencję w tyle.

02. Bezpieczeństwo poziomu Enterprise

Dla firm w Hamburgu obsługujących sektor Media i logistyka morska, bezpieczeństwo danych jest priorytetem. Architektura Headless wirtualnie eliminuje najczęstsze wektory ataków na WordPressa.

Strona firmowa w Hamburgu stoi obok terminali HHLA przy Altenwerder, redakcji NDR przy Rothenbaumchaussee, biurowców HafenCity i kalendarza, w którym Reeperbahn Festival zamraża wdrożenia tak samo jak embargo redakcyjne przed paśmem Tagesschau. To nie jest powód, żeby WordPress udawał system terminalowy albo CMS wydawniczy klasy Spiegel. To powód, żeby motyw, wtyczki i model treści były napisane tak, jak oczekuje hamburski dział prawny i polski redaktor, który codziennie publikuje po polsku, a panel ma po niemiecku.

WPPoland buduje ten WordPress z polskiego zespołu seniorów dla firm z DACH, które mają siedzibę, oddział albo klientów Hamburgu. Zakres to programowanie WordPress: motyw blokowy albo klasyczny, własne wtyczki, Gutenberg, CPT, ACF albo natywne bloki, integracje REST i przegląd kodu na Git. Sklep WooCommerce i abonament opieki są osobnymi tematami, z linkami na końcu.

#Programowanie WordPress dla firm z DACH, które działają w Hamburgu

Hamburg spina trzy rzeczy, które rzadko spotykają się w jednym mieście w takiej skali. Po pierwsze port i logistykę: Hamburger Hafen und Logistik AG (HHLA) trzyma terminale kontenerowe Altenwerder (CTA), Burchardkai (CTB) i Tollerort (CTT). Wokół nabrzeża siedzą spedytorzy, operatorzy fulfilmentu i dostawcy, których WordPress trzyma kariery, dokumentację partnerską i landingi B2B, a nie tylko wizytówkę. Po drugie media: NDR ma siedzibę w Hamburgu (NDR Media, Rothenbaumchaussee 159), Tagesschau powstaje tu, obok Spiegel, Die Zeit, Bauer Media i reszty klastra w Speicherstadt i przy Rothenbaumchaussee. Po trzecie handel wysyłkowy i eventy: Otto Group ma siedzibę w Hamburgu, nextMedia.Hamburg prowadzi SPACE w Speicherstadt, a Reeperbahn Festival co roku zbiera branżę muzyczną i marketingową w St. Pauli.

Dla strony WordPress te fakty nie oznaczają, że motyw ma liczyć TEU albo synchronizować transmisję na żywo. Oznaczają trzy twardsze wymagania. Treść bywa regulowana (Impressum, TMG, Datenschutzerklärung, embargo redakcyjne). Interfejs dla gościa jest formalny i niemiecki, nawet gdy redaktorzy siedzą w Polsce. Hosting, retencja logów i pytanie o origin w Niemczech są tematem rozmowy, bo obok siedzi ktoś, kto pyta o NIS2, o GoBD albo o slot na terminalu.

Typowy brief, który trafia do seniorów, nie brzmi „zróbcie ładną stronę”. Brzmi: odziedziczony motyw z 40 wtyczkami, redakcja w Polsce, compliance w Hamburgu, Gutenberg używany jak klasyczny edytor, a nowa podstrona pod Reeperbahn Festival powstaje przez kopiowanie strony z zeszłego roku i ręczne podmienianie dat w treści. To jest problem modelu treści i procesu Git, nie problem szablonu z marketplace.

WPPoland nie jest dostawcą HHLA, Spiegel ani Otto Group. Sąsiedztwo portu i redakcji ustawia poprzeczkę dokumentacji, ról i Git. Nie ustawia listy referencji.

#Motyw blokowy, motyw klasyczny i własna wtyczka

Nowa budowa w Hamburgu startuje od decyzji, która później kosztuje miesiącami: czy prezentacja żyje w motywie blokowym z theme.json, czy w klasycznych szablonach PHP, i co idzie do wtyczki. Ta decyzja jest zapisywana przed pierwszym commitem.

#theme.json, wzorce i granica odpowiedzialności motywu

Motyw blokowy trzyma tokeny: paletę, skalę typografii, odstępy, szerokości treści. Dla hamburskiego B2B oznacza to stonowaną paletę korporacyjną, czytelny krój bez ozdobników i przyciski, które nie pękają na niemieckich złożeniach w stylu Hafenlogistik-Lösungen albo Medienpartnerschaft. Wzorce bloków (block patterns) opisują powtarzalne układy: hero z zastrzeżeniem prawnym, siatka osób z działu, blok cytatu z atrybucją, stopka z Impressum. Redaktor składa stronę z wzorców, zamiast prosić programistę o nowy szablon na każde wydarzenie w HafenCity albo na każdą edycję festiwalu.

Pełna edycja witryny (FSE) ma sens, gdy zespół redakcyjny naprawdę ma dostać kontrolę nad nagłówkiem i stopką. W praktyce wiele firm z DACH tej kontroli nie chce: nagłówek jest elementem brandu i compliance, a nie placem zabaw. Wtedy motyw blokowy zostaje, ale szablony części (header, footer) są zablokowane, a redakcja pracuje w obrębie wzorców i własnych bloków. To kompromis, nie półśrodek.

Każdy własny blok dostaje block.json, kategorię, ikonę i atrybuty ze schematem. Tam, gdzie treść ma trafić do wyszukiwarki i do RSS, render idzie po stronie serwera. React w edytorze służy do InspectorControls i podglądu, nie do tego, żeby front był aplikacją SPA udającą WordPressa.

#Kiedy klasyczny motyw PHP zostaje

Odziedziczone instalacje w Hamburgu często mają pięć, siedem lat: child theme na komercyjnym szkielecie, ACF wklejone w page.php, shortcode’y w treściach, jQuery z epoki przed blokami. Przepisanie tego na FSE „bo tak wypada w 2026” jest droższe niż naprawa hierarchii szablonów, wyciągnięcie logiki do wtyczki i dokładanie Gutenberg tylko tam, gdzie redakcja naprawdę składa nowe landingi.

Klasyczny motyw zostaje, gdy:

  • logika warunkowa siedzi w szablonach (inne menu dla partnera portowego, inne dla prasy, inne dla kandydata) i przeniesienie jej do theme.json nic nie upraszcza;
  • zespół redakcyjny publikuje setki stron w klasycznym edytorze i szkolenie z FSE byłoby większym ryzykiem niż dług;
  • child theme jest cienki, a problemem są wtyczki i autoload, nie sam silnik szablonów.

Nawet wtedy nowe klocki idą jako bloki, nie jako kolejne shortcode’y. Shortcode w treści z 2019 roku zostaje do migracji, nowy kod go nie dokłada.

#Funkcja do wtyczki, wygląd do motywu

Granica jest prosta i zapisana w runbooku. Motyw umie pokazać. Wtyczka umie wiedzieć. CPT wydarzeń festiwalowych, kolejka do CRM, endpoint REST dla intranetu, rola użytkownika „redaktor PL” bez capability publish_pages na produkcji niemieckiej: to wtyczka. Kolory, siatka, wzorzec hero: to motyw. Jeśli po zmianie motywu znika kalendarz wydarzeń, architektura była zła.

Własna wtyczka ma własny prefix, autoload PSR-4, plik główny z nagłówkiem Plugin Name i wersją semver, oraz testy tam, gdzie logika liczy (daty wydarzeń, mapowanie pól do CRM, walidacja formularza). Logika biznesowa nie trafia do functions.php motywu, bo functions.php umiera razem z motywem, a hamburski serwis zmienia agencję brandingową częściej niż model treści.

Porównanie warstw, którego używamy przy kickoffie:

WarstwaCo tam żyjePrzykład w Hamburgu
Motywprezentacja, tokeny, wzorcelanding pod Reeperbahn Festival, stopka z Impressum
WtyczkaCPT, role, REST, integracjekatalog wydarzeń, kolejka do CRM, logi audytowe
Gutenbergredakcja bez HTMLwzorzec z zastrzeżeniem, blok osoby z działu
środowisko testowe i Gitproces, nie featuregałąź, review, promocja na produkcję

#Gutenberg, CPT i ACF w modelu treści

Gutenberg bez modelu treści kończy się tym, że każda podstrona jest unikalnym kolażem bloków i nikt nie potrafi zrobić listy. W Hamburgu listy są konkretne: wydarzenia festiwalowe, publikacje, osoby, stanowiska, lokalizacje biur (HafenCity to nie St. Pauli, Speicherstadt to nie Rothenbaumchaussee). To są obiekty, nie „kolejne strony w drzewie”.

#Własne typy treści pod realne obiekty

CPT rejestrujemy z własnymi capabilities, nie z mapowaniem na post. Redaktor w Polsce ma edytować publikację, a nie kasować wtyczek. Archiwum CPT dostaje szablon albo wzorzec zapytań, a pojedynczy obiekt ma szablon, który nie pozwala redaktorowi rozpychać layoutu poza ustalony układ. Taksonomie są osobne: typ wydarzenia (kongres, webinar, festiwal) nie miesza się z tagami bloga.

ACF ma tu miejsce, ale nie jako substytut bloków. Pola ACF na CPT sprawdzają się przy danych, które są polami, nie layoutem: data rozpoczęcia, lokalizacja w HafenCity, język wystąpienia, plik PDF z regulaminem. Layout strony osoby albo artykułu składa Gutenberg. Mieszanie ACF Flexible Content z pełnym edytorem bloków na tym samym obiekcie kończy się dwoma źródłami prawdy i redaktorem, który nie wie, gdzie kliknąć.

Gdzie ACF jest zbędne, atrybuty bloku w block.json wystarczą. Blok „osoba z cytatem” nie potrzebuje grupy pól na każdej stronie. Potrzebuje atrybutów i ewentualnie InnerBlocks na biogram. Mniej wtyczek w panelu to mniej powierzchni ataku i mniej konfliktów z niemieckimi wtyczkami consent i cache.

#Bloki serwerowe zamiast shortcode’ów

Shortcode w treści to dług, który widać dopiero przy migracji. Nowy kod w Hamburgu idzie jako blok z renderem serwerowym: znaczniki semantyczne, atrybuty w komentarzu bloku, możliwość filtrowania wyjścia. Blok listy wydarzeń czyta CPT, cache’uje zapytanie transjentem z jawnym TTL i invalidacją przy save_post, a nie przy każdym request.

Dla redakcji dwujęzycznej każdy ciąg w bloku przechodzi przez funkcje i18n WordPressa. Niemiecki string w kodzie PHP jest wyjątkiem, nie regułą. Tłumaczenia leżą w plikach po, nie w hardcoded tablicy w motywie. Polylang albo WPML dokładamy dopiero gdy naprawdę są dwa (albo trzy) języki na froncie. Sam panel w DE i treści w PL da się ogarnąć rolami i locale użytkownika, bez pełnego stacku wielojęzycznego.

przegląd kodu bloku sprawdza trzy rzeczy, zanim gałąź wpadnie do main: czy blok działa po wyłączeniu JS w podglądzie frontu, czy atrybuty mają typy i defaulty, czy nie ładuje całego builda edytora na froncie. Gutenberg, który dokłada megabajt Reacta do strony osoby z zarządu, nie przejdzie review.

Landing pod Reeperbahn Festival albo pod wydarzenie w SPACE (Speicherstadt) nie powstaje jako kopia strony z zeszłego roku. Powstaje jako obiekt CPT z datą, lokalizacją, językiem i wzorcem. Po festiwalu obiekt zostaje w archiwum, a nie jako osierocona podstrona w drzewie.

#Hamburg: port, media i freeze wydarzeniowy

Hamburg nie jest węzłem finansowym nad Menem i nie jest kalendarzem targowym nad Renem. Tu liczy się łańcuch dostaw, redakcja i handel wysyłkowy. Te trzy osie ustawiają priorytety techniczne dla WordPressa, który ma działać w tym mieście, a nie tylko nosić je w tytule.

#Port, logistyka i serwisy B2B

HHLA w pierwszym półroczu 2026 obsłużyła w hamburskich terminalach 2 786 tys. TEU, o kilka procent mniej niż rok wcześniej, przy jednoczesnej modernizacji terminali Altenwerder, Burchardkai i Tollerort. Dla WordPressa wynika z tego prosta rzecz: serwis „firmowy” dostawcy, spedytora albo operatora fulfilmentu żyje w roku, w którym wolumen na nabrzeżu się waha, a modernizacja terminali trwa. Awaria panelu partnera albo statusu przesyłki boli w operacjach, nie w „UX”.

Container Terminal Altenwerder (CTA) w 2026 dostał sieć kampusową 5G, zdalnie sterowane suwnice i elektryczne ciągniki bateryjne. Na CTB wchodzą AGV. Na CTT podwojono zdolność przeładunku komponentów lotniczych Airbusa. Żadna z tych inwestycji nie jest case study WPPoland. Jest mapą rynku: wokół terminali siedzą średnie firmy, których WordPress trzyma kariery, dokumentację partnerską i landingi B2B. Łatka, która w piątek wyłącza webhook statusu, zostawia magazyn z ręcznym klejeniem numerów. Dlatego integracje REST i webhooki idą do wtyczki z testami, a nie do functions.php motywu.

#Media: embargo, cache i paywall

NDR, Spiegel i reszta klastra w Hamburgu ustawiają inny profil awarii niż sklep. Cache obiektowy serwujący treść przed embargiem, paywall, który po patchu wpuszcza wszystkich, Impressum i TMG, które znikają z stopki po zmianie motywu, skok ruchu po paśmie Tagesschau: to są scenariusze, które testujemy na stagingu, nie na produkcji w niedzielę wieczorem.

Serwis wydawniczy na WordPressie ma inny profil regresji niż landing logistyczny. Publikacja o statusie future musi respektować embargo. Cache nie może serwować szkicu przed czasem. Paywall musi rozróżniać bota od zalogowanego redaktora. Motyw, który woła get_post bez sprawdzenia statusu, to wyciek przed embargiem, nie „drobny bug CSS”.

#Reeperbahn Festival i freeze wdrożeń

Reeperbahn Festival co roku zbiera branżę muzyczną i marketingową w St. Pauli. W oknie festiwalowym ruch na stronie rośnie, newslettery idą w tysiącach, a każda zmiana na produkcji jest ryzykiem. Dlatego w runbooku zapisujemy freeze wdrożeń: w oknie festiwalowym nie idą aktualizacje wtyczek, nie idą nowe bloki, nie idą zmiany w motywie. środowisko testowe dostaje zmiany, produkcja czeka do poniedziałku po festiwalu.

To nie jest superstycja. To jest proces Git: gałąź czeka na merge, tag czeka na deploy, a redakcja ma checklistę publikacji (szkic, future, paywall, purge, URL newslettera, Impressum w stopce). Bez tego freeze wygląda jak „nic nie robimy”, a z nim wygląda jak plan, który przeżył Reeperbahn i nie wymaga post-mortem w poniedziałek rano.

#HafenCity i compliance w budowie

HafenCity ma 157 ha dawnego portu, około 8 tys. mieszkańców dziś i plan około 16 tys., Elbphilharmonie, uczelnię HCU i biura od Greenpeace przez Marquard & Bahls po średnie linie żeglugowe. Firmy z HafenCity w 2026 siedzą w trzech nakładających się ramach: RODO, NIS2 i - przy działalności portowej - ISPS. Hybryda (produktywność w chmurze, kopie lokalne) jest tam częstsza niż „wszystko na najtańszym VPS”.

WordPress nie spełnia ISPS ani NIS2 sam z siebie. Może dostarczyć inwentarz, ślad dostępu i dyscyplinę Git, które klient wkleja do własnej dokumentacji. Pytanie o hosting w Niemczech, origin na Północy i retencję logów pada na kickoffie, nie po trzech miesiącach wdrożenia.

#Redakcja dwujęzyczna: polski zespół, niemiecki interfejs

Najczęstsze tarcie we współpracy Polska - Hamburg nie jest w PHP. Jest w tonie. Niemiecki UI strony firmowej z DACH używa formy grzecznościowej Sie. Polski redaktor, który tłumaczy z headlinera napisanego u siebie na „ty”, publikuje tekst, który przy Spiegel i w korespondencji z IHK Hamburg brzmi jak newsletter siłowni. To nie jest kwestia wtyczki translatorskiej. To jest brief językowy i lista ciągów motywie.

Praktyczne zasady, które wpisujemy w dokumentację motywu:

  • Ciągi interfejsu (przyciski, błędy formularza, aria-label, placeholder) są po niemiecku w formalnym Sie, jeśli front jest DE. Angielski wariant, jeśli jest, też jest formalny. Polski wariant, jeśli powstaje, nie kopiuje Sie jeden do jednego, tylko naturalny polski rejestr B2B.
  • Redaktorzy w Polsce dostają locale panelu, w którym potrafią pracować. To nie musi być ten sam język co front. Mieszanie locale użytkownika z locale strony bez testu kończy się datami w złym formacie i menu, które ucieka z „Beiträge” na „Wpisy” w połowie ekranu.
  • Typografia niemiecka: ß, umlauty, długie złożenia. Przyciski i pozycje menu mają rezerwę szerokości. Łamanie w CSS nie może ucinać ß na „ss” w PDF-ach generowanych z treści.
  • Impressum, Datenschutz i oświadczenie o dostępności są szablonami z polami, nie blokami, które redaktor może przypadkiem usunąć z drzewa. W Hamburgu te strony są elementem zgodności, nie stopką marketingową.

Polylang i WPML rozwiązują hreflang i kopie językowe. Nie rozwiązują procesu: kto akceptuje niemiecki tekst, zanim pójdzie na produkcję. W briefie zapisujemy, czy akceptacja leży po stronie klienta w Hamburgu, czy po stronie polskiego content leada. środowisko testowe pokazuje obie wersje językowe, bo regresja „DE się zepsuło, bo ktoś edytował PL” wychodzi dopiero na porównaniu, nie w Lighthouse.

Hamburski rejestr formalny nie jest „twardszym niemieckim”. Jest konkretny: Sie w UI, Sie w mailu transakcyjnym, Sie w komunikacie błędu formularza. Du na stronie kariery bywa dopuszczalne, jeśli brief to zapisze. Domyślne mieszanie obu form w jednym motywie jest błędem, nie „elastycznością”.

#Dostępność: BITV 2.0, EN 301 549 i BFSG

Dostępność w Hamburgu nie jest jednym przepisem. Publiczny sektor (Land Hamburg, uczelnie, instytucje miasta) podlega BITV 2.0. Rozporządzenie odsyła do EN 301 549; na sierpień 2026 obowiązująca warstwa web to WCAG 2.1 na poziomie AA, z wersją 4.1.1 normy (WCAG 2.2) oczekiwaną w Dzienniku Urzędowym około października 2026. BITV dokłada obowiązki, których Europa nie kopiuje jeden do jednego: oświadczenie o dostępności, kanał informacji zwrotnej, a na stronach władz także Leichte Sprache i Deutsche Gebärdensprache. To jest kontekst rynku, nie certyfikat WPPoland.

Sektor prywatny od 28 czerwca 2025 ma BFSG, niemieckie wdrożenie European Accessibility Act. BFSG nie jest BITV. Trafia w usługi konsumenckie (między innymi handel elektroniczny), z wyłączeniem mikroprzedsiębiorstw przy usługach. Czysta strona informacyjna firmy, bez zakupu, rezerwacji i płatności, zwykle nie wpada w ten sam koszyk. Zespół nie sprzedaje więc „zgodności BITV” sklepowi ani „BFSG” intranetowi. Na kickoffie zapisujemy, który reżim w ogóle dotyczy witryny, a potem testujemy to, co da się przetestować w motywie i blokach.

Test BITV na bitv-test.de jest narzędziem orientacyjnym, nie pieczęcią od WPPoland. W Hamburgu recenzent po stronie klienta może znać listę WCAG lepiej niż agencja, która obiecuje „pełną zgodność” bez testu klawiatury.

Co konkretnie robi zespół w kodzie:

  • Semantyka: jeden h1, kolejność nagłówków, przycisk jako button, link jako a, nie div z kliknięciem.
  • Klawiatura i focus: omijanie powtarzalnej nawigacji, widoczny focus, brak pułapek w mega menu.
  • Kontrast i ruch: tokeny w theme.json, szacunek dla prefers-reduced-motion, brak informacji niesionej samym kolorem.
  • Formularze: etykiety powiązane z polami, błędy w tekście, nie tylko w kolorze ramki.
  • Media: tekst alternatywny jako pole wymagane w procesie redakcji, nie jako „uzupełnimy później”.
  • PDF: jeśli regulamin, karta produktu albo raport roczny idzie jako załącznik, klauzula 10 EN 301 549 (dokumenty poza WWW) trafia do briefu. WordPress nie zrobi z JPG-a dostępnego PDF-a.

Skan automatyczny (axe, Lighthouse) jest bramką CI, nie dowodem zgodności. Dla klienta z sektora publicznego albo z BFSG w zakresie e-commerce dokładamy ręczną ścieżkę klawiatury i porównanie z listą WCAG. Zespół nie wystawia certyfikatu BIK BITV-Test, jeśli testu nie było. Zespół nie obiecuje Leichte Sprache ani DGS prywatnej stronie produktowej, bo to obowiązek innej klasy podmiotów.

Sklep i checkout to osobna rozmowa: jeśli brief schodzi na WooCommerce, zakres przenosi się na programistę WooCommerce w Hamburgu.

#Bezpieczeństwo przy stronach z sąsiedztwa portu i mediów

Sąsiedztwo HHLA i redakcji NDR nie czyni marketingowego WordPressa systemem terminalowym ani CMS-em wydawniczym klasy Spiegel. Zespół nie pisze, że strona „spełnia NIS2” albo „jest certyfikowana ISO 27001”. NIS2 dotyczy operatorów infrastruktury krytycznej i części logistyki. ISO 27001 dotyczy systemu zarządzania bezpieczeństwem informacji. Większość korporacyjnych stron WordPress w Hamburgu nie jest samodzielnym podmiotem tych reżimów. Część stoi obok organizacji, które są. Wtedy WordPress ma dostarczyć inwentarz, ślad dostępu i dyscyplinę Git, które klient wkleja do własnej dokumentacji.

Postawa, którą da się utrzymać w kodzie i procesie, bez udawania audytu:

  • Sekretów nie ma w Git. Klucze, hasła bazy i tokeny CRM idą przez zmienne środowiska albo poza repo. wp-config.php w historii Gita z hasłem to incydent, nie „drobiazg na później”.
  • Konta administracyjne mają 2FA. Redaktorzy PL nie dostają install_plugins na produkcji. Rola jest cięta do tego, czego wymaga Gutenberg.
  • XML-RPC zostaje wyłączony, jeśli nie ma uzasadnionego klienta. File editor w panelu też.
  • Nagłówki: HTTPS, HSTS tam gdzie certyfikat i CDN na to pozwalają, CSP dopasowane do realnych skryptów (consent, tag manager, czcionki), nie skopiowane z bloga.
  • Zależności: Composer albo zapisane wersje wtyczek, skan CVE w CI, aktualizacje na stagingu przed produkcją.
  • Kopie i odtworzenie: backup bez przetestowanego restore to ozdoba. Test odtworzenia na stagingu jest w runbooku.
  • Logi: kto zalogował się do wp-admin, skąd poszła zmiana wtyczki. Retencja uzgodniona z RODO, nie „trzymamy wszystko wiecznie”.

RODO jest osobną warstwą: minimalizacja pól formularza, umowa powierzenia, consent na skrypty, lokalizacja hostingu. Hosting „w Niemczech” (Hetzner w Falkenstein albo Norymberdze, albo inny DC w DE) jest argumentem o jurysdykcji, nie magiczną tarczą. Firma z HafenCity nie naprawi wtyczki, która trzyma CV kandydatów wp_posts bez limitu dostępu.

Testy penetracyjne i ISO 27001 wymieniamy tylko wtedy, gdy klient je ma albo zamawia u laboratorium. WPPoland nie dopisuje sobie certyfikatów, których nie posiada. Hartowanie WordPressa to zestaw decyzji w pull requestach, nie slajd o zero incydentach.

#Git, środowisko testowe i przegląd kodu

To jest warstwa, która odróżnia seniorskie prace WordPress od „wgrania ZIP-a na FTP”. W Hamburgu klient z działem IT i tak zapyta o to na drugim spotkaniu, zwłaszcza jeśli recenzent przychodzi z nextMedia, z SPACE w Speicherstadt albo z wewnętrznego IT dostawcy portowego.

Repozytorium trzyma motyw i własne wtyczki. Wtyczki z katalogu WordPress.org i Core nie żyją jako skopiowane foldery w Gicie, chyba że jest twardy powód (fork, łatka, air-gap). Gałąź funkcyjna na jedną zmianę: nowy blok, nowy CPT, poprawka a11y. Pull request ma opis, ekrany albo nagranie z edytora, i checklistę: i18n, dostępność, brak sekretów, czy blok nie psuje klasycznego szablonu jeśli jeszcze żyje.

przegląd kodu robi senior, który nie pisał tej gałęzi. Review czyta WordPress Coding Standards (PHPCS, sniffs WordPress-Core), ale też czyta intencję: czy CPT nie powinien być wtyczką, czy ACF nie dubluje atrybutów bloku, czy hook nie wisi na init bez potrzeby. Komentarz w PR jest po angielsku albo po polsku, zależnie od recenzenta po stronie klienta; niemieckie IT w Hamburgu zwykle woli angielski w diffie i niemiecki w dokumentacji redakcyjnej.

Środowisko testowe jest kopią produkcji z zanonimizowanymi danymi. WP-CLI search-replace na URL, osobne klucze, wyłączone crony, które wysyłają maile do prawdziwych klientów. Redakcja klika po stagingu z prawdziwymi wzorcami Gutenberg, nie po localhostcie programisty. Regresja wielojęzyczna, regresja klawiatury i regresja embargo (status future, paywall, purge cache) dzieją się tutaj. Promocja na produkcję jest udokumentowanym krokiem: tag albo merge do main, build zasobów, cache warmup, ścieżka wycofania (poprzedni tag). Zespół nie wgrywa „na szybko” jednego pliku PHP przez SFTP, bo potem nikt nie odtworzy, co stało na produkcji w piątek przed Reeperbahn Festival.

WP-CLI jest narzędziem operacyjnym: flush transients, wp scaffold, import CPT, sprawdzanie autoload. Nie zastępuje testów. Tam, gdzie wtyczka liczy (daty, mapowanie, walidacja), idzie PHPUnit. Bloki z nietrywialnym UI dostają test w edytorze na stagingu, bo jsdom nie złapie, że InspectorControls zasłania przycisk Speichern w niemieckim locale.

Budżet wydajności jest częścią odbioru, nie osobnym projektem. Lighthouse i Core Web Vitals na szablonach, które naprawdę istnieją: archiwum CPT, single, strona z wzorcem hero. Obrazy w AVIF/WebP przez proces budowania, CSS motywu bez importu całego uniwersum bloków, JS edytora nie na froncie. Redis i obiektowy cache mają sens, gdy transjenty i zapytania CPT to pokazują, nie gdy „tak się robi przy portowych firmach”.

Dla serwisu B2B albo redakcyjnego w Hamburgu liczy się czas do pierwszego bajtu z sieci w północnych Niemczech, nie tylko z telefonu na tarasie. Monitoring z jednego regionu USA kłamie. Punkt pomiaru w DE albo przynajmniej w UE jest częścią kontraktu operatorskiego, nie dodatkiem.

#WordPress Meetup Hamburg i lokalna scena techniczna

Hamburg WordPress Meetup spotyka się w Werkheim przy Planckstraße 13. W 2026 roku w programie były między innymi bezpieczeństwo WordPressa na 2026 (28 kwietnia), wtyczki eventowe, bloki wyłącznie w PHP oraz WordPress 7.1 z warsztatem serwisowym (28 lipca). To nie jest kanał sprzedaży. To jest miejsce, w którym widać, jak lokalni maintainerzy aktualizują, jak rozmawiają o uprawnieniach i o hoście.

Konkretne tematy z 2026 roku, które ustawiają poprzeczkę dla motywu:

  • Bezpieczeństwo WordPressa: wp2shell i inne CVE pokazują, że niezałatany Core jest gorszy niż brak nowej wtyczki „security”.
  • Wtyczki eventowe: bezpośrednio dotyczą briefów z Reeperbahn Festival i SPACE w Speicherstadt.
  • Bloki wyłącznie w PHP: render serwerowy, nie React na froncie.
  • WordPress 7.1 z warsztatem serwisowym: aktualizacja Core to proces, nie klik w panelu.

WP-CLI w development nie jest ozdobą meetupową. To sposób, żeby scaffold bloku, różnicę wtyczek i eksport listy użytkowników zrobić powtarzalnie, z logiem, bez klików wp-admin na produkcji. Po sesji o bezpieczeństwie na meetupie argument „zrobimy to ręcznie w panelu” brzmi jeszcze gorzej.

Szersza scena hamburska obejmuje też nextMedia.Hamburg i SPACE w Speicherstadt, gdzie branża medialna i marketingowa spotyka się z technologią. Dla briefu hamburskiego ważniejsze od WordCampu jest to, że lokalny meetup siedzi przy Planckstraße: ludzie, którzy przychodzą na performance, pluginy i bezpieczeństwo, zadają inne pytania niż marketingowa agencja z prezentacją „AI w treściach”. Motyw i wtyczki, które wychodzą z tego zespołu, muszą przeżyć takie pytania: skąd alt tekst, kto go akceptuje, czy blok eventowy nie psuje cache przy embargo.

#Sklep WooCommerce to osobny zakres

Ta strona nie buduje checkoutu, bramek ani katalogu produktów. Jeśli brief schodzi na sklep, VAT, Hermes, DHL albo bramkę, zakres zmienia właściciela i opisuje go programista WooCommerce w Hamburgu. Pillar bez miasta: programista WooCommerce. Mieszanie sklepu z motywem korporacyjnym w jednym repozytorium bez granicy wtyczek to najszybsza droga do tego, żeby aktualizacja Woo rozwaliła landing pod Reeperbahn Festival, albo odwrotnie.

Korporacyjna strona z jednym przyciskiem „sklep” do zewnętrznego Woo może zostać w motywie jako link. Sama logika koszyka nie.

#Po wdrożeniu: przekazanie albo opieka

Zlecenie programistyczne kończy się dokumentacją, sesją przekazania i dostępem Git dla zespołu klienta. Runbook opisuje: jak dodać wzorzec, jak zarejestrować nowy CPT, jak wypuścić gałąź, jak odtworzyć środowisko testowe, kogo wołać gdy edytor nie zapisuje. Jeśli po starcie potrzebne są aktualizacje Core, monitoring i stały dyżur, to jest opieka techniczna WordPress w Hamburgu, nie ukryty aneks do motywu. Pillar bez miasta: utrzymanie stron WordPress.

Wycena prac programistycznych jest indywidualna i wychodzi na piśmie po ustaleniu zakresu. Na tej stronie nie ma cennika ani „pakietów godzin”. Zmiana zakresu (nagle FSE, nagle drugi język, nagle integracja z intranetem) wraca do zapisu, zanim wejdzie w sprint.

#Jak zacząć projekt w Hamburgu

Do rozmowy wystarczy krótki opis: jaki motyw i jakie wtyczki są dziś, kto redaguje (PL/DE), czy front ma być formalnym Sie, czy w grze jest CPT pod wydarzenia i publikacje, czy IT po stronie Hamburgu wymaga Git i stagingu od dnia zero. Zespół ogląda instalację, spisuje ryzyka (Gutenberg używany jak notatnik, sekrety w repo, brak oświadczenia o dostępności, ACF zdublowane z blokami) i proponuje plan z kryteriami odbioru.

Kontakt: formularz WPPoland. Pillar usługowy, bez miasta w slugach, zostaje przy programiście WordPress.

Mapa w Hamburgu i okolic

Obsługujemy klientów w Hamburgu i pobliskich miejscowościach.

Treść dedykowana:

Ta strona zawiera informacje przygotowane specjalnie dla Hamburg.

Strona firmowa w Hamburgu stoi obok terminali HHLA przy Altenwerder, redakcji NDR przy Rothenbaumchaussee, biurowców HafenCity i kalendarza, w którym Reeperbahn Festival zamraża wdrożenia tak samo jak embargo redakcyjne przed paśmem Tagesschau. To nie jest powód, żeby WordPress udawał system terminalowy albo CMS wydawniczy klasy Spiegel. To powód, żeby motyw, wtyczki i model treści były napisane tak, jak oczekuje hamburski dział prawny i polski redaktor, który codziennie publikuje po polsku, a panel ma po niemiecku.

WPPoland buduje ten WordPress z polskiego zespołu seniorów dla firm z DACH, które mają siedzibę, oddział albo klientów Hamburgu. Zakres to programowanie WordPress: motyw blokowy albo klasyczny, własne wtyczki, Gutenberg, CPT, ACF albo natywne bloki, integracje REST i przegląd kodu na Git. Sklep WooCommerce i abonament opieki są osobnymi tematami, z linkami na końcu.

#Programowanie WordPress dla firm z DACH, które działają w Hamburgu

Hamburg spina trzy rzeczy, które rzadko spotykają się w jednym mieście w takiej skali. Po pierwsze port i logistykę: Hamburger Hafen und Logistik AG (HHLA) trzyma terminale kontenerowe Altenwerder (CTA), Burchardkai (CTB) i Tollerort (CTT). Wokół nabrzeża siedzą spedytorzy, operatorzy fulfilmentu i dostawcy, których WordPress trzyma kariery, dokumentację partnerską i landingi B2B, a nie tylko wizytówkę. Po drugie media: NDR ma siedzibę w Hamburgu (NDR Media, Rothenbaumchaussee 159), Tagesschau powstaje tu, obok Spiegel, Die Zeit, Bauer Media i reszty klastra w Speicherstadt i przy Rothenbaumchaussee. Po trzecie handel wysyłkowy i eventy: Otto Group ma siedzibę w Hamburgu, nextMedia.Hamburg prowadzi SPACE w Speicherstadt, a Reeperbahn Festival co roku zbiera branżę muzyczną i marketingową w St. Pauli.

Dla strony WordPress te fakty nie oznaczają, że motyw ma liczyć TEU albo synchronizować transmisję na żywo. Oznaczają trzy twardsze wymagania. Treść bywa regulowana (Impressum, TMG, Datenschutzerklärung, embargo redakcyjne). Interfejs dla gościa jest formalny i niemiecki, nawet gdy redaktorzy siedzą w Polsce. Hosting, retencja logów i pytanie o origin w Niemczech są tematem rozmowy, bo obok siedzi ktoś, kto pyta o NIS2, o GoBD albo o slot na terminalu.

Typowy brief, który trafia do seniorów, nie brzmi „zróbcie ładną stronę”. Brzmi: odziedziczony motyw z 40 wtyczkami, redakcja w Polsce, compliance w Hamburgu, Gutenberg używany jak klasyczny edytor, a nowa podstrona pod Reeperbahn Festival powstaje przez kopiowanie strony z zeszłego roku i ręczne podmienianie dat w treści. To jest problem modelu treści i procesu Git, nie problem szablonu z marketplace.

WPPoland nie jest dostawcą HHLA, Spiegel ani Otto Group. Sąsiedztwo portu i redakcji ustawia poprzeczkę dokumentacji, ról i Git. Nie ustawia listy referencji.

#Motyw blokowy, motyw klasyczny i własna wtyczka

Nowa budowa w Hamburgu startuje od decyzji, która później kosztuje miesiącami: czy prezentacja żyje w motywie blokowym z theme.json, czy w klasycznych szablonach PHP, i co idzie do wtyczki. Ta decyzja jest zapisywana przed pierwszym commitem.

#theme.json, wzorce i granica odpowiedzialności motywu

Motyw blokowy trzyma tokeny: paletę, skalę typografii, odstępy, szerokości treści. Dla hamburskiego B2B oznacza to stonowaną paletę korporacyjną, czytelny krój bez ozdobników i przyciski, które nie pękają na niemieckich złożeniach w stylu Hafenlogistik-Lösungen albo Medienpartnerschaft. Wzorce bloków (block patterns) opisują powtarzalne układy: hero z zastrzeżeniem prawnym, siatka osób z działu, blok cytatu z atrybucją, stopka z Impressum. Redaktor składa stronę z wzorców, zamiast prosić programistę o nowy szablon na każde wydarzenie w HafenCity albo na każdą edycję festiwalu.

Pełna edycja witryny (FSE) ma sens, gdy zespół redakcyjny naprawdę ma dostać kontrolę nad nagłówkiem i stopką. W praktyce wiele firm z DACH tej kontroli nie chce: nagłówek jest elementem brandu i compliance, a nie placem zabaw. Wtedy motyw blokowy zostaje, ale szablony części (header, footer) są zablokowane, a redakcja pracuje w obrębie wzorców i własnych bloków. To kompromis, nie półśrodek.

Każdy własny blok dostaje block.json, kategorię, ikonę i atrybuty ze schematem. Tam, gdzie treść ma trafić do wyszukiwarki i do RSS, render idzie po stronie serwera. React w edytorze służy do InspectorControls i podglądu, nie do tego, żeby front był aplikacją SPA udającą WordPressa.

#Kiedy klasyczny motyw PHP zostaje

Odziedziczone instalacje w Hamburgu często mają pięć, siedem lat: child theme na komercyjnym szkielecie, ACF wklejone w page.php, shortcode’y w treściach, jQuery z epoki przed blokami. Przepisanie tego na FSE „bo tak wypada w 2026” jest droższe niż naprawa hierarchii szablonów, wyciągnięcie logiki do wtyczki i dokładanie Gutenberg tylko tam, gdzie redakcja naprawdę składa nowe landingi.

Klasyczny motyw zostaje, gdy:

  • logika warunkowa siedzi w szablonach (inne menu dla partnera portowego, inne dla prasy, inne dla kandydata) i przeniesienie jej do theme.json nic nie upraszcza;
  • zespół redakcyjny publikuje setki stron w klasycznym edytorze i szkolenie z FSE byłoby większym ryzykiem niż dług;
  • child theme jest cienki, a problemem są wtyczki i autoload, nie sam silnik szablonów.

Nawet wtedy nowe klocki idą jako bloki, nie jako kolejne shortcode’y. Shortcode w treści z 2019 roku zostaje do migracji, nowy kod go nie dokłada.

#Funkcja do wtyczki, wygląd do motywu

Granica jest prosta i zapisana w runbooku. Motyw umie pokazać. Wtyczka umie wiedzieć. CPT wydarzeń festiwalowych, kolejka do CRM, endpoint REST dla intranetu, rola użytkownika „redaktor PL” bez capability publish_pages na produkcji niemieckiej: to wtyczka. Kolory, siatka, wzorzec hero: to motyw. Jeśli po zmianie motywu znika kalendarz wydarzeń, architektura była zła.

Własna wtyczka ma własny prefix, autoload PSR-4, plik główny z nagłówkiem Plugin Name i wersją semver, oraz testy tam, gdzie logika liczy (daty wydarzeń, mapowanie pól do CRM, walidacja formularza). Logika biznesowa nie trafia do functions.php motywu, bo functions.php umiera razem z motywem, a hamburski serwis zmienia agencję brandingową częściej niż model treści.

Porównanie warstw, którego używamy przy kickoffie:

WarstwaCo tam żyjePrzykład w Hamburgu
Motywprezentacja, tokeny, wzorcelanding pod Reeperbahn Festival, stopka z Impressum
WtyczkaCPT, role, REST, integracjekatalog wydarzeń, kolejka do CRM, logi audytowe
Gutenbergredakcja bez HTMLwzorzec z zastrzeżeniem, blok osoby z działu
środowisko testowe i Gitproces, nie featuregałąź, review, promocja na produkcję

#Gutenberg, CPT i ACF w modelu treści

Gutenberg bez modelu treści kończy się tym, że każda podstrona jest unikalnym kolażem bloków i nikt nie potrafi zrobić listy. W Hamburgu listy są konkretne: wydarzenia festiwalowe, publikacje, osoby, stanowiska, lokalizacje biur (HafenCity to nie St. Pauli, Speicherstadt to nie Rothenbaumchaussee). To są obiekty, nie „kolejne strony w drzewie”.

#Własne typy treści pod realne obiekty

CPT rejestrujemy z własnymi capabilities, nie z mapowaniem na post. Redaktor w Polsce ma edytować publikację, a nie kasować wtyczek. Archiwum CPT dostaje szablon albo wzorzec zapytań, a pojedynczy obiekt ma szablon, który nie pozwala redaktorowi rozpychać layoutu poza ustalony układ. Taksonomie są osobne: typ wydarzenia (kongres, webinar, festiwal) nie miesza się z tagami bloga.

ACF ma tu miejsce, ale nie jako substytut bloków. Pola ACF na CPT sprawdzają się przy danych, które są polami, nie layoutem: data rozpoczęcia, lokalizacja w HafenCity, język wystąpienia, plik PDF z regulaminem. Layout strony osoby albo artykułu składa Gutenberg. Mieszanie ACF Flexible Content z pełnym edytorem bloków na tym samym obiekcie kończy się dwoma źródłami prawdy i redaktorem, który nie wie, gdzie kliknąć.

Gdzie ACF jest zbędne, atrybuty bloku w block.json wystarczą. Blok „osoba z cytatem” nie potrzebuje grupy pól na każdej stronie. Potrzebuje atrybutów i ewentualnie InnerBlocks na biogram. Mniej wtyczek w panelu to mniej powierzchni ataku i mniej konfliktów z niemieckimi wtyczkami consent i cache.

#Bloki serwerowe zamiast shortcode’ów

Shortcode w treści to dług, który widać dopiero przy migracji. Nowy kod w Hamburgu idzie jako blok z renderem serwerowym: znaczniki semantyczne, atrybuty w komentarzu bloku, możliwość filtrowania wyjścia. Blok listy wydarzeń czyta CPT, cache’uje zapytanie transjentem z jawnym TTL i invalidacją przy save_post, a nie przy każdym request.

Dla redakcji dwujęzycznej każdy ciąg w bloku przechodzi przez funkcje i18n WordPressa. Niemiecki string w kodzie PHP jest wyjątkiem, nie regułą. Tłumaczenia leżą w plikach po, nie w hardcoded tablicy w motywie. Polylang albo WPML dokładamy dopiero gdy naprawdę są dwa (albo trzy) języki na froncie. Sam panel w DE i treści w PL da się ogarnąć rolami i locale użytkownika, bez pełnego stacku wielojęzycznego.

przegląd kodu bloku sprawdza trzy rzeczy, zanim gałąź wpadnie do main: czy blok działa po wyłączeniu JS w podglądzie frontu, czy atrybuty mają typy i defaulty, czy nie ładuje całego builda edytora na froncie. Gutenberg, który dokłada megabajt Reacta do strony osoby z zarządu, nie przejdzie review.

Landing pod Reeperbahn Festival albo pod wydarzenie w SPACE (Speicherstadt) nie powstaje jako kopia strony z zeszłego roku. Powstaje jako obiekt CPT z datą, lokalizacją, językiem i wzorcem. Po festiwalu obiekt zostaje w archiwum, a nie jako osierocona podstrona w drzewie.

#Hamburg: port, media i freeze wydarzeniowy

Hamburg nie jest węzłem finansowym nad Menem i nie jest kalendarzem targowym nad Renem. Tu liczy się łańcuch dostaw, redakcja i handel wysyłkowy. Te trzy osie ustawiają priorytety techniczne dla WordPressa, który ma działać w tym mieście, a nie tylko nosić je w tytule.

#Port, logistyka i serwisy B2B

HHLA w pierwszym półroczu 2026 obsłużyła w hamburskich terminalach 2 786 tys. TEU, o kilka procent mniej niż rok wcześniej, przy jednoczesnej modernizacji terminali Altenwerder, Burchardkai i Tollerort. Dla WordPressa wynika z tego prosta rzecz: serwis „firmowy” dostawcy, spedytora albo operatora fulfilmentu żyje w roku, w którym wolumen na nabrzeżu się waha, a modernizacja terminali trwa. Awaria panelu partnera albo statusu przesyłki boli w operacjach, nie w „UX”.

Container Terminal Altenwerder (CTA) w 2026 dostał sieć kampusową 5G, zdalnie sterowane suwnice i elektryczne ciągniki bateryjne. Na CTB wchodzą AGV. Na CTT podwojono zdolność przeładunku komponentów lotniczych Airbusa. Żadna z tych inwestycji nie jest case study WPPoland. Jest mapą rynku: wokół terminali siedzą średnie firmy, których WordPress trzyma kariery, dokumentację partnerską i landingi B2B. Łatka, która w piątek wyłącza webhook statusu, zostawia magazyn z ręcznym klejeniem numerów. Dlatego integracje REST i webhooki idą do wtyczki z testami, a nie do functions.php motywu.

#Media: embargo, cache i paywall

NDR, Spiegel i reszta klastra w Hamburgu ustawiają inny profil awarii niż sklep. Cache obiektowy serwujący treść przed embargiem, paywall, który po patchu wpuszcza wszystkich, Impressum i TMG, które znikają z stopki po zmianie motywu, skok ruchu po paśmie Tagesschau: to są scenariusze, które testujemy na stagingu, nie na produkcji w niedzielę wieczorem.

Serwis wydawniczy na WordPressie ma inny profil regresji niż landing logistyczny. Publikacja o statusie future musi respektować embargo. Cache nie może serwować szkicu przed czasem. Paywall musi rozróżniać bota od zalogowanego redaktora. Motyw, który woła get_post bez sprawdzenia statusu, to wyciek przed embargiem, nie „drobny bug CSS”.

#Reeperbahn Festival i freeze wdrożeń

Reeperbahn Festival co roku zbiera branżę muzyczną i marketingową w St. Pauli. W oknie festiwalowym ruch na stronie rośnie, newslettery idą w tysiącach, a każda zmiana na produkcji jest ryzykiem. Dlatego w runbooku zapisujemy freeze wdrożeń: w oknie festiwalowym nie idą aktualizacje wtyczek, nie idą nowe bloki, nie idą zmiany w motywie. środowisko testowe dostaje zmiany, produkcja czeka do poniedziałku po festiwalu.

To nie jest superstycja. To jest proces Git: gałąź czeka na merge, tag czeka na deploy, a redakcja ma checklistę publikacji (szkic, future, paywall, purge, URL newslettera, Impressum w stopce). Bez tego freeze wygląda jak „nic nie robimy”, a z nim wygląda jak plan, który przeżył Reeperbahn i nie wymaga post-mortem w poniedziałek rano.

#HafenCity i compliance w budowie

HafenCity ma 157 ha dawnego portu, około 8 tys. mieszkańców dziś i plan około 16 tys., Elbphilharmonie, uczelnię HCU i biura od Greenpeace przez Marquard & Bahls po średnie linie żeglugowe. Firmy z HafenCity w 2026 siedzą w trzech nakładających się ramach: RODO, NIS2 i - przy działalności portowej - ISPS. Hybryda (produktywność w chmurze, kopie lokalne) jest tam częstsza niż „wszystko na najtańszym VPS”.

WordPress nie spełnia ISPS ani NIS2 sam z siebie. Może dostarczyć inwentarz, ślad dostępu i dyscyplinę Git, które klient wkleja do własnej dokumentacji. Pytanie o hosting w Niemczech, origin na Północy i retencję logów pada na kickoffie, nie po trzech miesiącach wdrożenia.

#Redakcja dwujęzyczna: polski zespół, niemiecki interfejs

Najczęstsze tarcie we współpracy Polska - Hamburg nie jest w PHP. Jest w tonie. Niemiecki UI strony firmowej z DACH używa formy grzecznościowej Sie. Polski redaktor, który tłumaczy z headlinera napisanego u siebie na „ty”, publikuje tekst, który przy Spiegel i w korespondencji z IHK Hamburg brzmi jak newsletter siłowni. To nie jest kwestia wtyczki translatorskiej. To jest brief językowy i lista ciągów motywie.

Praktyczne zasady, które wpisujemy w dokumentację motywu:

  • Ciągi interfejsu (przyciski, błędy formularza, aria-label, placeholder) są po niemiecku w formalnym Sie, jeśli front jest DE. Angielski wariant, jeśli jest, też jest formalny. Polski wariant, jeśli powstaje, nie kopiuje Sie jeden do jednego, tylko naturalny polski rejestr B2B.
  • Redaktorzy w Polsce dostają locale panelu, w którym potrafią pracować. To nie musi być ten sam język co front. Mieszanie locale użytkownika z locale strony bez testu kończy się datami w złym formacie i menu, które ucieka z „Beiträge” na „Wpisy” w połowie ekranu.
  • Typografia niemiecka: ß, umlauty, długie złożenia. Przyciski i pozycje menu mają rezerwę szerokości. Łamanie w CSS nie może ucinać ß na „ss” w PDF-ach generowanych z treści.
  • Impressum, Datenschutz i oświadczenie o dostępności są szablonami z polami, nie blokami, które redaktor może przypadkiem usunąć z drzewa. W Hamburgu te strony są elementem zgodności, nie stopką marketingową.

Polylang i WPML rozwiązują hreflang i kopie językowe. Nie rozwiązują procesu: kto akceptuje niemiecki tekst, zanim pójdzie na produkcję. W briefie zapisujemy, czy akceptacja leży po stronie klienta w Hamburgu, czy po stronie polskiego content leada. środowisko testowe pokazuje obie wersje językowe, bo regresja „DE się zepsuło, bo ktoś edytował PL” wychodzi dopiero na porównaniu, nie w Lighthouse.

Hamburski rejestr formalny nie jest „twardszym niemieckim”. Jest konkretny: Sie w UI, Sie w mailu transakcyjnym, Sie w komunikacie błędu formularza. Du na stronie kariery bywa dopuszczalne, jeśli brief to zapisze. Domyślne mieszanie obu form w jednym motywie jest błędem, nie „elastycznością”.

#Dostępność: BITV 2.0, EN 301 549 i BFSG

Dostępność w Hamburgu nie jest jednym przepisem. Publiczny sektor (Land Hamburg, uczelnie, instytucje miasta) podlega BITV 2.0. Rozporządzenie odsyła do EN 301 549; na sierpień 2026 obowiązująca warstwa web to WCAG 2.1 na poziomie AA, z wersją 4.1.1 normy (WCAG 2.2) oczekiwaną w Dzienniku Urzędowym około października 2026. BITV dokłada obowiązki, których Europa nie kopiuje jeden do jednego: oświadczenie o dostępności, kanał informacji zwrotnej, a na stronach władz także Leichte Sprache i Deutsche Gebärdensprache. To jest kontekst rynku, nie certyfikat WPPoland.

Sektor prywatny od 28 czerwca 2025 ma BFSG, niemieckie wdrożenie European Accessibility Act. BFSG nie jest BITV. Trafia w usługi konsumenckie (między innymi handel elektroniczny), z wyłączeniem mikroprzedsiębiorstw przy usługach. Czysta strona informacyjna firmy, bez zakupu, rezerwacji i płatności, zwykle nie wpada w ten sam koszyk. Zespół nie sprzedaje więc „zgodności BITV” sklepowi ani „BFSG” intranetowi. Na kickoffie zapisujemy, który reżim w ogóle dotyczy witryny, a potem testujemy to, co da się przetestować w motywie i blokach.

Test BITV na bitv-test.de jest narzędziem orientacyjnym, nie pieczęcią od WPPoland. W Hamburgu recenzent po stronie klienta może znać listę WCAG lepiej niż agencja, która obiecuje „pełną zgodność” bez testu klawiatury.

Co konkretnie robi zespół w kodzie:

  • Semantyka: jeden h1, kolejność nagłówków, przycisk jako button, link jako a, nie div z kliknięciem.
  • Klawiatura i focus: omijanie powtarzalnej nawigacji, widoczny focus, brak pułapek w mega menu.
  • Kontrast i ruch: tokeny w theme.json, szacunek dla prefers-reduced-motion, brak informacji niesionej samym kolorem.
  • Formularze: etykiety powiązane z polami, błędy w tekście, nie tylko w kolorze ramki.
  • Media: tekst alternatywny jako pole wymagane w procesie redakcji, nie jako „uzupełnimy później”.
  • PDF: jeśli regulamin, karta produktu albo raport roczny idzie jako załącznik, klauzula 10 EN 301 549 (dokumenty poza WWW) trafia do briefu. WordPress nie zrobi z JPG-a dostępnego PDF-a.

Skan automatyczny (axe, Lighthouse) jest bramką CI, nie dowodem zgodności. Dla klienta z sektora publicznego albo z BFSG w zakresie e-commerce dokładamy ręczną ścieżkę klawiatury i porównanie z listą WCAG. Zespół nie wystawia certyfikatu BIK BITV-Test, jeśli testu nie było. Zespół nie obiecuje Leichte Sprache ani DGS prywatnej stronie produktowej, bo to obowiązek innej klasy podmiotów.

Sklep i checkout to osobna rozmowa: jeśli brief schodzi na WooCommerce, zakres przenosi się na programistę WooCommerce w Hamburgu.

#Bezpieczeństwo przy stronach z sąsiedztwa portu i mediów

Sąsiedztwo HHLA i redakcji NDR nie czyni marketingowego WordPressa systemem terminalowym ani CMS-em wydawniczym klasy Spiegel. Zespół nie pisze, że strona „spełnia NIS2” albo „jest certyfikowana ISO 27001”. NIS2 dotyczy operatorów infrastruktury krytycznej i części logistyki. ISO 27001 dotyczy systemu zarządzania bezpieczeństwem informacji. Większość korporacyjnych stron WordPress w Hamburgu nie jest samodzielnym podmiotem tych reżimów. Część stoi obok organizacji, które są. Wtedy WordPress ma dostarczyć inwentarz, ślad dostępu i dyscyplinę Git, które klient wkleja do własnej dokumentacji.

Postawa, którą da się utrzymać w kodzie i procesie, bez udawania audytu:

  • Sekretów nie ma w Git. Klucze, hasła bazy i tokeny CRM idą przez zmienne środowiska albo poza repo. wp-config.php w historii Gita z hasłem to incydent, nie „drobiazg na później”.
  • Konta administracyjne mają 2FA. Redaktorzy PL nie dostają install_plugins na produkcji. Rola jest cięta do tego, czego wymaga Gutenberg.
  • XML-RPC zostaje wyłączony, jeśli nie ma uzasadnionego klienta. File editor w panelu też.
  • Nagłówki: HTTPS, HSTS tam gdzie certyfikat i CDN na to pozwalają, CSP dopasowane do realnych skryptów (consent, tag manager, czcionki), nie skopiowane z bloga.
  • Zależności: Composer albo zapisane wersje wtyczek, skan CVE w CI, aktualizacje na stagingu przed produkcją.
  • Kopie i odtworzenie: backup bez przetestowanego restore to ozdoba. Test odtworzenia na stagingu jest w runbooku.
  • Logi: kto zalogował się do wp-admin, skąd poszła zmiana wtyczki. Retencja uzgodniona z RODO, nie „trzymamy wszystko wiecznie”.

RODO jest osobną warstwą: minimalizacja pól formularza, umowa powierzenia, consent na skrypty, lokalizacja hostingu. Hosting „w Niemczech” (Hetzner w Falkenstein albo Norymberdze, albo inny DC w DE) jest argumentem o jurysdykcji, nie magiczną tarczą. Firma z HafenCity nie naprawi wtyczki, która trzyma CV kandydatów wp_posts bez limitu dostępu.

Testy penetracyjne i ISO 27001 wymieniamy tylko wtedy, gdy klient je ma albo zamawia u laboratorium. WPPoland nie dopisuje sobie certyfikatów, których nie posiada. Hartowanie WordPressa to zestaw decyzji w pull requestach, nie slajd o zero incydentach.

#Git, środowisko testowe i przegląd kodu

To jest warstwa, która odróżnia seniorskie prace WordPress od „wgrania ZIP-a na FTP”. W Hamburgu klient z działem IT i tak zapyta o to na drugim spotkaniu, zwłaszcza jeśli recenzent przychodzi z nextMedia, z SPACE w Speicherstadt albo z wewnętrznego IT dostawcy portowego.

Repozytorium trzyma motyw i własne wtyczki. Wtyczki z katalogu WordPress.org i Core nie żyją jako skopiowane foldery w Gicie, chyba że jest twardy powód (fork, łatka, air-gap). Gałąź funkcyjna na jedną zmianę: nowy blok, nowy CPT, poprawka a11y. Pull request ma opis, ekrany albo nagranie z edytora, i checklistę: i18n, dostępność, brak sekretów, czy blok nie psuje klasycznego szablonu jeśli jeszcze żyje.

przegląd kodu robi senior, który nie pisał tej gałęzi. Review czyta WordPress Coding Standards (PHPCS, sniffs WordPress-Core), ale też czyta intencję: czy CPT nie powinien być wtyczką, czy ACF nie dubluje atrybutów bloku, czy hook nie wisi na init bez potrzeby. Komentarz w PR jest po angielsku albo po polsku, zależnie od recenzenta po stronie klienta; niemieckie IT w Hamburgu zwykle woli angielski w diffie i niemiecki w dokumentacji redakcyjnej.

Środowisko testowe jest kopią produkcji z zanonimizowanymi danymi. WP-CLI search-replace na URL, osobne klucze, wyłączone crony, które wysyłają maile do prawdziwych klientów. Redakcja klika po stagingu z prawdziwymi wzorcami Gutenberg, nie po localhostcie programisty. Regresja wielojęzyczna, regresja klawiatury i regresja embargo (status future, paywall, purge cache) dzieją się tutaj. Promocja na produkcję jest udokumentowanym krokiem: tag albo merge do main, build zasobów, cache warmup, ścieżka wycofania (poprzedni tag). Zespół nie wgrywa „na szybko” jednego pliku PHP przez SFTP, bo potem nikt nie odtworzy, co stało na produkcji w piątek przed Reeperbahn Festival.

WP-CLI jest narzędziem operacyjnym: flush transients, wp scaffold, import CPT, sprawdzanie autoload. Nie zastępuje testów. Tam, gdzie wtyczka liczy (daty, mapowanie, walidacja), idzie PHPUnit. Bloki z nietrywialnym UI dostają test w edytorze na stagingu, bo jsdom nie złapie, że InspectorControls zasłania przycisk Speichern w niemieckim locale.

Budżet wydajności jest częścią odbioru, nie osobnym projektem. Lighthouse i Core Web Vitals na szablonach, które naprawdę istnieją: archiwum CPT, single, strona z wzorcem hero. Obrazy w AVIF/WebP przez proces budowania, CSS motywu bez importu całego uniwersum bloków, JS edytora nie na froncie. Redis i obiektowy cache mają sens, gdy transjenty i zapytania CPT to pokazują, nie gdy „tak się robi przy portowych firmach”.

Dla serwisu B2B albo redakcyjnego w Hamburgu liczy się czas do pierwszego bajtu z sieci w północnych Niemczech, nie tylko z telefonu na tarasie. Monitoring z jednego regionu USA kłamie. Punkt pomiaru w DE albo przynajmniej w UE jest częścią kontraktu operatorskiego, nie dodatkiem.

#WordPress Meetup Hamburg i lokalna scena techniczna

Hamburg WordPress Meetup spotyka się w Werkheim przy Planckstraße 13. W 2026 roku w programie były między innymi bezpieczeństwo WordPressa na 2026 (28 kwietnia), wtyczki eventowe, bloki wyłącznie w PHP oraz WordPress 7.1 z warsztatem serwisowym (28 lipca). To nie jest kanał sprzedaży. To jest miejsce, w którym widać, jak lokalni maintainerzy aktualizują, jak rozmawiają o uprawnieniach i o hoście.

Konkretne tematy z 2026 roku, które ustawiają poprzeczkę dla motywu:

  • Bezpieczeństwo WordPressa: wp2shell i inne CVE pokazują, że niezałatany Core jest gorszy niż brak nowej wtyczki „security”.
  • Wtyczki eventowe: bezpośrednio dotyczą briefów z Reeperbahn Festival i SPACE w Speicherstadt.
  • Bloki wyłącznie w PHP: render serwerowy, nie React na froncie.
  • WordPress 7.1 z warsztatem serwisowym: aktualizacja Core to proces, nie klik w panelu.

WP-CLI w development nie jest ozdobą meetupową. To sposób, żeby scaffold bloku, różnicę wtyczek i eksport listy użytkowników zrobić powtarzalnie, z logiem, bez klików wp-admin na produkcji. Po sesji o bezpieczeństwie na meetupie argument „zrobimy to ręcznie w panelu” brzmi jeszcze gorzej.

Szersza scena hamburska obejmuje też nextMedia.Hamburg i SPACE w Speicherstadt, gdzie branża medialna i marketingowa spotyka się z technologią. Dla briefu hamburskiego ważniejsze od WordCampu jest to, że lokalny meetup siedzi przy Planckstraße: ludzie, którzy przychodzą na performance, pluginy i bezpieczeństwo, zadają inne pytania niż marketingowa agencja z prezentacją „AI w treściach”. Motyw i wtyczki, które wychodzą z tego zespołu, muszą przeżyć takie pytania: skąd alt tekst, kto go akceptuje, czy blok eventowy nie psuje cache przy embargo.

#Sklep WooCommerce to osobny zakres

Ta strona nie buduje checkoutu, bramek ani katalogu produktów. Jeśli brief schodzi na sklep, VAT, Hermes, DHL albo bramkę, zakres zmienia właściciela i opisuje go programista WooCommerce w Hamburgu. Pillar bez miasta: programista WooCommerce. Mieszanie sklepu z motywem korporacyjnym w jednym repozytorium bez granicy wtyczek to najszybsza droga do tego, żeby aktualizacja Woo rozwaliła landing pod Reeperbahn Festival, albo odwrotnie.

Korporacyjna strona z jednym przyciskiem „sklep” do zewnętrznego Woo może zostać w motywie jako link. Sama logika koszyka nie.

#Po wdrożeniu: przekazanie albo opieka

Zlecenie programistyczne kończy się dokumentacją, sesją przekazania i dostępem Git dla zespołu klienta. Runbook opisuje: jak dodać wzorzec, jak zarejestrować nowy CPT, jak wypuścić gałąź, jak odtworzyć środowisko testowe, kogo wołać gdy edytor nie zapisuje. Jeśli po starcie potrzebne są aktualizacje Core, monitoring i stały dyżur, to jest opieka techniczna WordPress w Hamburgu, nie ukryty aneks do motywu. Pillar bez miasta: utrzymanie stron WordPress.

Wycena prac programistycznych jest indywidualna i wychodzi na piśmie po ustaleniu zakresu. Na tej stronie nie ma cennika ani „pakietów godzin”. Zmiana zakresu (nagle FSE, nagle drugi język, nagle integracja z intranetem) wraca do zapisu, zanim wejdzie w sprint.

#Jak zacząć projekt w Hamburgu

Do rozmowy wystarczy krótki opis: jaki motyw i jakie wtyczki są dziś, kto redaguje (PL/DE), czy front ma być formalnym Sie, czy w grze jest CPT pod wydarzenia i publikacje, czy IT po stronie Hamburgu wymaga Git i stagingu od dnia zero. Zespół ogląda instalację, spisuje ryzyka (Gutenberg używany jak notatnik, sekrety w repo, brak oświadczenia o dostępności, ACF zdublowane z blokami) i proponuje plan z kryteriami odbioru.

Kontakt: formularz WPPoland. Pillar usługowy, bez miasta w slugach, zostaje przy programiście WordPress.

Społeczność WordPress w Hamburgu

Jako aktywni członkowie globalnej społeczności open-source, wspieramy lokalne inicjatywy w Hamburgu. Wierzymy, że dzielenie się wiedzą buduje lepszy ekosystem technologiczny.

Przewodniki metodyczne (SEO, GEO, compliance)

Te materiały opisują, jak pracujemy nad cytowaniami w modelach językowych, modernizacją WooCommerce B2B oraz odpornością operacyjną pod NIS2 i przetargi - niezależnie od miasta realizacji.

Co wyróżnia w Hamburgu

Lokalna ekspertyza: - Seniorskie prace WordPress dla firm w Hamburgu - Dedykowane motywy, wtyczki, wzorce bloków Gutenberg i integracje - WordPress Coding Standards, dostępność BITV i i18n wpisane w proces realizacji Nasz zespół rozumie specyfikę rynku w Hamburgu i dostosowuje rozwiązania do lokalnych potrzeb biznesowych. W praktyce oznacza to nacisk na Core Web Vitals, lokalny intent oraz architekturę informacji dopasowaną do rynku w Hamburgu.

Potrzebujesz usługi: Programista WordPress w Hamburgu?

Porozmawiajmy o tym, jak możemy wprowadzić Twoją stronę na wyższy poziom wydajności.

Umów bezpłatną konsultację w Hamburgu

FAQ - Programista WordPress w Hamburgu

Jakie projekty WordPress podejmujecie w Hamburgu?

Dedykowane motywy zgodne z WordPress Coding Standards, własne wtyczki, wzorce bloków Gutenberg, modele treści oparte na CPT plus ACF albo natywne atrybuty bloków, integracje REST oraz refaktoryzacje starszych motywów. Zakres trzyma się prac programistycznych WordPress. Jeśli inny stack faktycznie byłby lepszy, zespół zapisuje to na piśmie zamiast zmieniać temat strony.

Motyw od zera czy rozszerzenie istniejącego?

Oba podejścia. Nowy projekt zwykle zaczyna się od motywu blokowego opartego o API edytora: theme.json, wzorce bloków, warianty. Odziedziczone instalacje częściej potrzebują skoncentrowanej refaktoryzacji hierarchii szablonów i procesu budowania zasobów niż przepisywania od zera. Decyzja zapada na bazie kosztu względem długu, a nie tego, co ciekawiej się buduje.

Gutenberg i FSE czy motyw klasyczny?

Dla nowych budów domyślem jest motyw blokowy z edycją całej witryny, bo tam zmierza edytor WordPressa. Klasyczne motywy PHP zostają, gdy istniejąca warstwa logiki w szablonach jest zbyt kosztowna do przeniesienia, albo gdy zespół redakcyjny pracuje w klasycznym edytorze i zmiana narzędzia byłaby większym ryzykiem niż dług techniczny. Wybór trafia do pisemnego kompromisu technicznego, nie do decyzji ideologicznej.

Czy budujecie też wtyczki, czy tylko motywy?

Jeśli funkcjonalność jest logiczna, a nie prezentacyjna, trafia do wtyczki, żeby przetrwała zmianę motywu. Motywy opisują prezentację i strukturę redakcyjną. Wtyczki trzymają integracje, własne typy treści, logikę biznesową, endpointy REST i narzędzia administracyjne. Granica zapada na etapie architektury i jest zapisana w runbooku.

Jak wygląda przekazanie i dalsze utrzymanie?

Żyjąca dokumentacja dla redaktorów i programistów, ślad przegląd kodu na każdej gałęzi, pisemny zapis decyzji architektonicznych oraz sesja przekazania na koniec zlecenia. Projekt może następnie trafić do zespołu klienta albo na opcjonalną opiekę z tą samą dokumentacją. Stałe aktualizacje i monitoring opisuje osobna strona opieki, nie ten brief.

Technologie i Specjalizacje - w Hamburgu

Wspominamy o:

WordPressDer SpiegelNorddeutscher RundfunkSEOWydajność stron internetowych
Powiązany klaster

Sprawdź inne usługi WordPress i bazę wiedzy

Wzmocnij swój biznes dzięki profesjonalnemu wsparciu technicznemu w kluczowych obszarach ekosystemu WordPress.