Direct naar de inhoud

Cookie-instellingen

Kies per soort welke cookies je toestaat. Je kunt je keuze altijd wijzigen via Cookie-instellingen onderaan elke pagina. Privacyverklaring

Noodzakelijk

Altijd aan

Nodig om in te loggen, je winkelwagen te bewaren en je keuzes te onthouden. Deze staan altijd aan.

Welke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: je sessie en ingelogd blijven
  • weboke_basket: je winkelwagen
  • wkBtwIncl: prijzen met of zonder btw tonen
  • wok_cookies: je cookiekeuze, 12 maanden

Meet welke advertentie tot een bezoek of bestelling leidt, zodat we niet betalen voor advertenties die niets doen.

Welke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), tot 90 dagen
  • OpenAI Ads, advertenties in ChatGPT
  • wok_aff: via welke partner je bij ons kwam (affiliateprogramma), 60 dagen

4,6

Land en taal

Elk land heeft zijn eigen site, met prijzen en btw van dat land.

Bekijken

Module 1 · 1.3

Nederlands

Bestanden, wp-config en de database

Module 1: Hoe WordPress werkt · Leestijd: 9 minuten

Leerdoel: Na deze les herken je de mappen van WordPress, de instellingen in wp-config.php en de belangrijkste databasetabellen, en weet je wat je waar vindt.

Kernbegrippen: wp-admin, wp-includes, wp-content (themes, plugins, uploads, mu-plugins), wp-config.php (DB_*, table_prefix, sleutels en salts, WP_DEBUG), .htaccess, wp_options (siteurl, home), wp_posts, wp_users

Twee helften: bestanden en database

Een WordPress-site bestaat altijd uit twee delen die bij elkaar horen:

  1. Bestanden in de webmap van je domein (bij DirectAdmin domains/example.com/public_html): de code van WordPress, je thema's, je plugins en alles wat je uploadt.
  2. Een database: al je teksten, pagina's, menu's, instellingen, gebruikers en reacties.

Dit onderscheid is belangrijk bij back-ups en verhuizingen. Een back-up met alleen de bestanden mist al je teksten. Een back-up met alleen de database mist al je foto's. Je hebt allebei nodig (les 8.1).

De mappen

Open je webmap in Bestandsbeheer of met een FTP-programma, dan zie je ongeveer dit:

public_html/
├── wp-admin/          het beheerscherm (core)
├── wp-includes/       de rest van WordPress (core)
├── wp-content/        alles wat van jou is
│   ├── themes/        de thema's
│   ├── plugins/       de plugins
│   ├── uploads/       je media, per jaar en maand: uploads/2026/11/
│   ├── mu-plugins/    "must use"-plugins (als die er zijn)
│   ├── languages/     vertalingen
│   └── upgrade/       tijdelijke map voor updates
├── .htaccess          regels voor de webserver
├── index.php          het startpunt van elk paginaverzoek
├── wp-config.php      de instellingen van deze installatie
├── wp-login.php       de inlogpagina
├── xmlrpc.php         een oude koppeling voor apps (les 7.3)
└── ...                andere wp-*.php-bestanden van de core

De vuistregel: wp-admin, wp-includes en de losse wp-*.php-bestanden zijn van WordPress. Die worden bij elke update overschreven. Zet daar nooit zelf iets in en pas er niets aan.

wp-content is van jou. Een update van WordPress laat die map met rust (behalve de standaardthema's en -plugins die meekomen). Hier gaan je thema's, plugins en uploads. Een paar dingen om te weten:

  • uploads groeit het hardst. Elke foto die je uploadt, bewaart WordPress in meerdere formaten (les 4.4). Een site met jaren nieuws kan gigabytes aan uploads hebben.
  • mu-plugins (must use) zijn plugins die altijd actief zijn en die je in het beheerscherm niet kunt uitzetten. Sommige hosters en plugins gebruiken ze. Ook inbrekers verstoppen er graag iets (les 7.5). Ken je een bestand daar niet, zoek dan uit waar het vandaan komt.
  • Een verwijderde plugin verdwijnt uit plugins. Een uitgezette plugin blijft staan, met al zijn code (les 5.4).

wp-config.php: de instellingen

wp-config.php is het eerste wat WordPress laadt. Er staan de gegevens in waarmee WordPress de database bereikt, en een paar instellingen voor de hele installatie. Een ingekorte versie:

define( 'DB_NAME', 'gebruiker_wp1' );
define( 'DB_USER', 'gebruiker_wp1' );
define( 'DB_PASSWORD', 'een-lang-willekeurig-wachtwoord' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );

define( 'AUTH_KEY',         'lange willekeurige tekst' );
define( 'SECURE_AUTH_KEY',  'lange willekeurige tekst' );
define( 'LOGGED_IN_KEY',    'lange willekeurige tekst' );
define( 'NONCE_KEY',        'lange willekeurige tekst' );
define( 'AUTH_SALT',        'lange willekeurige tekst' );
define( 'SECURE_AUTH_SALT', 'lange willekeurige tekst' );
define( 'LOGGED_IN_SALT',   'lange willekeurige tekst' );
define( 'NONCE_SALT',       'lange willekeurige tekst' );

$table_prefix = 'wp_';

define( 'WP_DEBUG', false );

/* Dat is alles, stop met bewerken! */
require_once ABSPATH . 'wp-settings.php';

Wat het betekent:

  • DB_NAME, DB_USER, DB_PASSWORD, DB_HOST: met welke database, gebruiker en wachtwoord WordPress verbindt, en op welke server. Klopt er één niet, dan zie je "Error establishing a database connection". Dat gebeurt vaak na een verhuizing of na het wijzigen van een databasewachtwoord.
  • De sleutels en salts (de acht regels met KEY en SALT): willekeurige teksten waarmee WordPress de inlogcookies ondertekent. Wie ze kent, kan in theorie een geldige inlogcookie maken. Vervang je ze, dan wordt iedereen uitgelogd. Dat is precies wat je doet na een hack (les 7.5). Nieuwe waarden haal je bij https://api.wordpress.org/secret-key/1.1/salt/.
  • $table_prefix: het voorvoegsel van alle tabelnamen, meestal wp_. Zo kunnen meerdere installaties één database delen. Een ander voorvoegsel kiezen is geen echte beveiliging, maar ook niet schadelijk.
  • WP_DEBUG: zet foutmeldingen aan. Op een live site staat dit uit (false). Hoe je fouten veilig bekijkt zonder ze aan bezoekers te tonen, lees je in les 5.4.
  • Instellingen die je zelf toevoegt (bijvoorbeeld DISALLOW_FILE_EDIT in les 7.4 of DISABLE_WP_CRON in les 6.3) horen boven de regel "stop met bewerken".

wp-config.php bevat je databasewachtwoord. Deel het bestand nooit, zet er geen kopie van in de webmap (zoals wp-config.php.bak of wp-config.old: die kan iedereen downloaden omdat de webserver ze niet als PHP uitvoert) en geef het strenge bestandsrechten (les 7.4).

.htaccess

Bij LiteSpeed en Apache staat in de webmap een .htaccess-bestand met regels voor de webserver. Het begint met een punt, dus het is in veel programma's verborgen. WordPress zet er dit blok in voor nette adressen (permalinks):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Gewoon gezegd: "is het geen bestaand bestand (!-f) en geen bestaande map (!-d), geef het dan aan index.php." Dat is stap 2 uit les 1.2. Plugins (caching, beveiliging) voegen vaak eigen blokken toe. Zet je eigen regels buiten de blokken van WordPress en plugins, want die blokken worden soms opnieuw geschreven. Bij nginx bestaat .htaccess niet; daar regelt de hoster dit in de serverconfiguratie.

De database: welke tabel waarvoor

Met phpMyAdmin (in DirectAdmin onder Databasebeheer) kijk je in de database. Een gewone installatie heeft twaalf tabellen; plugins voegen er vaak meer toe. De belangrijkste:

TabelWat erin staat
wp_postsBerichten, pagina's, revisies, menu-items, en bij blokthema's ook sjablonen en patronen. Ook afbeeldingen zijn hier een "bericht" van het type attachment
wp_postmetaExtra gegevens bij berichten, zoals de prijs van een product of instellingen van een paginabouwer
wp_optionsInstellingen van de site en van plugins. Hier staan siteurl en home (les 3.1), de naam van het actieve thema en de lijst actieve plugins
wp_users en wp_usermetaGebruikers, hun (versleutelde) wachtwoorden en hun rol
wp_terms, wp_term_taxonomy, wp_term_relationshipsCategorieën, tags en welke berichten erbij horen
wp_comments en wp_commentmetaReacties

Twee nuttige weetjes. Ten eerste: in wp_options staan siteurl en home. Als die fout zijn (bijvoorbeeld na een verhuizing), stuurt je site iedereen naar het verkeerde adres en kom je niet meer in het beheer. Dan kun je ze in phpMyAdmin of met regels in wp-config.php herstellen (les 3.1). Ten tweede: veel instellingen worden geserialiseerd opgeslagen, een PHP-vorm waarin de lengte van elke tekst wordt meegeteld. Pas je zo'n waarde met de hand aan, of laat je een simpele "zoek en vervang" los op de database, dan klopt die lengte niet meer en raakt de instelling stuk (les 3.2).

Kijken in phpMyAdmin is veilig. Wijzigen doe je alleen als je weet wat je doet, en altijd met een back-up.

In de praktijk: zo ziet het eruit in een paneel

Als voorbeeld gebruiken we DirectAdmin. In cPanel en Plesk heten de onderdelen Bestandsbeheer (File Manager) en phpMyAdmin ook zo.

  1. Open Bestandsbeheer en ga naar domains/example.com/public_html. Zet het tonen van verborgen bestanden aan om .htaccess te zien.
  2. Klik op wp-config.php en kies bekijken (niet bewerken). Zoek DB_NAME en $table_prefix.
  3. Open phpMyAdmin, kies links de database met die naam en kijk welke tabellen er zijn.
  4. Klik op de tabel wp_options (met jouw voorvoegsel) en zoek de rijen siteurl en home.

Samenvatting

  • Een WordPress-site is bestanden plus database; een back-up heeft allebei nodig.
  • wp-admin, wp-includes en de losse core-bestanden zijn van WordPress; wp-content is van jou.
  • wp-config.php bevat de databasegegevens, de sleutels en salts, het tabelvoorvoegsel en instellingen zoals WP_DEBUG. Bewaar er nooit een kopie van in de webmap.
  • .htaccess stuurt alles wat geen bestand is naar index.php; eigen regels zet je buiten de blokken van WordPress.
  • In wp_options staan siteurl en home; geserialiseerde gegevens pas je niet met de hand aan.

Quiz

1. Je wilt een aanpassing doen die een update van WordPress overleeft. Waar hoort die?



2. Na een verhuizing zie je "Error establishing a database connection". Waar kijk je eerst?



3. Wat gebeurt er als je de sleutels en salts in wp-config.php vervangt?



4. Waarom is een bestand wp-config.php.bak in de webmap gevaarlijk?



5. In welke tabel vind je de lijst met actieve plugins?



Opdracht

Opdracht D1.3: Verken je eigen installatie. Open je webmap in Bestandsbeheer of met een FTP-programma en daarna je database in phpMyAdmin. Doe niets anders dan kijken. Vink af wat je hebt gevonden en vul in: het tabelvoorvoegsel, het aantal tabellen in de database, de waarden van siteurl en home in wp_options, en de mappen in wp-content. Schrijf ook op of er bestanden in wp-content/mu-plugins staan en of je weet waar ze vandaan komen. Deel nooit je databasewachtwoord, ook niet in dit formulier.

Opdracht D1.3: Verken je eigen installatie

Deze opdracht doe je zelf; niemand kijkt hem na. Vink af wat je gedaan hebt en markeer de opdracht als gedaan.






Je vinkjes en aantekeningen blijven alleen in deze browser; we sturen ze nergens heen. Ben je aangemeld, dan bewaren we in Mijn cursussen alleen dat je de opdracht gedaan hebt.

Verder lezen

Deze artikelen beschrijven de stappen in de panelen van WebOké; in andere panelen werken ze vergelijkbaar.

Even geduld…

Stel je domeinen in

Regel per domein de nameservers, de koppeling aan je hosting en wie de eigenaar wordt.

Je domeinen laden…