Stari sajt je trčao na klasičnom WordPress plugin steku.
MemberPress za članstvo. myCRED za virtuelne poene. Ultimate Member za profile. Yoast za SEO. Login with AJAX za modalne forme. reCAPTCHA za zaštitu od botova. I još desetak manjih.
Svaki plugin je bio zavisnost. Svaki je mogao da se pokvari sa sledećim WordPress update-om. Svaki je imao svoj način da radi stvari, svoju dokumentaciju (ili nedostatak iste), svoje quirks.
Posle obnove: ACF, SMTP2Go, Google Sitemap, WP Simple Firewall. To je sve.
Sve ostalo je prilagođeno izgrađeno.
Šta smo zamenili
MemberPress → Custom membership sistem
6 custom DB tabela. Entitlement model sa stanjima: active, expired, revoked, scheduled. Atomička potrošnja kvote SQL upitom koji sprečava race conditions.
MemberPress je moćan. Ali kada Stripe odbije vašu aplikaciju i morate da redizajnirate ceo model, prilagođeni kod je jedina opcija.
myCRED → Diminishing returns logika
Stari sistem: uploaduj dokument, dobij poene, potroši poene na download.
Novi sistem: uploaduj dokument, dobij PRO (14/7/3/0 dana po uzastopnom uploadu u 30 dana). Ceiling od 28 dana mesečno.
myCRED nije mogao ovo. Ni jedan plugin nije mogao. Logika je specifična za naš use case.
Ultimate Member → Custom auth
119.927 korisnika migrirano. Custom login/register forme. Email verifikacija. Profile pages.
Ultimate Member je dobar za generičke sajtove. Ali kada trebate kontrolu nad svakim aspektom auth flow-a, vlasnički kod pobeđuje.
Yoast/RankMath → Custom SEO
JSON-LD structured data za dokumente, institucije, osobe. Custom sitemaps za 38.000+ postova. Meta tagovi koji razumeju naš sadržaj.
SEO plugini pokušavaju da budu sve za sve. Mi smo trebali specifično za akademske dokumente.
Login with AJAX → Custom modali
Jednostavne forme. Turnstile umesto reCAPTCHA. Kontrola nad svakim poljem.
Šta smo zadržali
- ACF — Custom fields. Mogao sam i bez njega, ali zašto? Funkcioniše.
- SMTP2Go — Email delivery. Ne pokušavam da reinventujem email.
- Google Sitemap — Sitemaps. Radi posao.
- WP Simple Firewall — Security basics. Bolje nego ništa.
Filozofija: zameni kada plugin ograničava. Zadrži kada plugin radi i ne smeta.
CTA state machine primer
Jedna funkcija: studenti_get_cta_state($user_id, $document_id)
Vraća sve što je potrebno za prikaz call-to-action:
- Primary button tekst i link
- Secondary button (ako postoji)
- Napomena (npr. "Imaš još 3 preuzimanja")
- Badge (npr. "Tvoj dokument", "U tvojoj biblioteci")
- Razlog stanja (za debugging)
Koristi se na 4 mesta u UI-ju:
- Sidebar kartica
- Sticky header
- End-of-preview banner
- Blur overlay
7 mogućih stanja:
not_logged_inno_entitlementquota_exhaustedpro_expiredhas_quotais_authorin_library
Pokušajte da konfigurišete MemberPress da radi ovo. Možda uspete. Posle mnogo sati čitanja dokumentacije i hakovanja.
Ili napišete jednu funkciju koja radi tačno ono što trebate.
Custom WP-CLI komande
9+ komandi za upravljanje platformom:
# Revizija postova za probleme kvaliteta
wp studenti audit-posts --dry-run
# Migracija fajlova na R2
wp studenti migrate-r2 --batch=100
# Backfill institucija
wp studenti backfill-institutions --threshold=0.9
# Backfill excerpts
wp studenti backfill-excerpts --limit=1000
# Import institucija iz JSON-a
wp studenti institutions import_all
# Logo CLI za institucije
wp studenti logo-cli
# Draft audit
wp studenti draft-audit
Pattern: dry-run prvo, batch procesiranje, progress bars, CSV export, rate limiting.
Ove komande su kako upravljate sa 38.000 postova bez gubitka razuma. Ili podataka.
Trade-off: Sloboda vs. održavanje
Svaki custom kod je kod koji vi održavate.
Kada WordPress izbaci update, vi testirate. Kada PHP verzija napreduje, vi adaptirate. Kada nešto ne radi, vi debuggujete.
Sa pluginima, to je nečiji drugi problem. (Osim kada plugin developer napusti projekat. Ili promeni API. Ili doda breaking change.)
Za nas, trade-off je jasan: platforma je toliko specifična da generic plugini uvek zahtevaju hakove. A hakovi su krhki.
Bolje je imati kod koji razumemo nego plugin koji "većinom radi."
Kada NE graditi custom
- Email delivery — SMTP je SMTP. Koristite servis.
- Security basics — Firewall plugini imaju znanje koje vi nemate.
- Standardne funkcionalnosti — ACF za custom fields jer zašto ne?
Pravilo: ako funkcionalnost nije core differentiator vaše platforme, ne trošite vreme na reinventing.
Membership JE naš core differentiator. SEO JE naš core differentiator. Zato su custom.
Email delivery NIJE differentiator. Zato koristimo plugin.
Posedovanje koda oslobađa. Ali sloboda dolazi sa odgovornošću.
15 plagina → 5 plagina nije samo metrika. To je filozofska odluka da ćemo mi kontrolisati sudbinu naše platforme.
Cena: održavanje. Nagrada: fleksibilnost koja plugini nikada ne mogu dati.