En este artículo, hablaremos sobre la resolución de conflictos de los complementos Netgsm y Wordfence Security. Este conflicto ocurre cuando la función de verificación del número de teléfono del complemento Netgsm mediante SMS se agrega al formulario de registro de Woocommerce y el complemento Wordfence Security se activa al mismo tiempo. ¿Cuál es entonces el motivo de este conflicto? Examinémoslo y resolvámoslo juntos.

Entrada oculta del complemento Wordfence y Netgsm

El complemento Wordfence agrega una entrada oculta con el ID "wfls-email-verification" al formulario de registro e inicio de sesión de Woocommerce para la funcionalidad de la función recaptcha en la sección de seguridad de inicio de sesión. Cuando hacemos clic en el botón "enviar código de verificación" para recibir el SMS después de completar el formulario de registro, nos encontramos con una advertencia en el navegador activada por el complemento Netgsm. En este aviso dice que no se ha introducido la dirección de correo electrónico, pero sí hemos introducido la dirección de correo electrónico. La razón de esto es que el complemento Netgsm no puede recuperar datos del buzón de correo electrónico mientras haya un elemento de entrada oculto agregado por Wordfence Security. Es por eso que devuelve una advertencia de que no se ingresó la dirección de correo electrónico.

Intentemos usar el filtro Wordfence con PHP

El elemento de entrada oculto de Wordfence se agrega de forma predeterminada, incluso si no ingresamos la clave recaptcha en la configuración de seguridad de inicio de sesión. Lo primero que se nos viene a la mente para eliminar esto es deshabilitar esta función usando los filtros de Wordfence, ¿verdad? Probémoslo.

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

Aunque este código elimina el requisito de captcha para la seguridad de inicio de sesión (ls: seguridad de inicio de sesión) en la versión actual, no elimina la entrada oculta. En este caso, la solución ideal sería eliminar la entrada del DOM con Javascript. En este artículo, hablaremos sobre la solución Javascript. Por supuesto, ésta no es la única solución. Podemos encontrar la clase y el método de programación orientada a objetos a los que el complemento de Wordfence agrega la entrada relevante y anularlos con los códigos que escribimos en el tema secundario o en el complemento de fragmento de código.

Eliminemos la entrada oculta del DOM con Javascript

Podemos utilizar el siguiente enfoque para eliminar entradas ocultas de códigos con Javascript. Antes de explicar los detalles del enfoque, repasemos una cuestión importante. Si se utiliza el evento DOMContentLoaded en este enfoque, los códigos pueden devolver un valor indefinido en algunos sitios. El evento DOMContentLoaded no se ejecuta cuando se carga el DOM en todas las circunstancias. Para garantizar nuestro éxito, escribimos nuestros códigos en el evento window.onload. Le recomendamos que agregue estos códigos entre las etiquetas del script, justo antes de la etiqueta del cuerpo de cierre en el 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());
});

Entonces, ¿qué hicimos con estos códigos? Cuando se carga el DOM en la página, el complemento de seguridad de Wordfence agrega una variable llamada oowcRemoveWflsHiddenInput. Si el elemento no está presente en el DOM (por ejemplo, si este código se ejecutó en otra página donde el formulario no existe), no verificamos la existencia del elemento de destino con el bloque if porque forEach no funcionará de todos modos. Eliminamos todos los elementos de destino encontrados con el bucle forEach. Para garantizar que los códigos cumplan con los estándares ES12, se utiliza el método de difusión. NodeList'iLo convertimos directamente a una matriz. De esta manera NodeListUsamos directamente forEach, que es un método de matriz.