In diesem Artikel werden wir über die Konfliktlösung zwischen Netgsm und Wordfence Security Plugins sprechen. Dieser Konflikt tritt auf, wenn die Telefonnummernüberprüfungsfunktion des Netgsm-Plugins per SMS zum Woocommerce-Registrierungsformular hinzugefügt und gleichzeitig das Wordfence-Sicherheits-Plugin aktiviert wird. Was ist also der Grund für diesen Konflikt? Lassen Sie es uns gemeinsam untersuchen und lösen.

Wordfence Plugin Hidden Input und Netgsm

Das Wordfence-Plugin fügt dem Woocommerce-Registrierungs- und Anmeldeformular eine versteckte Eingabe mit der ID „wfls-email-verification“ für die Funktionalität der Recaptcha-Funktion im Abschnitt „Anmeldesicherheit“ hinzu. Wenn wir nach dem Ausfüllen des Registrierungsformulars auf die Schaltfläche „Bestätigungscode senden“ klicken, um die SMS zu erhalten, stoßen wir im Browser auf eine durch das Netgsm-Plugin ausgelöste Warnung. In dieser Warnung heißt es, dass die E-Mail-Adresse nicht eingegeben wurde, wir aber die E-Mail-Adresse eingegeben haben. Der Grund dafür ist, dass das Netgsm-Plugin keine Daten aus dem E-Mail-Postfach abrufen kann, während Wordfence Security ein verstecktes Eingabeelement hinzugefügt hat. Aus diesem Grund wird eine Warnung zurückgegeben, dass die E-Mail-Adresse nicht eingegeben wurde.

Versuchen wir, den Wordfence-Filter mit PHP zu verwenden

Das versteckte Eingabeelement von Wordfence wird standardmäßig hinzugefügt, auch wenn wir den Recaptcha-Schlüssel nicht in den Anmeldesicherheitseinstellungen eingeben. Das erste, was uns zum Entfernen in den Sinn kommt, ist, diese Funktion mithilfe von Wordfence-Filtern zu deaktivieren, oder? Lass es uns versuchen.

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

Obwohl dieser Code in der aktuellen Version die Captcha-Anforderung für die Anmeldesicherheit (ls: login security) entfernt, entfernt er nicht die versteckte Eingabe. In diesem Fall wäre die ideale Lösung, Eingaben mit Javascript aus dem DOM zu entfernen. In diesem Artikel werden wir über die Javascript-Lösung sprechen. Natürlich ist dies nicht die einzige Lösung. Wir können die OOP-Klasse und -Methode finden, zu der das Wordfence-Plugin die relevanten Eingaben hinzufügt, und sie mit den Codes überschreiben, die wir im untergeordneten Theme oder Code-Snippet-Plugin schreiben.

Lassen Sie uns versteckte Eingaben mit Javascript aus dem DOM entfernen

Wir können den folgenden Ansatz verwenden, um versteckte Eingaben aus Codes mit Javascript zu entfernen. Bevor wir die Einzelheiten des Ansatzes erläutern, gehen wir auf ein wichtiges Thema ein. Wenn bei diesem Ansatz das DOMContentLoaded-Ereignis verwendet wird, geben die Codes auf einigen Websites möglicherweise undefiniert zurück. Das DOMContentLoaded-Ereignis wird unter keinen Umständen ausgeführt, wenn das DOM geladen wird. Um unseren Erfolg sicherzustellen, haben wir unsere Codes im window.onload-Ereignis geschrieben. Wir empfehlen, diese Codes zwischen den Skript-Tags direkt vor dem schließenden Body-Tag im DOM einzufügen.

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

Was haben wir also mit diesen Codes gemacht? Wenn das DOM auf der Seite geladen wird, fügt das Wordfence Security-Plugin eine Variable namens oowcRemoveWflsHiddenInput hinzu. Wenn das Element im DOM nicht vorhanden ist (z. B. wenn dieser Code auf einer anderen Seite ausgeführt wurde, auf der das Formular nicht vorhanden ist), haben wir die Existenz des Zielelements nicht mit dem if-Block überprüft, da forEach ohnehin nicht funktioniert. Wir haben alle mit der forEach-Schleife gefundenen Zielelemente entfernt. Um sicherzustellen, dass die Codes den ES12-Standards entsprechen, wird die Spread-Methode verwendet. NodeList'iWir haben es direkt in ein Array konvertiert. Auf diese Weise NodeListWir haben forEach direkt verwendet, eine Array-Methode.