Å flytte et WordPress-nettsted (f.eks. fra dev.site.com til site.com) virker enkelt: bare kjør et “Søk og erstatt” i databasen, ikke sant?
FEIL.
Hvis du prøver å kjøre en rå SQL-spørring som:
UPDATE wp_options SET option_value = replace(option_value, 'gammelt.no', 'nytt.no')
…vil du ødelegge nettstedet ditt. Spesifikt vil du miste widgeter, temainnstillinger og konfigurasjonen til mange utvidelser.
Den vanlige feilen: Enkel “søk og erstatt”
Mange utviklere (og til og med noen hostingleverandører) foreslår å bruke en enkel SQL REPLACE()-funksjon for å oppdatere URL-er. Denne tilnærmingen virker logisk, men er fundamentalt feil i WordPress-økosystemet.
Fristelsen:
-- Dette ser trygt ut, men det er det IKKE
UPDATE wp_options
SET option_value = REPLACE(option_value, 'https://gammelt.no', 'https://nytt.no');
Hva som skjer:
- Noen URL-er oppdateres riktig (f.eks. i postinnhold).
- Serialiserte data blir korrupte.
- Widgeter forsvinner.
- Temainnstillinger tilbakestilles.
- Utvidelsesinnstillinger går tapt.
- Nettstedet blir delvis ødelagt.
Hvorfor det feiler: WordPress lagrer ikke alle data som ren tekst. Mye av det lagres som serialiserte PHP-data, noe som krever spesiell behandling.
Forstå serialisering: Kjerneproblemet
Hva er serialisering?
WordPress lagrer komplekse data (matriser/arrays, objekter) i databasen som Serialiserte Strenger. Serialisering konverterer PHP-datastrukturer til en streng som kan lagres i databasen.
Eksempel på serialiserte data:
// Original PHP array
array(
'home' => 'https://gammelt.no',
'siteurl' => 'https://gammelt.no',
'admin_email' => 'admin@gammelt.no'
)
// Serialisert streng (lagret i databasen)
a:3:{s:4:"home";s:18:"https://gammelt.no";s:7:"siteurl";s:18:"https://gammelt.no";s:11:"admin_email";s:18:"admin@gammelt.no";}
Å bryte ned den serialiserte strengen
La oss dekode s:18:"https://gammelt.no":
s= string (streng)18= lengde på strengen (antall tegn)"https://gammelt.no"= verdien
Det kritiske punktet:
Tallet 18 representerer nøyaktig antall tegn i strengen "https://gammelt.no".
Hva skjer ved enkel erstatning?
Original:
s:18:"https://gammelt.no"
Etter enkel SQL-erstatning (gammelt.no -> nytt-domene.no):
Problemet:
- Strenglengden endret seg fra 18 til 22 tegn.
- Serialiseringen sier fortsatt
s:18(forventer 18 tegn). - PHP prøver å lese 18 tegn:
"https://nytt-domen" - Mangler slutten.
- Hele arrayen blir ugyldig.
- Data er korrupt.
Resultat: WordPress kan ikke lese innstillingene eller widgetene, så det nullstiller dem.
Hvor finnes serialiserte data?
Vanlige steder
1. wp_options-tabellen:
siteurloghome.- Widget-data (
sidebars_widgets). - Temamodifikasjoner (
theme_mods_*). - Utvidelsesinnstillinger.
2. wp_postmeta-tabellen:
- Egendefinerte felter (Custom Fields).
- ACF-feltdata.
- Vedleggsmetadata.
3. wp_usermeta-tabellen:
- Brukerpreferanser.
Løsningen: Serialiserings-bevisste verktøy
Du trenger et verktøy som:
- Av-serialiserer data (konverterer streng tilbake til PHP-array).
- Erstatter teksten inne i datastrukturen.
- Rekalkulerer antall tegn.
- Re-serialiserer dataene.
- Oppdaterer databasen.
Metode 1: Wp-CLI (anbefalt)
Den profesjonelle måten: Hvis du har SSH-tilgang, er WP-CLI det beste verktøyet.
Grunnleggende bruk:
wp search-replace 'https://gammelt.no' 'https://nytt.no' --all-tables
Avanserte alternativer:
## DRY run (se hva som ville endret seg uten å gjøre det)
wp search-replace 'https://gammelt.no' 'https://nytt.no' --all-tables --dry-run
## Eksporter endringer til sql-fil først
wp search-replace 'https://gammelt.no' 'https://nytt.no' --all-tables --export=endringer.sql
Hvorfor WP-CLI er best:
- ✅ Håndterer serialisering korrekt.
- ✅ Raskt og effektivt.
- ✅ CLI-kontroll.
- ✅ Ingen utvidelsesoverhead.
Metode 2: Better search replace plugin
For ikke-CLI brukere: Hvis du ikke har SSH-tilgang, bruk utvidelsen Better Search Replace.
Bruk:
- Gå til Verktøy > Better Search Replace.
- Skriv gammel URL:
https://gammelt.no. - Skriv ny URL:
https://nytt.no. - Velg tabeller.
- Viktig: Merk av for “Run as dry run?” først.
- Klikk “Run Search/Replace”.
- Se over resultatene, fjern deretter “Dry run” og kjør på nytt.
Metode 3: Interconnect/IT search-Replace-DB script
Eksternt PHP-skript: Et frittstående PHP-skript du laster opp via FTP. Nyttig hvis du ikke kommer inn i admin-panelet.
Advarsel:
- ⚠️ Dette skriptet gir full tilgang til databasen.
- ⚠️ Må slettes umiddelbart etter bruk (knappen “Delete Me”).
- ⚠️ Bruk aldri på produksjon med mindre det er absolutt nødvendig, og slett det med en gang.
Oppsummering
I 2026 er korrekt håndtering av serialiserte data ikke valgfritt ved migrering av WordPress.
- Aldri bruk enkel SQL
REPLACE. - Aldri rediger databasefiler med tekstredigeringsprogram.
- Alltid bruk WP-CLI eller verktøy som Better Search Replace.
Dette sikrer at widgetene dine overlever flyttingen, og at nettstedet fungerer 100% på det nye domenet.



