Neste artigo, falaremos sobre resolução de conflitos de plugins Netgsm e Wordfence Security. Este conflito ocorre quando o recurso de verificação de número de telefone do plugin Netgsm via SMS é adicionado ao formulário de registro do Woocommerce e o plugin Wordfence Security é ativado ao mesmo tempo. Então, qual é a razão deste conflito? Vamos examinar e resolver isso juntos.

Entrada oculta do plug-in Wordfence e Netgsm

O plugin Wordfence adiciona uma entrada oculta com o ID "wfls-email-verification" ao registro Woocommerce e formulário de login para a funcionalidade do recurso recaptcha na seção de segurança de login. Ao clicarmos no botão “enviar código de verificação” para receber o SMS após o preenchimento do formulário de cadastro, nos deparamos com um aviso no navegador acionado pelo plug-in Netgsm. Neste aviso diz que o endereço de e-mail não foi inserido, mas inserimos o endereço de e-mail. A razão para isso é que o plugin Netgsm não pode recuperar dados da caixa de e-mail enquanto houver um elemento de entrada oculto adicionado pelo Wordfence Security. É por isso que retorna um aviso de que o endereço de e-mail não foi inserido.

Vamos tentar usar o filtro Wordfence com PHP

O elemento de entrada oculto do Wordfence é adicionado por padrão, mesmo se não inserirmos a chave recaptcha nas configurações de segurança de login. A primeira coisa que nos vem à mente para remover isso é desabilitar esse recurso usando filtros do Wordfence, certo? Vamos tentar.

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

Embora este código remova o requisito de captcha para segurança de login (ls: segurança de login) na versão atual, ele não remove a entrada oculta. Neste caso, a solução ideal seria remover a entrada do DOM com Javascript. Neste artigo falaremos sobre a solução Javascript. Claro, esta não é a única solução. Podemos encontrar a classe e o método OOP aos quais o plugin Wordfence adiciona a entrada relevante e substituí-la pelos códigos que escrevemos no tema filho ou no plugin de trecho de código.

Vamos remover a entrada oculta do DOM com Javascript

Podemos usar a seguinte abordagem para remover entradas ocultas de códigos com Javascript. Antes de explicar os detalhes da abordagem, vamos abordar uma questão importante. Se o evento DOMContentLoaded for usado nesta abordagem, os códigos poderão retornar indefinidos em alguns sites. O evento DOMContentLoaded não é executado quando o DOM é carregado em todas as circunstâncias. Para garantir nosso sucesso, escrevemos nossos códigos no evento window.onload. Recomendamos que você adicione esses códigos entre as tags de script, logo antes da tag body de fechamento no 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());
});

Então, o que fizemos com esses códigos? Quando o DOM da página é carregado, o plugin Wordfence Security adiciona uma variável chamada oowcRemoveWflsHiddenInput. Se o elemento não estiver presente no DOM (por exemplo, se este código for executado em outra página onde o formulário não existe), não verificamos a existência do elemento alvo com o bloco if porque forEach não funcionará de qualquer maneira. Removemos todos os elementos de destino encontrados com o loop forEach. Para garantir que os códigos estejam em conformidade com os padrões ES12, é utilizado o método spread. NodeList'iNós o convertemos diretamente em um array. Desta forma NodeListUsamos diretamente forEach, que é um método Array.