Kutengeneza Search Modal kwa Tovuti za WordPress Zinazozingatia Uanachama
Mafunzo mengi ya utafutaji (search) kwenye WordPress huishia baada ya kuongeza widget kwenye header.
Hii inafeli unapokuwa na maudhui yaliyofungwa kama kozi za kulipia au video za siri. Utafutaji wa kawaida utavuja vichwa vya habari vya maudhui yako ya siri kwa wageni ambao hawajajisajili.
Nilitengeneza live search modal kwa ajili ya tovuti ya uanachama ya mazoezi ya mwili (fitness). Tovuti hiyo inatumia WordPress, WooCommerce, Divi, LearnDash, na WishList Member.
Hivi ndivyo unavyoweza kutengeneza utafutaji unaozingatia kizuizi chako cha malipo (paywall).
Usanifu (The Architecture)
Nilitumia index iliyounganishwa yenye kuchuja kulingana na ufikiaji (access-aware filtering). Nilichagua hili ili kuhakikisha mtumiaji ambaye hajajisajili haoni kamwe kichwa cha habari au dondoo kutoka kwa chapisho la wanachama pekee.
UI inatumia icon inayofungua overlay ya skrini nzima. Hii huokoa nafasi kwenye simu na inaonekana nadhifu kuliko bar ya kuingizia maandishi (input bar) iliyosongamana.
Backend
Kila kitu kinaendeshwa kupitia REST route moja maalum kwenye child theme.
Sheria muhimu za kiufundi:
- Linda utegemezi (Guard dependencies): Tumia ukaguzi wa function kwa plugin za utafutaji kama Relevanssi. Ikiwa plugin haipo, utafutaji unapaswa kurudi kwenye WordPress core badala ya kuharibu tovuti.
- Kuchuja upande wa seva (Server-side filtering): Usichuje matokeo kwa kutumia JavaScript kamwe. Ikiwa unaficha matokeo kwenye kivinjari (browser), data tayari ipo kwenye network response. Mtu yeyote mwenye DevTools anaweza kuiona. Chuja data kabla ya seva kutuma jibu.
- Kutenga cache (Cache exclusion): Lazima utenge REST route yako ya utafutaji kutoka kwenye page caching. Ikiwa unahifadhi matokeo kwenye cache, utafutaji wa mwanachama mmoja unaweza kuonyeshwa kwa mgeni, hivyo kuvuja maudhui ya siri.
Frontend
Upande wa mteja (client side) unatumia vanilla JavaScript.
Mambo matatu yanayofanya UX ifanye kazi:
- Debounce: Subiri ms 250 baada ya kubofya herufi kabla ya kutuma ombi (request). Hii inazuia mzigo usiohitajika kwenye seva.
- AbortController: Ghairi maombi ya awali wakati mtumiaji akiendelea kuandika. Hii inazuia matokeo ya zamani yasifunike mapya.
- Hali za makosa (Error states): Onyesha ujumbe wa wazi ikiwa fetch itafeli. Loader inayozunguka bila kuacha ni UX mbaya.
Somo la Simu
Nilijaribu kuingiza (inject) kitufe cha utafutaji kwenye Divi mobile menu. Theme ilizuia (intercepted) bofyo hizo, na kufanya kitufe kisibofye.
Suluhisho lilikuwa rahisi: Acha kupambana na theme.
Badala ya kuweka kitufe ndani ya menu, niliingiza kwenye header kama element inayojitegemea. Hii iliikalia nje ya udhibiti wa theme na kuifanya iwe rahisi kugusa.
Muhtasari
- Udhibiti wa ufikiaji lazima ufanyike upande wa seva.
- Tenga endpoints za utafutaji kutoka kwenye cache yako.
- Tumia debounce na AbortController kushughulikia maombi.
- Escape data zote za API kabla ya kuzingiza kwenye DOM ili kuzuia XSS.
- Ikiwa page builder inapinga kodi yako, weka element yako kando yake badala ya ndani yake.
Chanzo: https://dev.to/highcenburg/building-a-search-modal-for-a-membership-gated-wordpress-site-b92
