In dit artikel zullen we het hebben over het oplossen van conflicten met de Netgsm- en Wordfence Security-plug-in. Dit conflict treedt op wanneer de functie voor telefoonnummerverificatie van de Netgsm-plug-in via sms wordt toegevoegd aan het Woocommerce-registratieformulier en tegelijkertijd de Wordfence Security-plug-in wordt geactiveerd. Dus wat is de reden voor dit conflict? Laten we het samen onderzoeken en oplossen.

Wordfence-plug-in Verborgen invoer en Netgsm

De Wordfence-plug-in voegt een verborgen invoer met de "wfls-email-verification"-ID toe aan het Woocommerce-registratie- en inlogformulier voor de functionaliteit van de recaptcha-functie in de login-beveiligingssectie. Wanneer we op de knop "verificatiecode verzenden" klikken om de sms te ontvangen na het invullen van het registratieformulier, komen we een waarschuwing in de browser tegen die wordt geactiveerd door de Netgsm-plug-in. In deze waarschuwing staat dat het e-mailadres niet is ingevoerd, maar dat wij het e-mailadres hebben ingevoerd. De reden hiervoor is dat de Netgsm-plug-in geen gegevens uit de e-mailbox kan ophalen terwijl er een verborgen invoerelement is toegevoegd door Wordfence Security. Daarom retourneert het een waarschuwing dat het e-mailadres niet is ingevoerd.

Laten we het Wordfence-filter proberen met PHP

Het verborgen invoerelement van Wordfence wordt standaard toegevoegd, zelfs als we de recaptcha-sleutel niet invoeren in de beveiligingsinstellingen voor inloggen. Het eerste dat in ons opkomt om dit te verwijderen, is deze functie uit te schakelen met behulp van Wordfence-filters, toch? Laten we het proberen.

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

Hoewel deze code in de huidige versie de captcha-vereiste voor inlogbeveiliging (ls: inlogbeveiliging) verwijdert, wordt de verborgen invoer niet verwijderd. In dit geval zou de ideale oplossing zijn om invoer uit de DOM te verwijderen met Javascript. In dit artikel zullen we het hebben over de Javascript-oplossing. Uiteraard is dit niet de enige oplossing. We kunnen de OOP-klasse en -methode vinden waaraan de Wordfence-plug-in de relevante invoer toevoegt en deze overschrijven met de codes die we schrijven in het onderliggende thema of de codefragment-plug-in.

Laten we verborgen invoer uit DOM verwijderen met Javascript

We kunnen de volgende aanpak gebruiken om verborgen invoer uit codes te verwijderen met Javascript. Voordat we de details van de aanpak uitleggen, bespreken we eerst een belangrijke kwestie. Als bij deze aanpak de gebeurtenis DOMContentLoaded wordt gebruikt, kunnen de codes op sommige sites ongedefinieerd retourneren. De gebeurtenis DOMContentLoaded wordt onder geen enkele omstandigheid uitgevoerd wanneer de DOM wordt geladen. Om ons succes te garanderen, hebben we onze codes geschreven in het window.onload-evenement. We raden u aan deze codes toe te voegen aan de scripttags, net vóór de afsluitende body-tag in de 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());
});

Wat hebben we met deze codes gedaan? Wanneer de DOM op de pagina wordt geladen, voegt de Wordfence Security-plug-in een variabele toe met de naam oowcRemoveWflsHiddenInput. Als het element niet aanwezig is in de DOM (bijvoorbeeld als deze code op een andere pagina werd uitgevoerd waar het formulier niet bestaat), hebben we de aanwezigheid van het doelelement niet gecontroleerd met het if-blok, omdat forEach toch niet zal werken. We hebben alle doelelementen verwijderd die zijn gevonden met de forEach-lus. Om ervoor te zorgen dat de codes voldoen aan de ES12-normen, wordt de spreadmethode gebruikt. NodeList'iWe hebben het rechtstreeks naar een array geconverteerd. Op deze manier NodeListWe hebben forEach rechtstreeks gebruikt, wat een Array-methode is.