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:
- 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. - 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 coreDe 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_EDITin les 7.4 ofDISABLE_WP_CRONin 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 WordPressGewoon 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:
| Tabel | Wat erin staat |
|---|---|
wp_posts | Berichten, pagina's, revisies, menu-items, en bij blokthema's ook sjablonen en patronen. Ook afbeeldingen zijn hier een "bericht" van het type attachment |
wp_postmeta | Extra gegevens bij berichten, zoals de prijs van een product of instellingen van een paginabouwer |
wp_options | Instellingen 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_usermeta | Gebruikers, hun (versleutelde) wachtwoorden en hun rol |
wp_terms, wp_term_taxonomy, wp_term_relationships | Categorieën, tags en welke berichten erbij horen |
wp_comments en wp_commentmeta | Reacties |
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.
- Open Bestandsbeheer en ga naar
domains/example.com/public_html. Zet het tonen van verborgen bestanden aan om.htaccesste zien. - Klik op
wp-config.phpen kies bekijken (niet bewerken). ZoekDB_NAMEen$table_prefix. - Open phpMyAdmin, kies links de database met die naam en kijk welke tabellen er zijn.
- Klik op de tabel
wp_options(met jouw voorvoegsel) en zoek de rijensiteurlenhome.
Samenvatting
- Een WordPress-site is bestanden plus database; een back-up heeft allebei nodig.
wp-admin,wp-includesen de losse core-bestanden zijn van WordPress;wp-contentis 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.
.htaccessstuurt alles wat geen bestand is naar index.php; eigen regels zet je buiten de blokken van WordPress.- In
wp_optionsstaan siteurl en home; geserialiseerde gegevens pas je niet met de hand aan.
Quiz
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.
Het voorvoegsel eindigt op een liggend streepje (bijvoorbeeld wp_ of een willekeurige code). Een gewone installatie heeft 12 tabellen; plugins voegen er meer toe. siteurl en home beginnen met https://. Deel nooit het databasewachtwoord uit wp-config.php, ook hier niet.
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.
- DirectAdmin handleiding 11.1: Bestandsbeheer openen: de mappen in je pakket
- DirectAdmin handleiding 11.4: Verborgen bestanden zoals .htaccess tonen en bewerken
- DirectAdmin handleiding 12.3: phpMyAdmin openen en gebruiken
- Wat zijn de gebruikersnaam, het wachtwoord en de databasenaam voor MySQL?
- DirectAdmin handleiding 18.6: 'Error establishing a database connection'
- wp-config.php (developer.wordpress.org, Engels): https://developer.wordpress.org/advanced-administration/wordpress/wp-config/
