Bekijk de onderstaande video om te zien hoe je onze site als een web app op je startscherm installeert.
Opmerking: Deze functie is mogelijk niet beschikbaar in sommige browsers.
Opdracht: bestaande HTML-site omzetten naar een volwaardig WordPress Theme
Je krijgt een bestaande, werkende HTML/CSS/JavaScript-website. Zet deze website om naar een professioneel, onderhoudbaar WordPress Theme, waarbij het bestaande design, de layout en het gedrag van de huidige website zo nauwkeurig mogelijk behouden blijven.
Het doel is niet om simpelweg de HTML-bestanden in WordPress te plaatsen, maar om een echte WordPress-implementatie te bouwen waarbij alle dynamische content vanuit de WordPress-database komt en beheerders de content via de WordPress Admin kunnen aanpassen.
1. Analyseer eerst de bestaande website
Voordat je code gaat aanpassen:
Maak eerst een kort implementatieplan voordat je grote wijzigingen uitvoert.
- Inspecteer alle aanwezige HTML-, CSS-, JavaScript-, image-, font- en overige asset-bestanden.
- Breng de structuur van de website in kaart:
- pagina's
- headers
- footers
- navigatie
- hero-secties
- contentblokken
- kaarten/cards
- formulieren
- CTA's
- afbeeldingen
- iconen
- eventuele sliders/carrousels
- responsive gedrag
- Bepaal welke onderdelen:
- globale onderdelen zijn;
- pagina-specifiek zijn;
- herbruikbare componenten zijn;
- dynamische content bevatten.
- Identificeer alle hardcoded content die uiteindelijk uit WordPress moet komen.
- Controleer ook alle links, formulieren, JavaScript-functionaliteit en externe dependencies.
2. Bouw een echte WordPress Theme
Maak een zelfstandig WordPress theme met een duidelijke en onderhoudbare structuur.
Gebruik waar passend een structuur zoals:
theme-name/
├── style.css
├── functions.php
├── index.php
├── front-page.php
├── home.php
├── page.php
├── single.php
├── archive.php
├── 404.php
├── header.php
├── footer.php
├── sidebar.php
├── screenshot.png
│
├── template-parts/
│ ├── components/
│ ├── sections/
│ └── content/
│
├── inc/
│ ├── setup.php
│ ├── enqueue.php
│ ├── custom-post-types.php
│ ├── custom-fields.php
│ └── helpers.php
│
├── assets/
│ ├── css/
│ ├── js/
│ ├── images/
│ ├── fonts/
│ └── icons/
│
└── languages/
Pas deze structuur aan als een betere WordPress-architectuur gewenst is.
Gebruik WordPress-conventies en zorg dat de code begrijpelijk en onderhoudbaar is.
3. Behoud het bestaande design zo exact mogelijk
Het uiteindelijke WordPress-theme moet visueel zo dicht mogelijk bij de originele HTML-site liggen.
Behoud waar mogelijk:
Verander het design niet omdat je zelf een andere oplossing mooier vindt.
- kleuren
- fonts
- font sizes
- font weights
- line heights
- margins
- paddings
- borders
- border radii
- shadows
- grid/layout
- container widths
- afbeeldingen
- iconen
- hover states
- transitions
- animaties
- responsive breakpoints
- mobile menu
- sliders/carrousels
- interactieve elementen
De bestaande website is het visuele uitgangspunt.
Gebruik CSS zo veel mogelijk centraal en voorkom onnodige inline styles.
4. Maak content dynamisch
Dit is een belangrijk onderdeel van de opdracht.
Content mag niet hardcoded in de theme templates staan als deze door een websitebeheerder gewijzigd moet kunnen worden.
Bijvoorbeeld:
<h1>Welkom bij ons bedrijf</h1>
mag niet simpelweg zo in front-page.php blijven staan.
Maak hiervan bijvoorbeeld WordPress-content:
<?php the_title(); ?>
of gebruik geschikte custom fields / blocks wanneer het om specifieke content gaat.
Denk hierbij aan:
- pagina-titels
- teksten
- afbeeldingen
- CTA's
- buttons
- links
- testimonials
- teamleden
- diensten
- projecten
- nieuwsartikelen
- contactgegevens
- social media links
- hero-content
- section headings
- section descriptions
5. Gebruik de WordPress database correct
Alle beheersbare content moet uiteindelijk in de WordPress-database worden opgeslagen.
Gebruik hiervoor waar passend:
WordPress Pages / Posts
Gebruik standaard WordPress content types als dat logisch is.
Custom Post Types
Maak Custom Post Types voor content die een eigen entiteit vormt.
Bijvoorbeeld:
Diensten
Projecten
Teamleden
Testimonials
Cases
FAQ
Maak alleen Custom Post Types als daar daadwerkelijk een goede reden voor is.
Custom Fields
Gebruik custom fields voor gestructureerde data, bijvoorbeeld:
hero_title
hero_subtitle
hero_image
button_text
button_url
phone
company_address
Als een externe plugin zoals ACF beschikbaar is, mag je die gebruiken als dat de beste oplossing is. Zorg er wel voor dat de site niet onnodig afhankelijk wordt van plugins.
Als je custom fields zonder externe plugin kunt implementeren, heeft dat de voorkeur wanneer dit eenvoudig en onderhoudbaar blijft.
6. Denk goed na over globale content
Content die op meerdere pagina's voorkomt moet niet op iedere pagina afzonderlijk worden opgeslagen.
Denk bijvoorbeeld aan:
Gebruik hiervoor bijvoorbeeld:
- logo
- bedrijfsnaam
- telefoonnummer
- e-mailadres
- adres
- social media
- footer-content
- copyright
- algemene CTA
- navigatie
Maak geen onnodige duplicatie van dezelfde content.
- WordPress Customizer, indien passend;
- theme options;
- een settings page;
- of een andere nette WordPress-oplossing.
7. Navigatie
De bestaande navigatie moet worden omgezet naar een echte WordPress-menu-implementatie.
Gebruik bijvoorbeeld:
register_nav_menus()
en:
wp_nav_menu()
De beheerder moet het menu vanuit WordPress kunnen beheren.
Ondersteun waar nodig:
Behoud het bestaande uiterlijk.
- dropdowns
- actieve pagina states
- mobile navigation
- keyboard navigation
8. Afbeeldingen en media
Gebruik de WordPress Media Library.
Afbeeldingen mogen niet uitsluitend naar een statische theme-map verwijzen wanneer ze door een beheerder gewijzigd moeten kunnen worden.
Gebruik bijvoorbeeld:
wp_get_attachment_image()
waar passend.
Let op:
- alt-teksten
- responsive images
- correcte image sizes
- lazy loading waar geschikt
- WebP/AVIF indien WordPress dit ondersteunt
- geen onnodig grote afbeeldingen laden
9. JavaScript
Migreer bestaande JavaScript-functionaliteit naar WordPress.
Gebruik:
wp_enqueue_script()
en laad scripts niet hardcoded in HTML.
Controleer:
Gebruik JavaScript alleen waar nodig.
- dependencies
- load order
- defer waar geschikt
- mobile menu
- sliders
- modals
- animations
- forms
- eventuele AJAX-functionaliteit
10. CSS
Gebruik:
wp_enqueue_style()
voor stylesheets.
Vermijd:
Behoud het oorspronkelijke design.
- enorme inline CSS-blokken;
- dubbele CSS;
- ongebruikte CSS waar eenvoudig op te schonen;
- !important tenzij echt noodzakelijk;
- hardcoded absolute URLs.
11. WordPress coding standards
Schrijf code volgens gangbare WordPress-principes.
Gebruik onder andere:
esc_html()
esc_attr()
esc_url()
wp_kses_post()
sanitize_text_field()
waar relevant.
Let op:
De theme moet veilig zijn tegen veelvoorkomende WordPress/PHP-problemen.
- escaping
- sanitization
- nonces
- capability checks
- veilige database queries
- geen directe SQL als WordPress API's voldoende zijn
- geen onveilige user input
12. SEO
Behoud bestaande SEO-relevante informatie zoveel mogelijk.
Denk aan:
Gebruik geen eigen SEO-systeem als een bestaande SEO-plugin dit normaal gesproken verzorgt.
- correcte heading hierarchy
- één logische H1 per pagina
- semantic HTML
- title tags
- meta descriptions
- canonical URLs
- Open Graph data
- alt teksten
- correcte interne links
- redirects wanneer URL's veranderen
Het theme moet goed samenwerken met populaire SEO-plugins.
13. URLs en redirects
Bestaande URL's moeten zoveel mogelijk behouden blijven.
Als URL's veranderen:
Controleer alle interne links.
- identificeer de oude URL;
- bepaal de nieuwe URL;
- zorg voor een 301 redirect;
- voorkom broken links.
Gebruik geen hardcoded domeinnaam.
Gebruik bijvoorbeeld:
home_url()
site_url()
get_permalink()
waar passend.
14. Responsive design
De bestaande responsive functionaliteit moet behouden blijven.
Test minimaal:
Controleer specifiek:
- desktop
- laptop
- tablet
- mobile
Gebruik de bestaande breakpoints als deze aanwezig zijn.
- navigatie
- typography
- images
- cards
- grids
- buttons
- forms
- spacing
- overflow
- horizontaal scrollen
- touch interactions
15. Accessibility
Verbeter accessibility waar dit kan zonder het bestaande design te veranderen.
Denk aan:
Streef naar een goede WCAG-conforme implementatie.
- semantic HTML
- correcte headings
- alt attributes
- keyboard navigation
- focus states
- buttons versus links
- ARIA alleen wanneer nodig
- voldoende contrast
- formulieren met labels
- skip link
16. Performance
Maak het theme performant.
Let op:
Voorkom dat de conversie van HTML naar WordPress de site onnodig trager maakt.
- minimale hoeveelheid JavaScript
- CSS zo efficiënt mogelijk laden
- alleen benodigde assets laden
- lazy loading van afbeeldingen
- responsive images
- fonts efficiënt laden
- geen render-blocking resources als dat eenvoudig te voorkomen is
- geen onnodige libraries
- geen dubbele assets
17. Formulieren
Als de oorspronkelijke website formulieren bevat:
Hardcode geen e-mailadressen in JavaScript.
- behoud het bestaande design;
- zorg dat ze daadwerkelijk functioneren;
- valideer input;
- bescherm tegen spam;
- gebruik nonces waar relevant;
- geef duidelijke succes- en foutmeldingen.
Gebruik een WordPress-compatibele oplossing.
18. Hardcoded data opsporen
Voer na de implementatie een controle uit op hardcoded content.
Zoek onder andere naar:
hardcoded teksten
hardcoded URLs
hardcoded e-mailadressen
hardcoded telefoonnummers
hardcoded afbeeldingen
hardcoded menu-items
hardcoded bedrijfsgegevens
Bepaal per item of dit:
- bewust statisch is;
- WordPress-content moet worden;
- een theme setting moet worden;
- een custom field moet worden;
- een Custom Post Type moet worden.
19. Geen afhankelijkheid van de oorspronkelijke HTML
Het eindresultaat moet een echte WordPress-implementatie zijn.
Gebruik de oorspronkelijke HTML als referentie voor:
maar kopieer niet simpelweg alle HTML-bestanden één-op-één naar WordPress.
- design
- structuur
- content
- functionaliteit
Splits onderdelen op in herbruikbare WordPress-template parts.
20. Beheerbaarheid
Een niet-technische WordPress-beheerder moet de belangrijkste content kunnen wijzigen zonder code te hoeven aanpassen.
Controleer daarom bijvoorbeeld:
Pagina bewerken → content aanpassen → opslaan → frontend toont nieuwe content.
Dit moet werken voor alle belangrijke dynamische onderdelen.
21. Database/content migratie
Als de bestaande HTML-site al content bevat die naar WordPress moet worden overgezet:
Maak waar nodig een eenmalig migratiescript.
- identificeer alle content;
- bepaal waar deze in WordPress hoort;
- migreer de content;
- migreer afbeeldingen;
- koppel afbeeldingen correct aan de Media Library;
- controleer formatting;
- controleer links;
- controleer speciale tekens en encoding.
Een migratiescript mag na succesvolle migratie worden verwijderd of buiten productie worden gehouden.
Verwijder geen bestaande content voordat je hebt gecontroleerd dat de migratie succesvol is.
22. Maak geen onnodige plugin-afhankelijkheden
Gebruik WordPress core-functionaliteit waar mogelijk.
Voeg alleen een plugin-afhankelijkheid toe wanneer die daadwerkelijk waarde toevoegt.
Als een plugin noodzakelijk is, documenteer:
- welke plugin;
- waarom deze nodig is;
- welke functionaliteit hiervan afhankelijk is.
23. Fallbacks
Het theme moet netjes blijven functioneren wanneer content ontbreekt.
Bijvoorbeeld:
Voorkom lege HTML-elementen en PHP warnings.
- ontbrekende afbeelding;
- lege subtitle;
- geen CTA;
- lege custom field;
- geen testimonials;
- geen featured image.
24. Error handling
Zorg dat:
- PHP warnings/errors worden voorkomen;
- ontbrekende data netjes wordt afgehandeld;
- ontbrekende afbeeldingen geen broken layout veroorzaken;
- invalid URLs niet tot fouten leiden;
- custom fields gecontroleerd worden voordat ze gebruikt worden.
25. Maak een duidelijke component-architectuur
Herbruikbare elementen moeten niet meerdere keren volledig worden gekopieerd.
Bijvoorbeeld:
template-parts/
hero.php
card.php
testimonial.php
cta.php
section-heading.php
Gebruik WordPress template parts of vergelijkbare mechanismen.
26. Gutenberg / WordPress editor
Denk na over welke onderdelen de beheerder via de WordPress editor moet kunnen aanpassen.
Gebruik waar passend:
Maak niet alles een custom block als dat onnodig complex is.
- Gutenberg blocks;
- native WordPress editor;
- custom fields;
- Custom Post Types.
De oplossing moet onderhoudbaar blijven.
27. Behoud semantische HTML
Gebruik correcte HTML5-elementen zoals:
<header>
<nav>
<main>
<section>
<article>
<footer>
waar passend.
Gebruik geen <div> voor alles als een semantisch element beschikbaar is.
28. Browser compatibility
Controleer de website in moderne browsers:
Controleer vooral CSS features en JavaScript die mogelijk browserafhankelijk zijn.
- Chrome
- Firefox
- Safari
- Edge
29. Testing / QA
Voer na de conversie een volledige controle uit.
Controleer minimaal:
Functionaliteit
- Homepage
- Alle pagina's
- Navigatie
- Dropdowns
- Mobile menu
- Buttons
- Links
- Formulieren
- Sliders
- Animaties
- Search indien aanwezig
- 404 pagina
WordPress
- Theme activeert zonder errors
- Pagina's werken
- Posts werken
- Media Library werkt
- Menu's werken
- Permalinks werken
- Content is wijzigbaar vanuit Admin
- Custom fields werken
- Custom Post Types werken
Visual
Vergelijk de WordPress-versie met de oorspronkelijke HTML-versie.
Controleer:
- spacing
- typography
- kleuren
- images
- layout
- responsive gedrag
- hover states
- mobile layout
Technisch
- Geen PHP errors
- Geen JavaScript errors in console
- Geen 404 assets
- Geen broken links
- Geen mixed content
- Geen hardcoded domein
- Geen onnodige dependencies
- Geen ongebruikte oude HTML-bestanden
30. Visuele vergelijking
Gebruik de originele website als visual reference.
Als je screenshots kunt maken van de originele en nieuwe versie, vergelijk deze op:
Corrigeer afwijkingen totdat de WordPress-versie visueel zo goed mogelijk overeenkomt.
- positionering
- afmetingen
- spacing
- kleuren
- fonts
- responsive gedrag
"Functioneel hetzelfde" is niet voldoende; het uiterlijk moet eveneens zo exact mogelijk worden gereproduceerd.
31. Eindresultaat
Lever uiteindelijk een compleet WordPress theme op dat:
- direct in WordPress geïnstalleerd kan worden;
- het oorspronkelijke design behoudt;
- responsive is;
- content uit de database haalt;
- via WordPress Admin beheerd kan worden;
- geen onnodige hardcoded content bevat;
- veilig is;
- SEO-vriendelijk is;
- performant is;
- toegankelijk is;
- onderhoudbaar is;
- geen onnodige afhankelijkheid heeft van de oorspronkelijke HTML-site.
32. Documentatie
Maak daarnaast een korte README.md met:
- installatie-instructies;
- benodigde plugins;
- theme structuur;
- uitleg van Custom Post Types;
- uitleg van custom fields;
- waar globale instellingen worden beheerd;
- waar belangrijke componenten staan;
- eventuele migratiestappen;
- eventuele bekende beperkingen.
Belangrijke werkwijze
Werk gefaseerd:
Fase 1 — Analyse
Analyseer de volledige bestaande website en maak een implementatieplan.
Fase 2 — Architectuur
Bepaal:
- templates;
- components;
- WordPress content types;
- custom fields;
- globale settings;
- assets.
Fase 3 — Theme
Bouw het WordPress theme.
Fase 4 — Content
Migreer de bestaande content naar de WordPress database.
Fase 5 — Functionaliteit
Migreer JavaScript, formulieren, navigatie en interactieve elementen.
Fase 6 — Responsive/visual QA
Vergelijk de WordPress-versie met het origineel.
Fase 7 — Security/SEO/performance
Voer technische controles uit.
Fase 8 — Final QA
Test de volledige website en los gevonden problemen op.
Belangrijkste uitgangspunt
De WordPress-site moet voor de eindgebruiker visueel en functioneel hetzelfde aanvoelen als de oorspronkelijke HTML-site, maar technisch volledig gebruikmaken van WordPress als CMS.
Dus:
HTML-site
→ design + bestaande content + functionaliteit
WordPress
→ templates + database + CMS + beheer + dynamische content
Maak geen simpele HTML-wrapper rond WordPress. Bouw een echte, onderhoudbare WordPress theme-implementatie.
We gebruiken essentiële cookies om deze site te laten werken, en optionele cookies om de ervaring te verbeteren.