Bu yazıda Netgsm və Wordfence Security plaginləri ilə münaqişələrin həlli haqqında danışacağıq. Bu ziddiyyət Netgsm plagininin SMS vasitəsilə telefon nömrəsinin yoxlanılması funksiyası Woocommerce qeydiyyat formasına əlavə edildikdə və eyni zamanda Wordfence Security plagini aktivləşdirildikdə baş verir. Bəs bu münaqişənin səbəbi nədir? Gəlin birlikdə araşdıraq və həll edək.

Wordfence Plugin Gizli Giriş və Netgsm

Wordfence plaqini giriş təhlükəsizliyi bölməsində recaptcha funksiyasının funksionallığı üçün Woocommerce qeydiyyatı və giriş formasına "wfls-email-verification" ID ilə gizli giriş əlavə edir. Qeydiyyat formasını doldurduqdan sonra SMS almaq üçün "təsdiq kodunu göndər" düyməsini kliklədikdə, brauzerdə Netgsm plagini tərəfindən işə salınan xəbərdarlıqla qarşılaşırıq. Bu xəbərdarlıqda e-poçt ünvanının daxil edilmədiyi deyilir, amma e-poçt ünvanını daxil etdik. Bunun səbəbi, Wordfence Security tərəfindən əlavə edilmiş gizli giriş elementi olduğu halda Netgsm plagininin e-poçt qutusundan məlumatları əldə edə bilməməsidir. Buna görə e-poçt ünvanının daxil edilmədiyi barədə xəbərdarlıq qaytarır.

Gəlin PHP ilə Wordfence Filtrindən istifadə etməyə çalışaq

Login təhlükəsizlik parametrlərində recaptcha düyməsini daxil etməsək belə, Wordfence-in gizli giriş elementi standart olaraq əlavə edilir. Bunu aradan qaldırmaq üçün ağlımıza gələn ilk şey Wordfence filtrlərindən istifadə edərək bu xüsusiyyəti söndürməkdir, elə deyilmi? Gəlin cəhd edək.

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

Bu kod cari versiyada giriş təhlükəsizliyi üçün captcha tələbini (ls: login security) aradan qaldırsa da, gizli girişi silmir. Bu halda, ideal həll Javascript ilə DOM-dan girişi silmək olardı. Bu yazıda Javascript həlli haqqında danışacağıq. Təbii ki, bu yeganə həll yolu deyil. Wordfence plagininin müvafiq girişi əlavə etdiyi OOP sinifini və metodunu tapa bilərik və uşaq mövzusunda və ya kod parçacığı plaginində yazdığımız kodlarla onu ləğv edə bilərik.

Gəlin Javascript ilə DOM-dan Gizli Girişi Silək

Javascript ilə kodlardan gizli girişi silmək üçün aşağıdakı yanaşmadan istifadə edə bilərik. Yanaşma təfərrüatlarını izah etməzdən əvvəl vacib bir məsələyə keçək. Bu yanaşmada DOMContentLoaded hadisəsi istifadə edilərsə, bəzi saytlarda kodlar qeyri-müəyyənləşə bilər. DOMContentLoaded hadisəsi bütün hallarda DOM yükləndikdə işləmir. Uğurumuzu təmin etmək üçün kodlarımızı window.onload hadisəsinə yazdıq. Bu kodları skript teqləri arasında, DOM-da bağlanan əsas etiketdən əvvəl əlavə etməyi tövsiyə edirik.

// 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());
});

Bəs biz bu kodlarla nə etdik? Səhifədəki DOM yükləndikdə, Wordfence Təhlükəsizlik plagini oowcRemoveWflsHiddenInput adlı dəyişən əlavə edir. Element DOM-da yoxdursa (məsələn, bu kod formanın olmadığı başqa səhifədə işlədilibsə), biz if bloku ilə hədəf elementin mövcudluğunu yoxlamamışıq, çünki forEach onsuz da işləməyəcək. ForEach döngəsi ilə tapılan bütün hədəf elementləri sildik. Kodların ES12 standartlarına uyğun olmasını təmin etmək üçün yayılma üsulundan istifadə edilir. NodeList'iBiz onu birbaşa seriala çevirdik. Bu şəkildə NodeListBiz birbaşa forEach metodundan istifadə etdik ki, bu da Array metodudur.