Sinds kort staat er een forum op deze site.
Niet via een plugin. Niet via bbPress.
Maar eentje die ik zelf gebouwd heb.
Op het eerste gezicht lijkt dat misschien niet zo bijzonder. Voor WordPress bestaan immers genoeg goede forum-plugins. Toch besloot ik het zelf te bouwen niet omdat de bestaande opties slecht zijn, maar omdat ik wilde weten of ik het kon.
Dit is het verhaal van hoe dat ging.
Waarom niet gewoon bbPress?
Eerlijk antwoord: bbPress is prima. Ik gebruik het op een andere site al een tijdje zonder problemen. Maar wanneer je net zoals ik wil begrijpen hoe iets werkt, ik bedoel écht werkt onder de motorkap, dan is “installeer een bestaande plugin” niet altijd de meest bevredigende route.
Daarnaast had ik een concreet probleem: ik wilde een forum dat naadloos aansloot bij mijn eigen thema, mijn eigen CSS, mijn eigen manier van werken. Elke keer dat ik een bestaande oplossing probeerde aan te passen, zat ik te worstelen met iemand anders zijn architectuur. Op een gegeven moment is het eerlijker om gewoon bij nul te beginnen.
Dus dat deed ik.
Hoe het begon: een CPT en een taxonomy
De kern van elk WordPress-forum is eigenlijk verrassend eenvoudig. Je hebt topics — dat zijn gewoon posts. Je hebt categorieën — dat zijn gewoon taxonomy-termen. En je hebt replies — dat zijn, in mijn geval, comments met een eigen `comment_type`.
rfl_topic → Custom Post Type
rfl_category → Taxonomy (hiërarchisch)
rfl_reply → wp_comments met type ‘rfl_reply’
Het mooie van WordPress is dat het zelf het fundament heeft. Het enige wat ik hoefde te bouwen was de laag er bovenop: de templates, de query-logica, de formulieren, de rechtencheck. Klinkt eenvoudig. Is het ook — totdat je de details ingaat.
De dingen die je niet verwacht
Rewrite rules. Altijd weer die vermaledijde rewrite rules. Het duurde langer dan ik wil toegeven om `/forum/category/linux/` correct te laten werken via een taxonomy-archief én via een shortcode op dezelfde pagina, zonder dat ze elkaar in de wielen reden. De oplossing was uiteindelijk het splitsen van de twee paden: de taxonomy-template via `template_include`, de shortcode via een eigen render-methode. Twee aparte codepaden, één consistente uitkomst.
Template overerving. Een plugin-template die er goed uitziet in het ene thema, oogt als een ramp in het andere. De remedie: de plugin rendert altijd zijn eigen wrapper (`.rfl-archive-wrapper`), en het thema krijgt alleen header en footer voor zijn rekening. Zo houd je de controle, zonder dat je de thema-integratie hoeft op te geven.
Categorievolgorde. Standaard sorteert WordPress taxonomieën op naam. Logisch, maar niet altijd wat je wilt. Een `_rfl_menu_order` term-meta veld later, en admins kunnen zelf de volgorde bepalen — gewoon een getal invullen in het edit-scherm.
Uploads voor subscribers. WordPress blokkeert standaard het uploaden van bestanden voor gebruikers zonder de juiste rol. Een tijdelijke `user_has_cap` filter — scoped, dus hij doet alleen zijn werk op het juiste moment en lost dat netjes op zonder de beveiliging te compromitteren.
Er waren meer van dit soort kleine verrassingen. Zo gaat dat met bouwen.
Wat het forum nu kan
Na een paar weken van herhalen staat er nu iets waar ik best trots op ben. Geen bloat, geen overbodige instellingen, gewoon wat een forum moet doen:
– Categorieën en subcategorieën, met een instelbare volgorde
– Privé forums, niet-ingelogde bezoekers zien een nette toegangspoort in plaats van een lege pagina of een foutmelding
– HTML-banners per categorie, handig voor aankondigingen of uitleg boven een topiclijst
– Sticky topics, een topic bovenaan vastpinnen met één klik
– Forum-stijl topic-layout, niet de standaard blogpost-opmaak van WordPress, maar een echte card-layout met auteurkolom, avatars en postnummers
– Moderatie, topics sluiten, verwijderen, replies verwijderen, alles zit er in
De plugin heet: Rudy Forum Lite. De naam zegt het al: dit is de lichtgewicht versie. Geen gebruikersrollen per categorie, geen notificaties, geen bijlagen. Dat komt later. Of misschien niet soms is lite precies goed genoeg.
Is het de moeite waard geweest?
Ja. Niet per se omdat de plugin beter is dan bbPress (dat is hij niet, althans niet op papier), maar omdat ik nu precies weet hoe elk onderdeel werkt. Als er iets stuk gaat, weet ik waar ik moet kijken. Als ik iets wil toevoegen, hoef ik geen vreemde codebase te ontcijferen.
Er is iets bevredigends aan een werkend systeem dat je zelf volledig begrijpt. Dat gevoel krijg je niet door een plugin te installeren.
Het forum staat open. Maak een account aan, stel een vraag, of start een discussie. De categorieën zijn nog schaars, dat is opzettelijk. Ik begin liever klein en bouw verder op basis van wat er daadwerkelijk besproken wordt.
Tot ziens in het forum.
— Rudy