Hvordan vedlikeholde gamle permalenker i nytt publiseringsverktøy?

På Studentersamfundet planlegger vi å bytte publiseringsverktøy. Vi skal legge bort noe hjemmelaget til fordel for WordPress.

Dette valget kan diskuteres opp og i mente. Sjøl er jeg ganske fornøyd mer det. En av de største fordelene er at det blir enklere for nye aktive hos oss å komme i gang med systemet.

Vi skal skrive en mal til det gamle systemet som spytter ut WXR.

Det store spørsmålet nå er hvordan vi skal migrere innhold. Det første forslaget som kom opp var å dumpe de dataene vi vil ha med oss videre fra den gamle databasen, før deretter å bedrive søk&erstatt-magi på dumpen inntil spørringene passer det nye skjemaet.

Neste forslag var å skrive en mal som spytter ut disse spørringene, sånn at vi eventuelt kan migrere over data flere ganger – for eksempel en gang for å hente ut testdata og en annen gang til når vi flytter over i produksjon.

Det vi ser ut til å falle ned på, er dog mye enklere. Vi skal skrive en mal til det gamle systemet som spytter ut WXR, WordPress sitt eksport/import-format bygget på RSS.

Hvordan kan vi best sørge for at gamle permalenker ikke brytes?

Når migreringen ser ut til å ordne seg, melder det seg en annen utfordring: Permalenker. Hvordan kan vi best sørge for at gamle permalenker ikke brytes, men heller videresendes til riktig sted?

Hoveddelen av det gamle innholdet er arrangementer og nyheter. Formen på de gamle permalenkene er /vis.php?ID=[ID] for arrangementer, og /nyhet.php?ID=[ID] for nyheter. Arrangementer og nyheter er lagret i hver sine tabeller, så en ID er ikke entydig i seg selv; den kan henspeile til enten et arrangement med denne ID-en eller en nyhet med denne ID-en. For å finne fram til riktig objekt i WordPress, trenger vi enten å mappe gamle ID-er til nye ID-er, eller eventuelt å mappe gamle ID-er til ny slug.

Den første løsningen jeg kan tenke på, er som følger: Vi henter ut en tabell med

  • Gammel ID
  • Objekttype (nyhet eller arrangement)
  • Tittel

Oppsettet kan virke uforholdsmessig komplisert.

Deretter kjører vi alle titlene gjennom WordPress sin sanitize_title() for å erstatte dem med slug. Etter dette kan vi sette opp en katalog /legacy i det nye systemet, og redirecte forespørsler til nyhet.php og vis.php til et script i denne katalogen, som igjen redirecter til riktig URL ved hjelp av tabellen.

En ulempe med dette oppsettet er at det kan virke uforholdsmessig komplisert. Om noen kan tenke på en mer fornuftig måte å gjøre dette på, vil jeg sette pris på en tilbakemelding.