WordPress website
laten bouwen met vakmanschap.

Bouwen is meer dan klikken en slepen. Wij schrijven WordPress websites regel voor regel, met dezelfde precisie waarmee een architect een fundament berekent. Geen visuele builders, geen samengeraapte plugins, geen shortcuts. Elke regel PHP, elke CSS property en elk stuk JavaScript heeft een reden om er te staan. Dat is het verschil tussen een website die er goed uitziet en een website die goed gebouwd is.

250+
WordPress projecten gebouwd
21+
Jaar bouwervaring
< 1s
Gemiddelde laadtijd
Handgeschreven themes Performance engineering Veilig op codeniveau Volledig eigenaarschap

Gebouwd voor bedrijven door heel Nederland

Waarom bouwen iets anders is dan samenstellen

De meeste WordPress websites in Nederland worden niet gebouwd. Ze worden samengesteld. Een theme uit een marketplace, een pagebuilder als tussenlaag, een handvol plugins die elk een stukje functionaliteit toevoegen. Het eindresultaat functioneert, tot op zekere hoogte. Maar het is geen bouwwerk. Het is een stapeling van onderdelen die nooit voor elkaar bedoeld waren, bijeengehouden door hoop en compatibiliteit.

Bouwen, in de echte betekenis van het woord, begint met een leeg bestand. Het begint met de vraag: wat moet deze website doen, voor wie, en hoe bereiken we dat met zo min mogelijk code en zo veel mogelijk controle? Pas als die vragen beantwoord zijn, schrijven we de eerste regel. Dat is de filosofie die elke WordPress website die wij opleveren doordrenkt. Niet meer code dan nodig. Niet minder dan optimaal. Precies wat het project vraagt, handgeschreven en doordacht.

In de bouwwereld zou niemand accepteren dat een aannemer prefab wanden tegen elkaar plakt en het een huis noemt. In webdevelopment is dat helaas de standaard geworden. Wij kiezen bewust voor het ambacht. Niet omdat het sneller is, niet omdat het goedkoper is, maar omdat het resultaat fundamenteel beter is. Op elk meetbaar criterium: snelheid, veiligheid, onderhoudbaarheid, levensduur en controle.

"Een goed gebouwde website herken je niet aan hoe die eruitziet. Die herken je aan de broncode, de laadtijd en het feit dat die na vijf jaar nog steeds foutloos draait."

Code als ambacht: wat er onder de motorkap zit

De broncode van een website is voor de meeste opdrachtgevers onzichtbaar. Je ziet het ontwerp, je voelt de snelheid, je ervaart het gemak waarmee je content kunt bewerken. Maar achter al die ervaringen zit code. En de kwaliteit van die code bepaalt of je website over drie jaar nog steeds soepel draait of dat je voor de keuze staat om opnieuw te beginnen. Hieronder een kijkje onder de motorkap van hoe wij WordPress websites bouwen.

WordPress Coding Standards als vertrekpunt

WordPress heeft officiële coding standards voor PHP, HTML, CSS en JavaScript. Die standards definiëren hoe code geformateerd moet worden, hoe functies benoemd worden, hoe commentaar geschreven wordt en welke patronen wel en niet acceptabel zijn. Het zijn geen suggesties: het is de standaard waarmee WordPress Core zelf gebouwd wordt. Onze code volgt deze standards strikt. Dat betekent dat elke developer die na ons de code opent, direct begrijpt wat er gebeurt. Consistent genaamde functies, logische bestandsstructuur, documentatie bij elke functie en voorspelbare patronen. Code die je kunt lezen als een boek, niet als een puzzel.

Escaping en sanitization: beveiliging in elke regel

Een van de meest onderschatte aspecten van WordPress development is output escaping en input sanitization. Elke variabele die naar de browser wordt gestuurd, moet ge-escaped worden om cross-site scripting aanvallen te voorkomen. Elke input die van een gebruiker komt, moet gesanitized worden voordat die in de database terechtkomt. WordPress biedt daar uitstekende functies voor: esc_html, esc_attr, esc_url, wp_kses, sanitize_text_field, sanitize_email. Wij gebruiken ze consequent, in elke template, bij elke output. Het is de reden waarom onze themes niet kwetsbaar zijn voor de XSS aanvallen die bij duizenden WordPress websites wel lukken.

Schone HTML: wat de browser ontvangt

De HTML die een website genereert is de taal waarin de browser denkt. Schone, semantische HTML laadt sneller, is beter toegankelijk voor screenreaders en wordt beter begrepen door zoekmachines. Onze WordPress themes genereren minimale, betekenisvolle HTML. Heading tags die de documentstructuur weerspiegelen, niet die een bepaalde tekstgrootte produceren. Lijsten voor opsommingen, nav elementen voor navigatie, article elementen voor content blokken, section elementen voor thematische groepering. Elke tag heeft een semantische reden om er te staan.

Vergelijk dat met de HTML output van een pagebuilder. Een simpele sectie met een heading en twee alinea's genereert in Elementor gemiddeld 15 geneste div elementen met inline styles, data attributes en klassen als elementor-widget-wrap, elementor-element en e-con-inner. Onze implementatie van diezelfde sectie: een section element, een heading en twee paragraph tags. Zeven regels HTML in plaats van vijftig. Dat verschil vermenigvuldigt zich over elke pagina, elke sectie, elk element. Het cumulatieve effect op laadsnelheid en parseertijd is meetbaar en substantieel.

CSS zonder ballast

De stijlen van een pagebuilder website bevatten CSS voor elke mogelijke layout optie, elk denkbaar widget type en elke kleurcombinatie die het systeem ondersteunt. Bij Elementor is dat een stylesheet van meer dan 300KB die bij elke paginaload volledig meegestuurd wordt, ook al gebruik je maar een fractie van de beschikbare opties. Onze CSS bevat uitsluitend de stijlen die het ontwerp nodig heeft. Typografie, layout, kleuren, responsive breakpoints en animaties die daadwerkelijk in het ontwerp voorkomen. Gemiddeld komt dat neer op 15-25KB compressed CSS. Niet omdat we bezuinigen, maar omdat er simpelweg niet meer nodig is als je alleen schrijft wat je gebruikt.

Database queries: alleen ophalen wat je nodig hebt

Elke WordPress paginaload triggert database queries. De vraag is: hoeveel? Een pagebuilder site haalt niet alleen de content op, maar ook de layout configuratie, de widget instellingen, de global styles, de responsive settings en de revisiehistorie van elke builder sectie. Dat kan oplopen tot meer dan honderd queries per paginaload. Onze WordPress websites halen de content op die de pagina nodig heeft en niets meer. Met WP_Query gebruiken we alleen de velden die we nodig hebben via de fields parameter. Met get_post_meta halen we specifieke meta waarden op in plaats van alle metadata in een keer. Transient caching voor queries die niet bij elke load opnieuw uitgevoerd hoeven te worden. Het resultaat: gemiddeld 15-25 database queries per pagina in plaats van 80-120.

"Snelheid is geen feature die we achteraf toevoegen. Het is het resultaat van elke beslissing die we nemen tijdens het bouwen."

Performance engineering: hoe wij sub-seconde laadtijden bereiken

Een snelle website is geen toevalligheid en geen kwestie van een caching plugin installeren. Het is het resultaat van tientallen technische beslissingen die samen zorgen voor een totaalervaring waarin elke pagina in minder dan een seconde volledig geladen is. Hier is hoe we dat bereiken, op codeniveau.

Critical rendering path optimalisatie

De critical rendering path is het pad dat de browser aflegt van het ontvangen van de eerste byte HTML tot het tonen van de eerste pixel op het scherm. Hoe korter dat pad, hoe sneller de pagina zichtbaar is voor de bezoeker. Wij optimaliseren dat pad door critical CSS inline te plaatsen in de head van het document. Dat zijn de stijlen die nodig zijn om de bovenste zichtbare helft van de pagina te renderen, de above the fold content. De rest van de CSS laden we asynchroon met rel="preload" en een onload fallback. JavaScript dat niet direct nodig is voor de initiële render wordt deferred geladen of krijgt het async attribuut. Fonts worden gepreload met font-display: swap zodat de tekst direct zichtbaar is, ook als het font nog onderweg is.

Server-side caching strategie

Onze WordPress hosting draait op LiteSpeed met objectcaching via Redis. Maar caching is niet simpelweg een schakelaar die je aanzet. Het vereist een theme dat compatibel is met full page caching, dat geen willekeurige PHP variabelen in de HTML mixt en dat dynamische elementen correct afhandelt via Edge Side Includes of JavaScript hydration. Onze themes zijn gebouwd met caching als uitgangspunt. Geen PHP die bij elke paginaload opnieuw uitgevoerd wordt voor statische elementen. Geen nocache headers waar ze niet nodig zijn. Het resultaat is een Time to First Byte van gemiddeld 80 tot 150 milliseconden, waar een niet-gecachede WordPress installatie gemiddeld op 800 tot 1200 milliseconden zit.

Afbeeldingsoptimalisatie op meerdere niveaus

Afbeeldingen zijn verantwoordelijk voor gemiddeld 60 tot 70 procent van het totale gewicht van een webpagina. Onze aanpak: automatische conversie naar WebP formaat met een AVIF fallback waar ondersteund. Responsive images via het srcset attribuut zodat mobiele apparaten niet dezelfde 2000 pixels brede afbeelding laden als een desktop scherm. Lazy loading met de native loading="lazy" attribuut voor alle afbeeldingen buiten de initiële viewport, gecombineerd met fetchpriority="high" voor de Largest Contentful Paint afbeelding. Aspect ratio attributen op elk img element om layout shifts te voorkomen. Width en height definiëren we altijd, zodat de browser ruimte reserveert voordat de afbeelding geladen is. Die combinatie levert een Cumulative Layout Shift van 0 op, wat rechtstreeks bijdraagt aan een hogere Google ranking.

Resource hints en preloading

Moderne browsers ondersteunen resource hints die de laadstrategie verbeteren: dns-prefetch voor domeinen waar de pagina naar linkt, preconnect voor domeinen waar direct resources van geladen worden en preload voor kritieke bestanden die zo snel mogelijk beschikbaar moeten zijn. Wij configureren deze hints specifiek per pagina op basis van welke resources die pagina daadwerkelijk nodig heeft. Geen generieke lijst met preloads die op elke pagina geladen wordt, maar gerichte hints die de browser helpen om de juiste prioriteiten te stellen. In combinatie met HTTP/2 multiplexing en onze LiteSpeed configuratie levert dat een waterfall diagram op waar vrijwel alle resources parallel geladen worden, zonder onnodige round trips.

Core Web Vitals als meetlat

Google meet de gebruikerservaring van websites via drie Core Web Vitals: Largest Contentful Paint (hoe snel de grootste content verschijnt), Cumulative Layout Shift (hoe stabiel de pagina is tijdens het laden) en Interaction to Next Paint (hoe snel de pagina reageert op interactie). Onze WordPress websites scoren consistent in de groene zone op alle drie de metrics. Niet omdat we achteraf optimaliseren tot de scores kloppen, maar omdat de scores het natuurlijke resultaat zijn van hoe we bouwen. Als je begint met schone code, minimale resources en een doordachte laadstrategie, volgen goede Core Web Vitals vanzelf. Bij pagebuilder sites is het andersom: je begint met een zwaar framework en probeert achteraf de impact te beperken met caching plugins en lazy loading trucs. Dat werkt tot op zekere hoogte, maar het is bestrijding van symptomen in plaats van het wegnemen van de oorzaak.

Meetbaar verschil. We testen elke website die we opleveren met Google Lighthouse, WebPageTest en Chrome DevTools. Het gemiddelde resultaat van onze WordPress websites: Lighthouse Performance score boven 95, Time to First Byte onder 150ms, Largest Contentful Paint onder 1.2 seconden, Cumulative Layout Shift van 0, totaal paginagewicht onder 500KB. Dat zijn geen optimistische schattingen. Dat zijn de gemiddelden over onze projecten van het afgelopen jaar.

Van ontwerp naar werkende WordPress website: het technische bouwproces

Het ontwerp is klaar. Goedgekeurd. De mockups zien er precies uit zoals je ze voor ogen had. Maar hoe wordt een visueel ontwerp een werkende WordPress website? Dat transformatieproces is waar het technische vakmanschap zit. Hieronder nemen we je stap voor stap mee door hoe wij een goedgekeurd ontwerp omzetten in een volledig functioneel WordPress theme.

Stap 1: Componentenanalyse

Voordat we een enkele regel code schrijven, ontleden we het ontwerp in herbruikbare componenten. Welke elementen komen op meerdere pagina's terug? Welke secties zijn variaties op hetzelfde patroon? Waar zitten de dynamische onderdelen die vanuit WordPress gevuld moeten worden? Die analyse bepaalt de bestandsstructuur van het theme, de template parts die we aanmaken en de manier waarop we content velden definiëren. Het is het architectuurplan van het bouwwerk. Als je hier slordig bent, betaal je dat later terug in dubbele code, inconsistenties en een dashboard dat onlogisch in elkaar zit.

Stap 2: HTML en CSS als statisch prototype

We beginnen met het vertalen van het ontwerp naar statische HTML en CSS. Zonder WordPress, zonder PHP, zonder dynamische content. Pure markup en styling. Dit prototype is pixel-perfect identiek aan het goedgekeurde ontwerp en functioneert in de browser als een volledig responsieve website. Het voordeel van deze tussenstap: we valideren het ontwerp in de browser voordat we het complexer maken met WordPress integratie. Responsive gedrag, typografie, animaties, hover states en formulierlayouts worden nu getest en verfijnd. Elke inconsistentie die we hier vangen, hoeven we niet later in PHP te repareren.

Stap 3: WordPress integratie

Nu wordt het statische prototype een dynamisch WordPress theme. De HTML templates worden PHP bestanden in de WordPress template hierarchy. Hardcoded teksten worden WordPress functies: the_title, the_content, the_excerpt. Herhalende secties worden WordPress loops met WP_Query. Bewerkbare velden worden geregistreerd via Advanced Custom Fields en gekoppeld aan de juiste templates. Navigatie wordt een wp_nav_menu met een custom walker class die de HTML genereert die het ontwerp vereist. Het WordPress dashboard wordt ingericht met custom post types, taxonomieën en option pages zodat elke bewerkbare content een logische plek heeft.

Stap 4: Custom post types en content architectuur

WordPress kent standaard twee content types: posts en pages. Voor de meeste bedrijfswebsites is dat niet voldoende. Een aannemer heeft projecten. Een restaurant heeft gerechten op een menu. Een advocatenkantoor heeft rechtsgebieden en teamleden. Wij registreren custom post types die passen bij de content structuur van het bedrijf. Met custom taxonomieën voor categorisering, custom meta fields voor gestructureerde data en template files die specifiek zijn voor elk post type. De slugs, labels en menu posities worden afgestemd op de navigatiestructuur van het ontwerp. Het resultaat is een WordPress dashboard dat aanvoelt alsof het speciaal voor jouw bedrijf gebouwd is, omdat het dat ook is.

Stap 5: Formulieren, interactie en functionaliteit

Contactformulieren, offerte aanvragen, filterbare portfolio's, interactieve kaarten, accordeons, tabbladen: elke interactieve functionaliteit wordt op maat geschreven. Formulieren worden verwerkt via AJAX met nonce verificatie en server-side validatie. Geen page reload, geen onnodige plugin overhead. De bevestigingsmails worden getriggerd via wp_mail met een custom HTML template. Formulierdata wordt opgeslagen in een custom database tabel als de opdrachtgever dat wil, of direct doorgestuurd per mail. Interactieve elementen gebruiken vanilla JavaScript of minimale libraries. Geen jQuery dependency tenzij het project het vereist, geen 200KB animatiebibliotheek voor een simpele fade-in.

Stap 6: Testen op elk niveau

Voordat een website onze testomgeving verlaat, doorloopt die een uitgebreide testprocedure. Cross-browser testing in Chrome, Firefox, Safari en Edge. Responsive testing op fysieke apparaten: iPhones, Android telefoons, iPads en diverse schermformaten. Formuliertests met geldige en ongeldige input. Toegankelijkheidschecks met axe DevTools. Performance audits met Lighthouse en WebPageTest. Broken link checks over alle pagina's. SSL validatie. Open Graph en Twitter Card validatie voor social media previews. Schema markup validatie via het Google Rich Results Test tool. We gaan pas live als elk onderdeel groen licht heeft.

"Het bouwproces is waar het verschil ontstaat. Twee websites kunnen er identiek uitzien en toch fundamenteel anders gebouwd zijn. Het verschil merk je pas als je de broncode opent of een jaar later een aanpassing nodig hebt."

Beveiliging op codeniveau en toekomstbestendigheid

Een WordPress website beveiligen is meer dan een security plugin installeren en hopen dat het goed komt. Echte beveiliging begint in de code zelf, bij elke functie die data verwerkt, bij elke query die de database raakt en bij elke actie die een gebruiker kan uitvoeren. Hier is hoe wij beveiliging inbouwen op het niveau waar het thuishoort.

Prepared statements voor database queries

SQL injection is een van de oudste en meest voorkomende aanvalstechnieken op webapplicaties. Het principe is simpel: een aanvaller voegt SQL code in via een invoerveld, en als de applicatie die input ongefilterd in een database query stopt, kan de aanvaller data lezen, wijzigen of verwijderen. De verdediging is even simpel: prepared statements. WordPress biedt de wpdb::prepare methode die placeholders gebruikt in plaats van directe string concatenatie. Wij gebruiken prepared statements voor elke custom database query, zonder uitzondering. Het is een absolute regel in onze codebase: geen enkele variabele van buitenaf komt ooit direct in een SQL query terecht.

Nonce verificatie voor formulieren en AJAX

Nonces in WordPress zijn eenmalige tokens die verifiëren dat een actie uitgevoerd wordt door een geautoriseerde gebruiker via het verwachte formulier of endpoint. Zonder nonce verificatie kan een kwaadwillige website een verzoek doen namens een ingelogde gebruiker. Dat heet cross-site request forgery en het is verrassend eenvoudig uit te voeren op websites die geen nonces gebruiken. Wij genereren nonces voor elk formulier en elke AJAX call, verifiëren ze server-side met wp_verify_nonce en weigeren elk verzoek dat de verificatie niet doorstaat. Het is een extra stap in de code die een groot verschil maakt in de beveiliging.

Capability checks voor admin functies

WordPress heeft een uitgebreid rollen- en rechtensysteem. Niet elke ingelogde gebruiker mag dezelfde dingen doen. Een redacteur mag content bewerken maar geen plugins installeren. Een abonnee mag een profiel bewerken maar geen pagina's publiceren. Wij controleren bij elke actie of de huidige gebruiker de juiste rechten heeft via current_user_can. Custom admin pagina's, custom REST API endpoints en custom AJAX handlers: ze bevatten allemaal een capability check voordat ze een actie uitvoeren. Het voorkomt dat een gebruiker met beperkte rechten per ongeluk of opzettelijk functies bereikt die niet voor hen bedoeld zijn.

Toekomstbestendigheid door standaarden

WordPress brengt meerdere keren per jaar updates uit. Major versies voegen nieuwe functies toe en wijzigen soms de manier waarop het platform werkt. Themes die gebouwd zijn met shortcuts, deprecated functies of directe database manipulatie breken bij zulke updates. Onze themes gebruiken uitsluitend de officiële WordPress API's en functies. Geen directe $wpdb queries waar een WordPress functie beschikbaar is. Geen directe bestandsmanipulatie waar de WordPress Filesystem API gebruikt kan worden. Geen hardcoded paden waar WordPress constanten bestaan. Die discipline betekent dat onze themes compatibel blijven met toekomstige WordPress versies zonder aanpassingen. We hebben themes draaien die vijf jaar geleden zijn gebouwd en die na elke WordPress update feilloos blijven functioneren.

Het contrast met een pagebuilder website

Een Elementor of Divi website is afhankelijk van een jaarlijkse licentie. Als je stopt met betalen, krijg je geen updates meer. Geen updates betekent geen beveiligingspatches. Het betekent ook dat bij een WordPress major update de pagebuilder mogelijk niet meer compatibel is. Je bent overgeleverd aan het updateschema van een commercieel bedrijf. Bij een custom theme heb je die afhankelijkheid niet. De code is van jou, volgt WordPress standaarden en is niet gekoppeld aan een licentiemodel. Als WordPress over vijf jaar versie 8 draait, werkt jouw theme nog steeds. Omdat het gebouwd is op de fundamenten die WordPress zelf gebruikt, niet op een laag erboven die elk moment kan veranderen.

Eigenaarschap van de code. Alles wat wij bouwen is volledig eigendom van de opdrachtgever. Het custom theme, de functions, de template files, de CSS, het JavaScript. Er zijn geen licentiekosten, geen eigendomsvoorbehoud en geen beperkingen op wat je met de code mag doen. Wil je over drie jaar met een ander team verder? Dan overhandigen we een gedocumenteerde codebase die elke ervaren WordPress developer kan oppakken. Dat is geen gunst, dat is hoe eerlijk bouwen werkt. Bekijk onze pakketten en prijzen.

Hoe scoort jouw website?

Scan je website op snelheid, veiligheid en privacy. Direct resultaat, volledig gratis.

Wat onze klanten zeggen

Echte reviews van echte klanten.

0

Gebaseerd op 23 reviews

Bekijk op Trustpilot
0

Gebaseerd op 34 reviews

Bekijk op Google

Handgeschreven code vs. een pagebuilder constructie.

Onder de motorkap verschilt een custom gebouwde WordPress website fundamenteel van een website die met een visuele builder is samengesteld.

Wiwi custom bouw

  • Theme geschreven vanaf een leeg bestand
  • HTML output: 7 elementen voor een sectie
  • CSS totaal: 15-25KB compressed
  • Database queries per pagina: 15-25
  • Geen jaarlijkse licentiekosten voor het theme
  • Compatibel met toekomstige WordPress updates
  • Code leesbaar voor elke PHP developer

Pagebuilder constructie

  • Visuele builder bovenop een gekocht theme
  • HTML output: 50+ elementen voor een sectie
  • CSS totaal: 300KB+ ongecompressed
  • Database queries per pagina: 80-120
  • Jaarlijkse licentie verplicht voor updates
  • Afhankelijk van compatibiliteit na updates
  • Code onleesbaar door gegenereerde structuur

Hetzelfde WordPress platform. Een fundamenteel ander bouwwerk.

Veelgestelde vragen.

"Maken" omvat het hele traject van strategie tot oplevering. "Bouwen" is het technische gedeelte: het schrijven van de code, het opzetten van de content architectuur en het integreren van het ontwerp in een werkend WordPress theme. Op deze pagina focussen we op dat technische bouwproces. Op onze WordPress website laten maken pagina vind je het complete plaatje inclusief pakketten en prijzen.
Een starter theme bespaart een paar uur bij de start, maar je neemt de architectuurbeslissingen van iemand anders over. De bestandsstructuur, de naamgevingen, de opgenomen functies: die zijn generiek opgezet voor een breed scala aan projecten. Bij een custom theme maken we die keuzes zelf, specifiek voor het project. Dat levert een schonere codebase op die makkelijker te onderhouden en uit te breiden is.
ACF is het gereedschap waarmee we het WordPress dashboard inrichten voor de eindgebruiker. We registreren field groups met specifieke veldtypen per pagina of post type: tekstvelden, afbeeldingsvelden, repeaters voor herhalende secties, flexible content voor modulaire pagina's. De velden worden in de templates aangeroepen via get_field en the_field met altijd een fallback voor als een veld leeg is. ACF Pro maakt het mogelijk om het dashboard precies af te stemmen op de content die de opdrachtgever wil beheren.
Onze projecten komen uit op gemiddeld 5 tot 8 actieve plugins. Dat is een fractie van de 25 tot 40 plugins die een standaard WordPress installatie met pagebuilder heeft. Elke plugin die we installeren heeft een specifieke reden om er te zijn en is niet te vervangen door custom code zonder onevenredige tijdsinvestering. Denk aan ACF Pro, Yoast SEO en WPML voor meertaligheid. Alles wat we zelf efficiënt kunnen schrijven, schrijven we zelf.
De WordPress template hierarchy is het systeem waarmee WordPress bepaalt welk PHP bestand gebruikt wordt om een pagina te renderen. Het gaat van specifiek naar generiek: single-project.php voor een enkel project, archive-project.php voor het projectoverzicht, single.php als fallback voor elk post type en uiteindelijk index.php als allerlaatste vangnet. Wij zetten die hierarchy bewust in om voor elk type content een geoptimaliseerde template te bieden. Dat is efficiënter dan een generiek template dat via conditionele logica bepaalt wat het moet tonen.
We ondersteunen de block editor waar het toegevoegde waarde biedt voor de content workflow van de opdrachtgever. Voor pagina's met een vaste structuur gebruiken we ACF velden die een voorspelbare layout garanderen. Voor content met een redactioneel karakter, zoals blogposts, configureren we de block editor met een beperkte set toegestane blocks die passen bij het ontwerp. Custom blocks schrijven we wanneer het standaard aanbod niet voldoet. De keuze tussen ACF en blocks maken we per project op basis van wie de content gaat beheren en hoe.
Caching plugins zijn symptoombestrijding voor trage code. Onze websites zijn snel door hoe ze gebouwd zijn, niet door een cachelaag erboven. Dat gezegd hebbende: caching op serverniveau via LiteSpeed en Redis object cache is onderdeel van onze hostingstack en levert aanvullende snelheidswinst. Maar het fundament is altijd schone, efficiënte code die ook zonder cache acceptabel presteert.
Een CSS framework als Bootstrap of Tailwind bevat stijlen voor componenten die je wellicht nooit gebruikt. Bootstrap voegt 150KB+ CSS toe. Tailwind genereert alleen wat je gebruikt, maar introduceert een bouwstap en utility classes in je HTML die de leesbaarheid verminderen. Onze handgeschreven CSS bevat precies de stijlen die het ontwerp vereist. Gemiddeld 15 tot 25KB. Zonder framework afhankelijkheid, zonder bouwstap, zonder concessies aan leesbaarheid.
Elke functie in het theme bevat een PHPDoc block met beschrijving, parameters en return type. Het theme bevat een style.css header met versienummer en projectbeschrijving. Custom post types, taxonomieën en ACF veldgroepen worden benoemd met duidelijke labels en helptext. Bij oplevering ontvangt de opdrachtgever een technisch document met de bestandsstructuur, de gebruikte hooks en filters en instructies voor gangbare aanpassingen.
Ja, dat is een expliciet doel van hoe wij bouwen. Onze code volgt WordPress Coding Standards, gebruikt standaard WordPress functies en API's, is consistent gestructureerd en gedocumenteerd. Een ervaren WordPress developer kan onze codebase openen en direct begrijpen wat er gebeurt. Er is geen proprietary framework, geen ongedocumenteerde abstractielaag en geen vendor lock-in.
We testen op meerdere niveaus: cross-browser (Chrome, Firefox, Safari, Edge), cross-device (fysieke telefoons en tablets), formulierverwerking (geldige en ongeldige input), performance (Lighthouse, WebPageTest), toegankelijkheid (axe DevTools), SEO (meta tags, schema markup, canonicals), beveiliging (input validation, nonce checks) en visuele regressie (vergelijking met het goedgekeurde ontwerp op pixel niveau).
Ja, voor projecten waar het past. Headless WordPress betekent dat WordPress als backend CMS functioneert en de frontend gebouwd wordt in een modern JavaScript framework. We hebben ervaring met WordPress als headless CMS via de REST API in combinatie met frontends in React en Astro. Het is een goede keuze voor specifieke use cases, maar voor de meeste bedrijfswebsites biedt een traditioneel custom theme het beste resultaat qua onderhoud, kosten en toegankelijkheid. We adviseren op basis van de specifieke situatie.

Neem contact op.

We denken graag mee. Vrijblijvend en eerlijk.