В тази статия ще говорим за разрешаване на конфликти на приставки за Netgsm и Wordfence Security. Този конфликт възниква, когато функцията за потвърждение на телефонния номер на плъгина Netgsm чрез SMS се добави към формуляра за регистрация на Woocommerce и плъгинът за сигурност на Wordfence е активиран едновременно. И така, каква е причината за този конфликт? Нека да го разгледаме и решим заедно.

Wordfence Plugin Hidden Input и Netgsm

Приставката Wordfence добавя скрит вход с идентификатора „wfls-email-verification“ към формуляра за регистрация и влизане в Woocommerce за функционалността на функцията recaptcha в раздела за защита при влизане. Когато щракнем върху бутона „изпрати код за потвърждение“, за да получим SMS след попълване на регистрационния формуляр, срещаме предупреждение в браузъра, задействано от плъгина Netgsm. В това предупреждение се казва, че имейл адресът не е въведен, но ние сме въвели имейл адреса. Причината за това е, че плъгинът Netgsm не може да извлича данни от имейл кутията, докато има скрит входен елемент, добавен от Wordfence Security. Ето защо връща предупреждение, че имейл адресът не е въведен.

Нека опитаме да използваме Wordfence филтър с PHP

Скритият входен елемент на Wordfence се добавя по подразбиране, дори ако не въведем ключа recaptcha в настройките за сигурност при влизане. Първото нещо, което ни идва на ум, за да премахнем това, е да деактивираме тази функция с помощта на филтри на Wordfence, нали? Нека опитаме.

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

Въпреки че този код премахва изискването за captcha за сигурност при влизане (ls: защита при влизане) в текущата версия, той не премахва скритото въвеждане. В този случай идеалното решение би било да премахнете входа от DOM с Javascript. В тази статия ще говорим за решението на Javascript. Разбира се, това не е единственото решение. Можем да намерим OOP класа и метода, към който плъгинът Wordfence добавя съответния вход и да го заменим с кодовете, които пишем в дъщерната тема или плъгина за кодов фрагмент.

Нека премахнем скрития вход от DOM с Javascript

Можем да използваме следния подход, за да премахнем скрития вход от кодове с Javascript. Преди да обясним подробностите на подхода, нека разгледаме един важен въпрос. Ако събитието DOMContentLoaded се използва при този подход, кодовете може да върнат недефинирани на някои сайтове. Събитието DOMContentLoaded не се изпълнява, когато DOM е зареден при всички обстоятелства. За да гарантираме нашия успех, ние написахме нашите кодове в събитието window.onload. Препоръчваме ви да добавите тези кодове сред таговете на скрипта, точно преди затварящия таг body в 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());
});

И така, какво направихме с тези кодове? Когато DOM на страницата се зареди, плъгинът за сигурност на Wordfence добавя променлива, наречена oowcRemoveWflsHiddenInput. Ако елементът не присъства в DOM (например, ако този код се изпълнява на друга страница, където формулярът не съществува), ние не проверихме съществуването на целевия елемент с блока if, защото forEach така или иначе няма да работи. Премахнахме всички целеви елементи, намерени с цикъла forEach. За да се гарантира, че кодовете отговарят на стандартите ES12, се използва методът на разпространение. NodeList'iПреобразувахме го директно в масив. По този начин NodeListНие директно използвахме forEach, който е метод Array.