U ovom ćemo članku govoriti o rješavanju sukoba dodataka Netgsm i Wordfence Security. Do ovog sukoba dolazi kada se značajka provjere telefonskog broja dodatka Netgsm putem SMS-a doda u obrazac za registraciju na Woocommerceu i istovremeno se aktivira dodatak Wordfence Security. Dakle, koji je razlog za ovaj sukob? Ispitajmo i riješimo to zajedno.

Wordfence dodatak Skriveni unos i Netgsm

Dodatak Wordfence dodaje skriveni unos s ID-om "wfls-email-verification" u obrazac za registraciju i prijavu na Woocommerce za funkcionalnost značajke recaptcha u odjeljku za sigurnost prijave. Kada kliknemo na gumb "pošalji kontrolni kod" za primanje SMS-a nakon ispunjavanja obrasca za registraciju, nailazimo na upozorenje u pregledniku koje pokreće Netgsm dodatak. U ovom upozorenju piše da email adresa nije upisana, ali mi smo unijeli email adresu. Razlog za to je taj što dodatak Netgsm ne može dohvatiti podatke iz pretinca e-pošte dok postoji skriveni element unosa koji je dodao Wordfence Security. Zato vraća upozorenje da email adresa nije upisana.

Pokušajmo koristiti Wordfence filter s PHP-om

Wordfenceov skriveni element unosa dodaje se prema zadanim postavkama, čak i ako ne unesemo ključ recaptcha u sigurnosnim postavkama prijave. Prva stvar koja nam pada na pamet da ovo uklonimo je da onemogućimo ovu značajku pomoću Wordfence filtara, zar ne? Hajde da probamo.

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

Iako ovaj kod uklanja captcha zahtjev za sigurnost prijave (ls: login security) u trenutnoj verziji, ne uklanja skriveni unos. U ovom bi slučaju idealno rješenje bilo ukloniti unos iz DOM-a s Javascriptom. U ovom ćemo članku govoriti o Javascript rješenju. Naravno, to nije jedino rješenje. Možemo pronaći OOP klasu i metodu kojoj Wordfence dodatak dodaje relevantan unos i nadjačati ga kodovima koje pišemo u podređenoj temi ili dodatku isječka koda.

Uklonimo skriveni unos iz DOM-a pomoću Javascripta

Možemo koristiti sljedeći pristup za uklanjanje skrivenih unosa iz kodova s Javascriptom. Prije nego objasnimo pojedinosti pristupa, prijeđimo na jedno važno pitanje. Ako se događaj DOMContentLoaded koristi u ovom pristupu, kodovi se mogu vratiti nedefinirani na nekim stranicama. Događaj DOMContentLoaded ne pokreće se kada se DOM učita u svim okolnostima. Kako bismo osigurali naš uspjeh, napisali smo naše kodove u događaju window.onload. Preporučujemo da ove kodove dodate među oznake skripte, neposredno prije završne oznake tijela u DOM-u.

// 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());
});

Dakle, što smo učinili s ovim kodovima? Kada se DOM na stranici učita, dodatak Wordfence Security dodaje varijablu koja se zove oowcRemoveWflsHiddenInput. Ako element nije prisutan u DOM-u (na primjer, ako se ovaj kod izvodi na drugoj stranici na kojoj obrazac ne postoji), nismo provjeravali postojanje ciljnog elementa s blokom if jer forEach ionako neće raditi. Uklonili smo sve ciljne elemente pronađene petljom forEach. Kako bi se osiguralo da su kodovi u skladu sa standardima ES12, koristi se metoda širenja. NodeList'iPretvorili smo ga izravno u polje. Na ovaj način NodeListIzravno smo koristili forEach, što je Array metoda.