Në këtë artikull, ne do të flasim për zgjidhjen e konfliktit të shtojcave Netgsm dhe Wordfence Security. Ky konflikt ndodh kur veçoria e verifikimit të numrit të telefonit të shtojcës Netgsm me SMS shtohet në formularin e regjistrimit të Woocommerce dhe aktivizohet në të njëjtën kohë shtojca e sigurisë Wordfence. Pra, cila është arsyeja e këtij konflikti? Le ta shqyrtojmë dhe ta zgjidhim së bashku.

Hyrja e fshehur e shtojcës Wordfence dhe Netgsm

Shtojca Wordfence shton një hyrje të fshehur me ID-në "wfls-email-verification" në formularin e regjistrimit dhe hyrjes në Woocommerce për funksionalitetin e veçorisë recaptcha në seksionin e sigurisë së hyrjes. Kur klikojmë në butonin "dërgo kodin e verifikimit" për të marrë SMS-në pas plotësimit të formularit të regjistrimit, hasim në një paralajmërim në shfletuesin e shkaktuar nga plug-in-i Netgsm. Në këtë paralajmërim thotë se adresa e emailit nuk është futur, por ne kemi vendosur adresën e emailit. Arsyeja për këtë është se shtojca Netgsm nuk mund të marrë të dhëna nga kutia e postës elektronike ndërsa ekziston një element i fshehur hyrës i shtuar nga Wordfence Security. Kjo është arsyeja pse ai kthen një paralajmërim se adresa e emailit nuk është futur.

Le të provojmë të përdorim filtrin Wordfence me PHP

Elementi hyrës i fshehur i Wordfence shtohet si parazgjedhje, edhe nëse nuk e fusim çelësin recaptcha në cilësimet e sigurisë së hyrjes. Gjëja e parë që na vjen në mendje për ta hequr këtë është ta çaktivizojmë këtë veçori duke përdorur filtrat e Wordfence, apo jo? Le ta provojmë.

<?php add_filter( 'wordfence_ls_require_captcha', '__return_false' );

Megjithëse ky kod heq kërkesën captcha për sigurinë e hyrjes (ls: siguria e hyrjes) në versionin aktual, ai nuk heq hyrjen e fshehur. Në këtë rast, zgjidhja ideale do të ishte heqja e hyrjes nga DOM me Javascript. Në këtë artikull, ne do të flasim për zgjidhjen Javascript. Sigurisht, kjo nuk është zgjidhja e vetme. Ne mund të gjejmë klasën dhe metodën OOP në të cilën shtojca Wordfence shton hyrjen përkatëse dhe ta anashkalojmë atë me kodet që shkruajmë në temën e fëmijës ose në shtojcën e fragmentit të kodit.

Le të heqim hyrjen e fshehur nga DOM me Javascript

Ne mund të përdorim qasjen e mëposhtme për të hequr hyrjen e fshehur nga kodet me Javascript. Para se të shpjegojmë detajet e qasjes, le të kalojmë mbi një çështje të rëndësishme. Nëse ngjarja DOMContentLoaded përdoret në këtë qasje, kodet mund të kthehen të papërcaktuara në disa sajte. Ngjarja DOMContentLoaded nuk funksionon kur DOM ngarkohet në të gjitha rrethanat. Për të siguruar suksesin tonë, ne kemi shkruar kodet tona në ngjarjen window.onload. Ne ju rekomandojmë që t'i shtoni këto kode midis etiketave të skriptit, pak përpara etiketës së mbylljes së trupit në DOM.

// Remove Wordfence Security hidden email input due to conflict with Netgsm plugin by Onur Özden Web Çözümleri
 window.addEventListener('load', () => {
    // used window.onload due to DOMContentLoaded not working properly for this codes
  const oowcRemoveWflsHiddenInput = [...document.querySelectorAll("input[name='wfls-email-verification']")];
  oowcRemoveWflsHiddenInput.forEach(hiddenInput => hiddenInput.remove());
});

Pra, çfarë bëmë me këto kode? Kur ngarkohet DOM në faqe, shtojca e Wordfence Security shton një variabël të quajtur oowcRemoveWflsHiddenInput. Nëse elementi nuk është i pranishëm në DOM (për shembull, nëse ky kod funksionon në një faqe tjetër ku formulari nuk ekziston), ne nuk e kontrolluam ekzistencën e elementit të synuar me bllokun if sepse forEach nuk do të funksionojë gjithsesi. Ne hoqëm të gjithë elementët e synuar të gjetur me ciklin forEach. Për të siguruar që kodet përputhen me standardet ES12, përdoret metoda e përhapjes. NodeList'iNe e konvertuam atë drejtpërdrejt në një grup. Në këtë mënyrë NodeListNe përdorëm drejtpërdrejt forEach, e cila është një metodë Array.