0%

At arve en WordPress-installation

8 år, 34 plugins og et tema, ingen tør røre. Opgaven begynder ikke med at rette noget – den begynder med at finde ud af, hvad der bliver brugt.

Opgaven lyder sjældent som et projekt. Den lyder som: “vores site er blevet langsomt”, eller “vi kan ikke opdatere, uden at noget går i stykker”. Bagved ligger en WordPress-installation, der har kørt i otte år, og som ingen har haft det fulde overblik over siden den udvikler, der byggede den, holdt op.

Det er en af de mere almindelige opgaver i WordPress-verdenen. Den bliver bare sjældent beskrevet, fordi den ikke er et nyt site med et før-og-efter-billede.

Det første skridt er ikke at rette noget

Fristelsen er at gå i gang: deaktivere plugins, opdatere kernen, rydde op i temaet. Det er også den hurtigste vej til at slukke for noget, der viste sig at være vigtigt.

Første skridt er at finde ud af, hvad der faktisk bliver brugt. Hvilke plugins gør noget, siden faktisk viser. Hvilke sidetyper findes der, og hvem redigerer dem. Hvad sker der ved en bestilling, en tilmelding, en formular – hele vejen fra klik til mail eller database. Det tager typisk en dag eller to, og det er den bedst brugte tid i hele opgaven.

Reglen, jeg arbejder efter, er enkel: rør ikke noget, før du ved, hvorfor det er der. Kode, der ser overflødig ud, er ofte nogens løsning på et problem, der ikke er dokumenteret nogen steder.

Hvad man typisk finder

Der er nogle mønstre, der går igen.

Plugins, der overlapper. To cache-plugins installeret af hver sin udvikler. En galleriløsning, der bruges på én side, som ingen har besøgt i to år.

Plugins, der udsender konkurrerende metadata. Den værste variant af overlappet, fordi den ikke gør noget synligt. To SEO-plugins skriver hver sin title, sin canonical og sine Open Graph-tags i samme sidehoved, og temaet lægger måske et tredje sæt oven i. Siden ser rigtig ud i browseren – men Google får modstridende signaler om, hvad siden hedder, og hvilken URL der er den rigtige. Det er ikke et plugin, der er i stykker. Det er to, der begge virker.

Ændringer i temaet frem for i et child theme. Det betyder, at temaet ikke kan opdateres, uden at ændringerne forsvinder – og derfor er det ikke blevet opdateret. Derfra breder det sig: når temaet står stille, tør man heller ikke opdatere WordPress eller PHP, og til sidst er hele installationen låst fast af noget, ingen kan huske.

Sporing, der kører uden om samtykket. Google Tag Manager installeret gennem et plugin, mens samtykket håndteres af et andet. Hver for sig virker de: banneret vises og gemmer valget, og GTM indlæser sine tags. De ved bare ikke nødvendigvis af hinanden, så brugerens valg i banneret bliver ikke omsat til den adfærd, man tror. Det er den slags, der ikke opdages ved almindelig brug af sitet, men først når man ser på, hvad browseren faktisk sender.

Kode, ingen tør røre. En functions.php på 1.000 linjer, hvor det meste er tilføjet af forskellige mennesker over flere år. Ingen kommentarer, ingen historik, fordi det aldrig har ligget i Git.

Hvad jeg gør ved det

Rækkefølgen betyder mere end værktøjerne.

  1. En kopi og versionsstyring. Installationen skal ligge et sted, hvor man kan prøve noget af uden at ramme det, kunden bruger. Og koden skal i Git – ikke for at være moderne, men fordi det er forskellen på “vi ændrede noget, og nu virker det ikke” og “vi kan se præcis, hvad der skete”.
  2. Det, der gør ondt nu. Er sitet langsomt, måler jeg hvorfor, før jeg optimerer. Er der en sikkerhedsopdatering, der er blevet udskudt i to år, er den vigtigere end oprydning. Kunden skal mærke en forskel, før man går i gang med det, der ikke kan ses.
  3. Én ting ad gangen. Ét plugin fjernet, sitet testet, videre. Det tager længere tid end at rydde op i én omgang, men når noget går i stykker, ved man, hvad det var.
  4. Det, der gør næste gang lettere. Et child theme, så temaet kan opdateres. Ændringer flyttet fra functions.php til et sted, de kan læses. En kort note om, hvad der er hvor.

Hvornår det ikke kan betale sig

Nogle gange er svaret at bygge nyt. Det er det, når temaet er så gennemhullet, at oprydningen bliver dyrere end en ny frontend, eller når indholdsstrukturen ikke passer til det, sitet skal kunne i dag.

Men det er sjældnere, end man tror – og det er værd at være opmærksom på, at den, der skal bygge det nye, sjældent er den mest objektive til at vurdere det. Et site med otte års indhold, indeksering og indgående links har en værdi, der ikke står i kodebasen.

Det, det egentlig handler om

En arvet installation er sjældent kun et teknisk problem. Det er også et spørgsmål om, at nogen skal kunne svare på, hvad der sker, og hvorfor.

Det er dét, arbejdet går ud på: at gøre et system, ingen forstår, til et system, nogen kan drive. Koden bliver bedre undervejs, men det er ikke pointen. Pointen er, at næste gang der skal ændres noget, er det en opgave og ikke en risiko.

Det jeg oftest møder

En arvet installation har sjældent dem alle, og de færreste er alvorlige hver for sig. Det er kombinationen, der gør en opgave svær at estimere.

01_Plugin-gæld: 30-60 plugins, hvor flere løser næsten samme problem, nogle er forladte, og ingen ved længere, hvilke der er nødvendige.

02_Plugin-konflikter: To plugins hooker ind samme sted, loader hver sin version af et bibliotek eller ændrer den samme funktionalitet.

03_Opdateringsangst: WordPress, PHP, tema eller plugins kan ikke opdateres, fordi ingen ved, hvad der knækker.

04_Købte temaer og page builders: Elementor, Divi, WPBakery og lignende kan efter nogle år efterlade en løsning, der er svær at ændre uden at arbejde imod systemet.

05_Performance: Plugins og temaer loader CSS og JavaScript på alle sider, også hvor det ikke bruges. Dertil tunge billeder, dyre queries og manglende caching.

06_Database-oprydning: wp_options, autoloadede options, revisions, transients og tabeller fra plugins, der for længst er slettet.

07_WP-Cron: Praktisk indtil jobs bliver tunge, fejler stille eller skal køre pålideligt på et bestemt tidspunkt.

08_Sikkerhed: Gamle plugins og temaer, for brede rettigheder, XML-RPC, filuploads, ubeskyttede endpoints og administratorer nok til at stille et fodboldhold.

09_Egen kode de forkerte steder: Ændringer direkte i parent theme eller i et plugin, snippets i functions.php - og den klassiske lille rettelse i core.

10_Manglende versionsstyring: Ændringer lagt direkte på produktion via wp-admin eller FTP, og ingen sikker måde at se, hvad der er ændret siden sidst.

11_Staging og produktion: Databaseindhold skal den ene vej, kode den anden, mens uploads og redaktionelle ændringer helst ikke må overskrives.

12_URLs i databasen: Serialiserede data og absolutte URLs gør en almindelig search/replace mere spændende, end den burde være.

13_Mail: wp_mail() kan godt returnere succes, uden at mailen ender i modtagerens indbakke. Pludselig bliver SMTP eller en mailtjeneste, SPF, DKIM og DMARC en del af WordPress-opgaven.

14_REST API og integrationer: Autentificering, rate limits, webhooks, retries og eksterne systemer, der ikke opfører sig, som dokumentationen lovede.

15_WooCommerce: En kategori for sig: checkout, hooks, ordrestatusser, betalingsgateways, moms, fragt, mails og plugins oven på plugins.

16_Flersprogethed: WPML eller Polylang, hreflang, oversatte slugs, canonicals og indhold, der ikke findes på alle sprog.

17_Teknisk SEO: Redirects, canonicals, sitemap, robots, strukturerede data - og flere SEO-plugins, der alle vil bestemme indholdet af <head>.

18_Tracking og samtykke: Tag Manager, GA4, Google Ads, Consent Mode og cookie consent. Typisk her man opdager, at tre plugins og temaet alle indsætter tracking.

19_Gutenberg og blokke: Fint, når det er tænkt igennem. Mindre fint, når redaktøren får 80 blokke og mulighed for at bryde designsystemet.

20_Roller og rettigheder: Editor skal kunne rette dette, men ikke dét - hurtigt mere kompliceret end standardrollerne i WordPress rækker til.

21_Mediebiblioteket: 12.000 billeder, 14 genererede størrelser af hvert og 40 GB thumbnails, hvor ingen ved, hvilke temaet bruger.

Listen er ikke en anklage mod WordPress. Det er, hvad der sker med systemer, mange mennesker har rørt ved gennem otte år.

Læs også_

01_ Fra koder til reviewer AI bliver aldrig dårligere, end det er nu. Det ændrer ikke, hvad jeg kan – det ændrer, hvor i arbejdet jeg står. 02_ Ctrl, Cmd og C# Et sprog er til at lære. Det er domænet og kodebasen, der tager tid – og to maskiner, der kostede mere opmærksomhed end syntaksen.

Curriculum Vitae ↓

Profile Image

Paul Nybo Andersen

Profil_

48 år, CTO, grafisk designer og fullstack udvikler (LAMP/LEMP) med 26 års erfaring i udvikling af digitale løsninger til en bred målgruppe af virksomheder.

Scroll for læse mere →

01_Ydelser_

Hvordan jeg kan hjælpe

Gå til Mine erfaringer ↓

PHP • Laravel • MySQL • JavaScript

Webudvikling

Fra database og backend til frontend, integrationer og drift.

UX • Figma • Prototyper • Test

Webdesign & UX

Design af brugerflader, der skal fungere for både brugeren og forretningen.

Identitet • Designsystemer • Print

Grafisk design

Visuel identitet til virksomheder, der skal se ud som noget, man kan regne med.

WordPress • Umbraco • Magento

WordPress & CMS

CMS-løsninger bygget til dem, der skal arbejde i dem hver dag.

Core Web Vitals • SEO • Caching

Performance & SEO

Websites, der loader hurtigt – også på en telefon på et dårligt net.

Arkitektur • Teknologivalg • Sparring

Teknisk rådgivning

Når der skal træffes en teknisk beslutning, og du mangler nogen at vende den med.

02_Case: Lifeguard Health ApS_

8 år med Lifeguard

CTO & Co-Founder

Fra 2015 til 2023 var jeg CTO og medstifter af Lifeguard Health ApS. Her arbejdede jeg med udviklingen af en digital sundhedsplatform, der kombinerede teknologi, data og personlig coaching. Rollen omfattede alt fra produktudvikling, UX og softwarearkitektur til ledelse af udviklingsteams, drift og forretningsudvikling. De otte år i Lifeguard kom til at præge min tilgang til både teknologi, produkter og mennesker og danner i dag fundamentet for meget af det, jeg arbejder med.

Se Lifeguard's Core-story

Lifeguard præsentation_1_4_

Slides #1 showing my last job
Slides #2 showing my last job
Slides #3 showing my last job

03_Ansættelseshistorik_

Mine erfaringer

I mine forskellige roller har jeg trukket på de erfaringer jeg har opbygget gennem 26 år. Jeg har i denne sektion forsøgt at beskrive de erfaringer jeg har tilegnet mig gennem de opgaver jeg løst og de faglige kompetencer jeg har benyttet.

Erfaringer_

Billede fra min tid hos ESGRapporter

2024-2026, CTO & Co-founder

ESGRapporter

Nu: ESGRapporter ApS.

Vi byggede ESG-rapporteringsplatformen i Laravel og havde det tekniske ansvar for retningen, rapportdelen og alt det visuelle.

Billede fra min tid hos Revolvo

2024-2026, Senior Developer • UI/UX • Design

Revolvo

Nu: Revolvo Aps. + BmyGuest ApS.

Jeg arbejdede med udvikling, UI/UX og grafisk identitet. 60% af tiden gik til BmyGuest og IDoMeetings, som Revolvo var medejer af.

Billede fra min tid hos Lifeguard

2015-2023, CTO & Co-founder

Lifeguard

Nu: Lifeguard Health ApS.

Jeg byggede LifeScore-platformen i Laravel med samtykkestyret adgang til sundhedsdata, en app til armbåndet og stod for alt UX og design.

Billede fra min tid hos Vitalityguard

2016-2018, CTO & Co-founder

Vitalityguard

Nu: FIDIMI

Vi drev Lifeguard-platformen i white label gennem et joint venture med Dansk Sundhedssikring. Mærsk var den største kunde.

Billede fra min tid hos ContentCPH

2010-2015, Senior Digital Wizard

ContentCPH

Nu: Charlie Tango

Jeg byggede 60+ Facebook-apps i PHP for Samsung, IKEA og H&M. Nik & Jay-kampagnen for Samsung vandt Danish Internet Awards 2014.

Billede fra min tid hos BOCCA WIRED

2009-2010, Freelance udvikler

BOCCA WIRED

Nu: BOCCA

Jeg byggede kampagnesites for Movia og Hjerteforeningen, heriblandt Overraskende hurtig, der vandt bronze ved Creative Circle Award.

Billede fra min tid hos EuroRSCG

2008-2010, Inhouse Freelance udvikler

EuroRSCG

Nu: Havas Danmark

Jeg hentede bureauets digitale opgaver hjem fra konkurrenterne og byggede iPhone-site og interaktive produktværktøjer for GN/Jabra.

Billede fra min tid hos Bandits Inc.

2001-2026, Enkeltmandsvirksomhed

Bandits Inc.

Nu: Audiotracking v/Paul Nybo Andersen

Min egen enkeltmandsvirksomhed siden 2001. Gennem den har jeg solgt webudvikling til bureauer, der havde grafikken, men manglede udvikleren.

04_Kompetencer + Stack_

Mine kompetencer

Som det fremgår af forrige sektion, har jeg gennem årene beskæftiget mig med en bred vifte af opgaver og indtaget mange forskellige jobroller, lige fra lydtekniker til fotograf, grafiker, webudvikler og CTO. Gennemgående for dem alle har været min passion for at skabe meningsfulde oplevelser og min drivkraft for at skabe noget unikt.

I min tilgang har jeg altid været åben over for at udforske nye løsninger til eksisterende udfordringer og har aldrig været bange for at tilegne mig ny viden. Dette har resulteret i en bred vifte af kompetencer, som jeg har sammensat over tid.

Jeg har her forsøgt at liste de væsentligste.

Rating

- " Der er jeg 100 meter mester i".

- " Det er jeg ret god til".

- " Det er jeg udemærket til".

- " Det er ikke det jeg er bedst til, men jeg kan til nøds".

- " Det er jeg ikke haj til - men jeg er villig til at lære".

05_Skrevet_

Noter fra arbejdet

2026-08_

At arve en WordPress-installation

8 år, 34 plugins og et tema, ingen tør røre. Opgaven begynder ikke med at rette noget – den begynder med at finde ud af, hvad der bliver brugt.

2026-05_

Fra koder til reviewer

AI bliver aldrig dårligere, end det er nu. Det ændrer ikke, hvad jeg kan – det ændrer, hvor i arbejdet jeg står.

2025-07_

Ctrl, Cmd og C#

Et sprog er til at lære. Det er domænet og kodebasen, der tager tid – og to maskiner, der kostede mere opmærksomhed end syntaksen.

06_Når jeg ikke arbejder_

Baggrund

Jeg er født og opvokset i København. Men efter nogle år med børn i lejlighed på Østerbro, valgte min kæreste og jeg at flytte i hus. Vi bor i Hellerup på 11. år, men ikke længere væk fra København end man kan hoppe op på cyklen og så er man tilbage.

Sidstnævnte gør jeg ofte - det handler om inspiration og nye designindtryk. Jeg forsøger af samme grund stadig at finde tid til fototure. Men da mit arbejde altid har været min hobby, har det været en udfordring at finde balance mellem tid til både fritidsprojekter og arbejdsprojekter.

Når jeg ikke arbejder bruger jeg en del tid med at spiller og lytte til musik. Desværre er det med tiden mest blevet til lytning, hvilket har været en meget dyr, men også givtig passion.

Fælles for alle mine passioner er ønsket om af skabe noget - jeg håber at dette kan komme jer til gode.

Se TT38 profil

+25 års erfaring med digitale produkter ↓

Tilgængelig for rådgivning, udvikling, digitale produkter og teknisk ledelse.