Michel Vuijlsteke's weblog

Tales of Drudgery & Boredom.

Gentblogt 2.3

Die keer dat Gentblogt moest naar de nieuwste versie van WordPress omgezet worden, en dat ik dat al maanden (letterlijk, vrees ik) had uitgesteld wegens redelijk lastig.

Dat was alle vorige weekenden, dus. En dit weekend is het weekend dat ik het wél zou doen. De omzetting.

Het lijkt allemaal vanzelfsprekend: vele tienduizenden weblogs hebben die overstap al ongetwijfeld zonder enig probleem gemaakt, en waarom zou het dan bij ons moeilijker zijn?

Tja, inderdaad. We gebruiken een aantal plugins, en daar begint het eigenlijk al: om te doen wat wij wilden, moesten indertijd een aantal van die plugins aangepast worden. Vorig jaar, en regelmatig eens getweaked ondertussen met aanpassingen van een aantal van die plugins.

Er zàten ook een aantal hacks in WordPress zelf in, maar die zijn ondertussen allemaal weggewerkt en naar plugins geshunted, gelukkig.

Maar bon. Het meesterplan was dus:

  1. Met een backup van de database van Gentblogt op een andere server (Dreamhost, en l’occurence) en ter controle locaal op een eigen systeem de template aanpassen naar de nieuwe versie van WordPress (onder meer de tags moeten helemaal opnieuw, en de kalender, en de comments)
  2. Testen
  3. Gentblogt op de Gentblogt-server backuppen
  4. De layout van de site halen (tijdelijk Gentblogt op de oude layout terugzetten)
  5. Alle plugins afzetten
  6. De nieuwe WordPress in de plaats van de oude WordPress zetten (met alle aangepaste plugins etc.)
  7. Database converteren waar nodig
  8. De plugins aanzetten + controleren
  9. Trefwoorden (tags) omzetten van Ultimate Tag Warrior naar WordPress ingebouwd via de import-functie.
  10. Aangepaste template op site zetten en activeren

Ik zat er niet zo erg mee in, een goede voorbereiding is het halve werk, het is geen tovermagie en zó complex is het ook niet, maar ach…

The best laid plans, ‘t is wel wat. Alles verliep naar wens, behalve de conversie van de tags. Dat zou automagisch moeten gebeuren met een import-ding van WordPress 2.3 zelf, maar helaas: dat liep de soep in.

Ik weet niet waar het aan ligt—ik steek het op een compbinatie van te weinig geheugen, niet-ascii-karakters in de tagnames, misschien dubbels of inconsistenties in de bestaande tags (die met een aangepaste UTW gemaakt waren), en de wet van Murphy.

En dus wordt het manueel aanpaswerk, vannamiddag. Leutig!

In WordPress 2.3 is er een nieuw taxonomie-concept ingevoerd: zowel categorieën als tags (als potentieel nog veel andere zaken) zitten in terms, term_taxonomy en term_relationships. Vroeger zaten de tags in eigen tabellen: tags en post2tag. Ik heb geen zin om te programmeren vandaag, dus het wordt Excel en SQL. 

Stap één: tags omzetten naar terms. Gemakkelijk gedaan, hopladiejee, een paar duizend tags ingevoegd in terms. Al die terms moeten tags worden, da’s een zaak van in term_taxonomy te zeggen dat ze tot de “post_tag”-taxonomie behoren. Ook rap gedaan. Enig probleempje was dat er al een paar artikels aangemaakt en gewijzigd waren sinds de conversie, en dat er naast nieuwe tags een aantal dubbels in zaten, maar alla.

Stap twee: posts moeten via term_relationships verbonden worden met term_taxonomy-items. Dat moet in twee stappen. Eerst weten welke tags in tag welke termen in terms zijn, en dan zoeken waar ze staan in term_taxonomy.

Hm. Weird. Om de één of andere reden zijn er bij de 5000 tags, maar heb ik maar iets meer dan 3000 terms. Misschien was er iets aan de hand met stap één?

Grr. Als ik select tag_id, tag from wp_tags where tag_id in (select distinct tag_id from wp_post2tag) and tag not in (select name from wp_terms) doe (toon alle tags die gekoppeld waren aan een post en die niet in de terms-tabel voorkomen), dan krijg ik 1784 tags. Dedju. Die ga ik dus apart nog eens moeten importeren.

Maar eerst de links leggen tussen wat wél overeenkomt en bestaat. Drie, twee, één:

insert into wp_term_relationships (object_id, term_taxonomy_id) select post_id, term_taxonomy_id from wp_tags, wp_terms, wp_post2tag, wp_term_taxonomy where tag=name and wp_tags.tag_id=wp_post2tag.tag_id and wp_term_taxonomy.term_id=wp_terms.term_id;

Oh de vieze SQL, jaja. Maar kijk:

Query OK, 14285 rows affected (8 min 2.81 sec)
Records: 14657 

Ik ben eens benieuwd… en kijk ja, het schijnt te lukken:

Gbtags

Next up: tags opkuisen.

2 Comments

  1. Beestig werk maar alvast beestig bedankt.

  2. Maar nu alles weer aangepast is, zou het overschakelen naar nieuwe versies in de toekomst toch vlot moeten gaan, niet? Allé, als we upgrades die de databasestructuur gerust laten niet meerekenen…

    Nu ik toch bezig ben, ik heb een WordPressvraagje waar niemand mij (zelfs niet op de wp-fora) mij mee kan helpen. Telkens als ik een nieuwe versie van wp installeer, dan krijg ik de eerste dagen de visual text editor niet te zien. En plotseling, na enkele dagen, is hij er telkens opnieuws. En ik doe geen browser aanpassingen, Javascript staat netjes aan… Iemand een idee aan wat dit zou kunnen liggen?

Zeg uw gedacht