# Zoeken en vervangen uitvoeren in uw WordPress-database

Source: https://support.kapsulehost.com/nl-nl/wordpress-search-replace

WordPress slaat absolute URL's op in tientallen databasetabellen, dus een domeinwijziging of een overstap naar SSL laat oude adressen verspreid achter in berichten, opties en plug-ininstellingen: met zoeken en vervangen ruimt u ze veilig op. Deze handleiding behandelt de twee ondersteunde manieren om dit in KPanel te doen, waarom een veelgebruikte derde methode gegevens beschadigt, en hoe u het resultaat controleert.

## Wanneer u het nodig heeft

- Overstappen van `http://` naar `https://` na het inschakelen van SSL.
- Van domein wisselen, bijvoorbeeld van `old-brand.co.nz` naar `new-brand.co.nz`.
- Na het pushen van staging naar productie, wanneer de hostnaam van staging nog in de database is vastgelegd.
- Een oude host voor bestanden uitfaseren en alle afbeeldings-URL's in één keer omzetten.
- Een tikfout in veel berichten tegelijk corrigeren, zoals een oud telefoonnummer of de naam van een product dat niet meer wordt verkocht.

> **Warning:** Zoeken en vervangen herschrijft rijen in alle tabellen tegelijk, en er is geen ongedaan maken per rij. Maak elke keer een back-up voordat u begint, ook bij een wijziging die onbeduidend lijkt. KPanel maakt er automatisch een wanneer u de hieronder beschreven ingebouwde hulpmiddelen gebruikt, maar als u de opdracht zelf uitvoert, bent u daar zelf verantwoordelijk voor. Zie [Een back-up maken](https://support.kapsulehost.com/nl-nl/taking-a-backup).

## Waarom u niet zomaar een SQL REPLACE kunt uitvoeren

Dit is de meest schadelijke fout bij werk aan een WordPress-database, dus het is de moeite waard om dit te begrijpen voordat u een methode kiest.

WordPress slaat plug-ininstellingen, thema-opties en widgetgegevens op als geserialiseerde PHP-strings. Een geserialiseerde string legt de lengte vast van elke waarde erin, zoals hier:

```
a:1:{s:3:"url";s:26:"http://old-domain.co.nz/x";}
```

Die `s:26` zegt dat de URL 26 tekens lang is. Vervang `http://` door `https://` met een gewone SQL-`REPLACE()` en de tekst wordt 27 tekens lang, terwijl de opgeslagen lengte nog steeds 26 aangeeft. PHP weigert dan de hele optie te deserialiseren, en de instelling valt ongemerkt terug op leeg. Instellingen van de themacustomizer verdwijnen, sliders verliezen hun slides, plug-inlicenties melden zichzelf af.

De WP-CLI-opdracht search-replace die KPanel uitvoert, deserialiseert elke waarde, vervangt de tekst erin en serialiseert opnieuw met gecorrigeerde lengtes. Daarom is dit de enige methode die hier wordt beschreven.

> **Important:** Voer nooit `UPDATE wp_options SET option_value = REPLACE(...)` of het equivalent daarvan in phpMyAdmin uit op een WordPress-database. Het lijkt te werken, het meldt het aantal gewijzigde rijen, en het vernietigt ongemerkt elke geserialiseerde instelling die het raakt. Er is geen herstel mogelijk behalve het terugzetten van een back-up.

## Methode 1: de kaart Zoeken en vervangen

Dit is voor bijna iedereen de juiste keuze. De kaart is beschikbaar bij elk WordPress-abonnement.

1. Log in op [KPanel](https://kpanel.kapsulehost.com) en klik op **Websites** in de linkerzijbalk.
2. Klik op de site.
3. Open het tabblad **WordPress** en daarna het onderdeel **Snelle acties**.
4. Zoek de kaart **Zoeken en vervangen** en klik op **Configureren**.
5. Voer de bestaande tekst in bij **Zoeken (oude waarde)**.
6. Voer de nieuwe tekst in bij **Vervangen door**.
7. Laat **Proefdraaien (alleen voorbeeld, geen wijzigingen)** aangevinkt en klik op **Voorbeeld**.

![De kaart Zoeken en vervangen in Snelle acties in KPanel](https://support.kapsulehost.com/help/screenshots/wordpress-search-replace.d3d0a573.webp)

De proefdraai meldt hoeveel vervangingen er zouden worden uitgevoerd en splitst dat aantal uit per tabel en kolom, zodat u precies ziet waar de wijziging terechtkomt voordat u deze doorvoert.

Wanneer het voorbeeld er goed uitziet:

1. Vink **Proefdraaien** uit.
2. Klik op **Uitvoeren**.
3. Bevestig het venster.

Er wordt automatisch een volledige back-up gemaakt voordat de vervanging begint, en de uitvoering omvat alle tabellen, inclusief tabellen die door plug-ins zijn aangemaakt.

> **Tip:** Zoek naar de meest specifieke string die u kunt bedenken. Het vervangen van `old-domain.co.nz` herschrijft ook `mail.old-domain.co.nz` en `staging.old-domain.co.nz`, wat zelden de bedoeling is. Door het schema mee te nemen, zoals in `https://old-domain.co.nz`, blijft de overeenkomst nauwkeurig.

## Methode 2: WP-CLI vanuit de console

De console geeft u dezelfde engine met meer controle over de opties. Het is een van de onderdelen die verschijnen bij beheerde abonnementen; bij andere abonnementen toont de tabbalk in plaats daarvan een link **+8 bij Managed**.

Open de site, dan **WordPress**, dan **Console**. De prompt begint al met `wp`, dus typ alleen de rest van de opdracht.

Bekijk eerst een voorbeeld:

```
search-replace 'http://old-domain.co.nz' 'https://old-domain.co.nz' --all-tables --dry-run
```

Voer het daarna echt uit:

```
search-replace 'http://old-domain.co.nz' 'https://old-domain.co.nz' --all-tables
```

> **Warning:** De console maakt geen back-up voor u. De automatische back-up vooraf wordt alleen gemaakt wanneer u de kaart Zoeken en vervangen uit methode 1 gebruikt. Als u de opdracht hier uitvoert, maak dan eerst zelf een back-up via de pagina **Back-ups** van de site.

Nuttige opties:

| Optie | Wat deze doet |
|---|---|
| `--all-tables` | Neemt ook aangepaste tabellen mee die door plug-ins zijn aangemaakt, niet alleen de standaardtabellen van WordPress |
| `--dry-run` | Meldt wat er zou veranderen en schrijft niets weg |
| `--precise` | Gebruikt PHP in plaats van SQL voor de vervanging. Trager, maar kan lastige geserialiseerde structuren aan |
| `--skip-columns=guid` | Laat de GUID's van berichten ongemoeid (zie hieronder) |
| `--report-changed-only` | Beperkt de uitvoer tot tabellen die echt zijn gewijzigd |

### Een opmerking over GUID's

Elk WordPress-bericht heeft een kolom `guid`. Hoewel deze op een URL lijkt, is het een identificatie en geen link, en feedlezers gebruiken hem om te bepalen of ze een item al hebben gezien. Als u hem herschrijft, kan elk bericht in uw feed opnieuw als nieuw verschijnen.

Herschrijf GUID's wanneer u permanent van domein wisselt en met een schone lei begint. Sla ze over met `--skip-columns=guid` wanneer u alleen van HTTP naar HTTPS overstapt op hetzelfde domein.

## Van domein wisselen: gebruik in plaats daarvan de kaart Site-URL

Als het hele doel is om de site naar een nieuw domein te verhuizen, begin dan niet met zoeken en vervangen. De kaart **Site-URL wijzigen**, in hetzelfde onderdeel **Snelle acties**, werkt de opties `siteurl` en `home` bij en voert de vervanging in alle tabellen uit in één bewerking, in de juiste volgorde. Als u het andersom doet, kan WordPress zijn eigen beheeromgeving mogelijk niet meer laden.

## Na de vervanging

Loop deze lijst door voordat u het werk als afgerond beschouwt.

1. **Leeg de cache.** Voer in het onderdeel **Snelle acties** de actie **Cache legen** uit. Als de site de volledige paginacache gebruikt, leeg die dan via **WordPress**, dan **Caching**.
2. **Leeg de rewrite-regels.** Voer **Rewrites legen** uit in hetzelfde onderdeel, of open in wp-admin **Instellingen**, dan **Permalinks** en klik op **Wijzigingen opslaan** zonder iets te veranderen.
3. **Leeg de CDN** als de site die gebruikt, via **Prestaties**, dan **Kapsule CDN**. Zie [De Kapsule CDN-cache legen](https://support.kapsulehost.com/nl-nl/cdn-cache-purge).
4. **Laad de site in een privévenster**, zodat de cache van uw browser u niet kan misleiden.
5. **Controleer het hangslotje.** Een ontbrekend hangslotje of een waarschuwing na een overstap naar SSL betekent dat er URL's zijn achtergebleven: [Gemengde-contentwaarschuwingen oplossen](https://support.kapsulehost.com/nl-nl/ssl-mixed-content).
6. **Klik door de lastige pagina's.** Sliders op de homepage, het logo in de header, elke pagina die met een paginabouwer is gemaakt, en de kassa van een webwinkel. Daar staan de URL's die in geserialiseerde opties zitten.
7. **Leeg eventuele cachingplug-ins** via hun eigen instellingenscherm.

## Problemen oplossen

**De proefdraai meldt nul vervangingen.** De string staat niet in precies die vorm in de database. Controleer op een slash aan het eind, een voorvoegsel `www.` of het schema. Zoek eerst alleen naar de kale hostnaam om te bevestigen dat die er überhaupt in staat.

**Afbeeldingen werken niet meer na een domeinwijziging.** Media-URL's staan in `wp_posts` en `wp_postmeta` en worden meegenomen door `--all-tables`, maar een CDN of een plug-in voor afbeeldingsoptimalisatie kan zijn eigen herschreven kopieën in de cache bewaren. Leeg de CDN en de cache van de plug-in en laad de pagina daarna opnieuw.

**Instellingen zijn verdwenen na de vervanging.** Dat is het serialisatieprobleem, en het betekent dat de wijziging met rauwe SQL is uitgevoerd in plaats van met de hulpmiddelen hier. Zet de back-up terug die vóór de uitvoering is gemaakt: [Uw site herstellen vanuit een back-up](https://support.kapsulehost.com/nl-nl/restoring-from-backup).

**Staging-URL's blijven terugkomen.** Iets vult ze opnieuw in, meestal een geplande push of een gecachete optie. Controleer de workflow in [Staging gebruiken: pushen en pullen](https://support.kapsulehost.com/nl-nl/wordpress-staging-workflow) en zorg dat **URL's herschrijven** is aangevinkt wanneer u pusht.
