In questo articolo parleremo della risoluzione dei conflitti tra i plugin Netgsm e Wordfence Security. Questo conflitto si verifica quando la funzione di verifica del numero di telefono del plug-in Netgsm tramite SMS viene aggiunta al modulo di registrazione di Woocommerce e contemporaneamente viene attivato il plug-in Wordfence Security. Allora qual è la ragione di questo conflitto? Esaminiamolo e risolviamolo insieme.

Plugin Wordfence Ingresso nascosto e Netgsm

Il plugin Wordfence aggiunge un input nascosto con l'ID "wfls-email-verification" al modulo di registrazione e accesso di Woocommerce per la funzionalità della funzione recaptcha nella sezione di sicurezza dell'accesso. Quando clicchiamo sul pulsante "invia codice di verifica" per ricevere l'SMS dopo aver compilato il modulo di registrazione, riscontriamo un avviso nel browser attivato dal plug-in Netgsm. In questo avviso si dice che l'indirizzo e-mail non è stato inserito, ma noi abbiamo inserito l'indirizzo e-mail. La ragione di ciò è che il plugin Netgsm non può recuperare i dati dalla casella di posta elettronica mentre è presente un elemento di input nascosto aggiunto da Wordfence Security. Ecco perché restituisce un avviso che l'indirizzo email non è stato inserito.

Proviamo a utilizzare il filtro Wordfence con PHP

L'elemento di input nascosto di Wordfence viene aggiunto per impostazione predefinita, anche se non inseriamo la chiave recaptcha nelle impostazioni di sicurezza del login. La prima cosa che ci viene in mente per rimuoverlo è disabilitare questa funzione utilizzando i filtri Wordfence, giusto? Proviamolo.

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

Sebbene questo codice rimuova il requisito captcha per la sicurezza dell'accesso (ls: login security) nella versione corrente, non rimuove l'input nascosto. In questo caso la soluzione ideale sarebbe rimuovere l'input dal DOM con Javascript. In questo articolo parleremo della soluzione Javascript. Naturalmente questa non è l’unica soluzione. Possiamo trovare la classe OOP e il metodo a cui il plug-in Wordfence aggiunge l'input pertinente e sovrascriverlo con i codici che scriviamo nel tema figlio o nel plug-in dello snippet di codice.

Rimuoviamo l'input nascosto dal DOM con Javascript

Possiamo utilizzare il seguente approccio per rimuovere l'input nascosto dai codici con Javascript. Prima di spiegare i dettagli dell'approccio, esaminiamo una questione importante. Se in questo approccio viene utilizzato l'evento DOMContentLoaded, i codici potrebbero restituire indefiniti su alcuni siti. L'evento DOMContentLoaded non viene eseguito quando il DOM viene caricato in tutte le circostanze. Per garantire il nostro successo, abbiamo scritto i nostri codici nell'evento window.onload. Ti consigliamo di aggiungere questi codici tra i tag dello script, subito prima del tag body di chiusura nel 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());
});

Allora cosa abbiamo fatto con questi codici? Quando viene caricato il DOM sulla pagina, il plug-in Wordfence Security aggiunge una variabile chiamata oowcRemoveWflsHiddenInput. Se l'elemento non è presente nel DOM (ad esempio se questo codice girava su un'altra pagina dove il form non esiste), non abbiamo verificato l'esistenza dell'elemento target con il blocco if perché forEach non funzionerà comunque. Abbiamo rimosso tutti gli elementi target trovati con il ciclo forEach. Per garantire che i codici siano conformi agli standard ES12, viene utilizzato il metodo spread. NodeList'iLo abbiamo convertito direttamente in un array. In questo modo NodeListAbbiamo utilizzato direttamente forEach, che è un metodo Array.