Ebben a cikkben a Netgsm és a Wordfence Security bővítmény konfliktusfeloldásáról fogunk beszélni. Ez az ütközés akkor fordul elő, ha a Netgsm beépülő modul telefonszám-ellenőrző funkciója SMS-ben hozzáadásra kerül a Woocommerce regisztrációs űrlapjához, és ezzel egyidejűleg a Wordfence Security beépülő modul is aktiválva van. Tehát mi az oka ennek a konfliktusnak? Vizsgáljuk meg és oldjuk meg együtt.

Wordfence Plugin Rejtett bemenet és Netgsm

A Wordfence beépülő modul egy rejtett bemenetet ad hozzá a „wfls-email-verification” azonosítóval a Woocommerce regisztrációs és bejelentkezési űrlapjához a bejelentkezési biztonság szakaszban található recaptcha funkció funkcionalitásához. Amikor a regisztrációs űrlap kitöltése után az "ellenőrző kód küldése" gombra kattintunk, hogy megkapjuk az SMS-t, a Netgsm beépülő modul által kiváltott figyelmeztetést találunk a böngészőben. Ebben a figyelmeztetésben azt írja, hogy az e-mail címet nem adta meg, de mi megadtuk az e-mail címet. Ennek az az oka, hogy a Netgsm beépülő modul nem tudja lekérni az adatokat az e-mail fiókból, miközben a Wordfence Security által hozzáadott rejtett beviteli elem található. Ezért figyelmeztetést ad vissza, hogy nem adta meg az e-mail címet.

Próbáljuk meg a Wordfence szűrő használatát PHP-vel

A Wordfence rejtett beviteli eleme alapértelmezés szerint akkor is hozzáadódik, ha a bejelentkezés biztonsági beállításainál nem írjuk be a recaptcha kulcsot. Az első dolog, ami eszünkbe jut ennek eltávolításához, hogy le kell tiltani ezt a funkciót a Wordfence szűrőkkel, igaz? Próbáljuk ki.

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

Bár ez a kód eltávolítja a bejelentkezési biztonság (ls: bejelentkezési biztonság) captcha követelményét a jelenlegi verzióban, nem távolítja el a rejtett bevitelt. Ebben az esetben az ideális megoldás az lenne, ha Javascript segítségével eltávolítaná a bemenetet a DOM-ból. Ebben a cikkben a Javascript megoldásról fogunk beszélni. Természetesen nem ez az egyetlen megoldás. Megtaláljuk azt az OOP osztályt és metódust, amelyhez a Wordfence beépülő modul hozzáadja a megfelelő bemenetet, és felülírjuk a gyermektémában vagy kódrészlet pluginban írt kódokkal.

Távolítsuk el a rejtett bemenetet a DOM-ból Javascript segítségével

A következő megközelítést használhatjuk a rejtett bemenetek eltávolítására a kódokból Javascript segítségével. Mielőtt elmagyaráznánk a megközelítés részleteit, térjünk át egy fontos kérdésre. Ha ebben a megközelítésben a DOMContentLoaded eseményt használja, a kódok definiálatlanul térhetnek vissza egyes webhelyeken. A DOMContentLoaded esemény minden körülmények között nem fut le, amikor a DOM betöltődik. Sikerünk biztosítása érdekében kódjainkat beírtuk a window.onload eseménybe. Javasoljuk, hogy ezeket a kódokat adja hozzá a szkriptcímkék közé, közvetlenül a záró body címke elé a DOM-ban.

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

Szóval mit csináltunk ezekkel a kódokkal? Amikor az oldalon lévő DOM betöltődik, a Wordfence Security beépülő modul hozzáad egy oowcRemoveWflsHiddenInput nevű változót. Ha az elem nincs jelen a DOM-ban (például ha ez a kód egy másik oldalon futott le, ahol nem létezik az űrlap), akkor nem ellenőriztük a célelem meglétét az if blokkkal, mert a forEach úgysem fog működni. Eltávolítottuk a forEach ciklusban talált összes célelemet. Annak biztosítására, hogy a kódok megfeleljenek az ES12 szabványoknak, a spread módszert használják. NodeList'iKözvetlenül tömbbé alakítottuk. Ily módon NodeListKözvetlenül a forEach-et használtuk, ami egy Array metódus.