În acest articol, vom vorbi despre rezolvarea conflictelor de pluginuri Netgsm și Wordfence Security. Acest conflict apare atunci când funcția de verificare a numărului de telefon a pluginului Netgsm prin SMS este adăugată la formularul de înregistrare Woocommerce și pluginul Wordfence Security este activat în același timp. Deci, care este motivul acestui conflict? Să examinăm și să rezolvăm împreună.

Wordfence Plugin Hidden Input și Netgsm

Pluginul Wordfence adaugă o intrare ascunsă cu ID-ul „wfls-email-verification” în formularul de înregistrare și autentificare Woocommerce pentru funcționalitatea caracteristicii recaptcha din secțiunea de securitate a autentificarii. Când facem clic pe butonul „trimite cod de verificare” pentru a primi SMS-ul după completarea formularului de înregistrare, întâlnim un avertisment în browser declanșat de plug-in-ul Netgsm. În acest avertisment, scrie că adresa de e-mail nu a fost introdusă, dar noi am introdus adresa de e-mail. Motivul pentru aceasta este că pluginul Netgsm nu poate prelua date din caseta de e-mail în timp ce există un element de intrare ascuns adăugat de Wordfence Security. De aceea, returnează un avertisment că adresa de e-mail nu a fost introdusă.

Să încercăm să folosim filtrul Wordfence cu PHP

Elementul de introducere ascuns al Wordfence este adăugat implicit, chiar dacă nu introducem cheia recaptcha în setările de securitate de conectare. Primul lucru care ne vine în minte pentru a elimina acest lucru este să dezactivăm această caracteristică folosind filtre Wordfence, nu? Să încercăm.

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

Deși acest cod elimină cerința captcha pentru securitatea autentificarii (ls: login security) în versiunea curentă, nu elimină intrarea ascunsă. În acest caz, soluția ideală ar fi să eliminați intrarea din DOM cu Javascript. În acest articol, vom vorbi despre soluția Javascript. Desigur, aceasta nu este singura soluție. Putem găsi clasa și metoda OOP la care pluginul Wordfence adaugă intrarea relevantă și o suprascriem cu codurile pe care le scriem în tema copil sau în pluginul fragmentului de cod.

Să eliminăm intrarea ascunsă din DOM cu Javascript

Putem folosi următoarea abordare pentru a elimina intrările ascunse din codurile cu Javascript. Înainte de a explica detaliile abordării, să trecem peste o problemă importantă. Dacă evenimentul DOMContentLoaded este utilizat în această abordare, codurile pot reveni nedefinite pe unele site-uri. Evenimentul DOMContentLoaded nu rulează când DOM-ul este încărcat în toate circumstanțele. Pentru a ne asigura succesul, ne-am scris codurile în evenimentul window.onload. Vă recomandăm să adăugați aceste coduri printre etichetele de script, chiar înainte de eticheta body de închidere î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());
});

Deci ce am făcut cu aceste coduri? Când DOM-ul de pe pagină este încărcat, pluginul Wordfence Security adaugă o variabilă numită oowcRemoveWflsHiddenInput. Dacă elementul nu este prezent în DOM (de exemplu, dacă acest cod a rulat pe o altă pagină în care formularul nu există), nu am verificat existența elementului țintă cu blocul if deoarece forEach oricum nu va funcționa. Am eliminat toate elementele țintă găsite cu bucla forEach. Pentru a se asigura că codurile respectă standardele ES12, se utilizează metoda de răspândire. NodeList'iL-am convertit direct într-o matrice. În acest fel NodeListAm folosit direct forEach, care este o metodă Array.