U ovom članku ćemo govoriti o rješavanju sukoba dodataka Netgsm i Wordfence Security. Ovaj sukob nastaje kada se funkcija za provjeru telefonskog broja Netgsm dodatka putem SMS-a doda u obrazac za registraciju Woocommerce i istovremeno se aktivira Wordfence Security dodatak. Dakle, koji je razlog za ovaj sukob? Hajde da to zajedno ispitamo i riješimo.

Wordfence dodatak Skriveni unos i Netgsm

Wordfence dodatak dodaje skriveni unos sa ID-om "wfls-email-verification" u obrazac za registraciju i prijavu na Woocommerce za funkcionalnost funkcije recaptcha u odjeljku sigurnosti prijave. Kada kliknemo na dugme "pošalji verifikacioni kod" da primimo SMS nakon popunjavanja obrasca za registraciju, nailazimo na upozorenje u pretraživaču koje pokreće Netgsm dodatak. U ovom upozorenju piše da adresa e-pošte nije upisana, ali smo uneli email adresu. Razlog za to je taj što Netgsm dodatak ne može preuzeti podatke iz e-mail kutije dok postoji skriveni ulazni element koji je dodao Wordfence Security. Zato vraća upozorenje da email adresa nije unesena.

Pokušajmo koristiti Wordfence filter sa PHP-om

Wordfenceov skriveni element unosa se dodaje prema zadanim postavkama, čak i ako ne unesemo recaptcha ključ u sigurnosne postavke za prijavu. Prva stvar koja nam pada na pamet da uklonimo ovo je da onemogućimo ovu funkciju pomoću Wordfence filtera, zar ne? Hajde da probamo.

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

Iako ovaj kod uklanja zahtjev captcha za sigurnost prijave (ls: sigurnost prijave) u trenutnoj verziji, ne uklanja skriveni unos. U ovom slučaju, idealno rješenje bi bilo uklanjanje unosa iz DOM-a pomoću Javascript-a. U ovom članku ćemo govoriti o Javascript rješenju. Naravno, ovo 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 dodatku podređene teme ili isječka koda.

Uklonimo skriveni unos iz DOM-a pomoću Javascripta

Možemo koristiti sljedeći pristup za uklanjanje skrivenog unosa iz kodova pomoću Javascript-a. Prije nego što objasnimo detalje pristupa, pređimo na jedno važno pitanje. Ako se u ovom pristupu koristi događaj DOMContentLoaded, kodovi se mogu vratiti nedefinirani na nekim stranicama. Događaj DOMContentLoaded se ne pokreće kada se DOM učita u svim okolnostima. Da bismo osigurali naš uspjeh, napisali smo naše kodove u događaj window.onload. Preporučujemo da dodate ove kodove 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());
});

Pa šta smo uradili sa ovim kodovima? Kada se DOM na stranici učita, dodatak Wordfence Security dodaje varijablu pod nazivom oowcRemoveWflsHiddenInput. Ako element nije prisutan u DOM-u (na primjer, ako je ovaj kod pokrenut na drugoj stranici na kojoj obrazac ne postoji), nismo provjerili postojanje ciljnog elementa sa if blokom jer forEach ionako neće raditi. Uklonili smo sve ciljne elemente pronađene sa forEach petljom. Kako bi se osiguralo da su kodovi u skladu sa ES12 standardima, koristi se metoda širenja. NodeList'iKonvertovali smo ga direktno u niz. Na ovaj način NodeListDirektno smo koristili forEach, što je niz metoda.