इस लेख में, हम Netgsm और Wordfence Security प्लगइन विरोध समाधान के बारे में बात करेंगे। यह विरोध तब होता है जब एसएमएस के माध्यम से नेटजीएसएम प्लगइन का फोन नंबर सत्यापन सुविधा Woocommerce पंजीकरण फॉर्म में जोड़ा जाता है और वर्डफेंस सिक्योरिटी प्लगइन उसी समय सक्रिय होता है। तो इस संघर्ष का कारण क्या है? आइए इसे एक साथ जांचें और हल करें।

Wordfence प्लगइन हिडन इनपुट और नेटजीएसएम

Wordfence प्लगइन लॉगिन सुरक्षा अनुभाग में रीकैप्चा सुविधा की कार्यक्षमता के लिए Woocommerce पंजीकरण और लॉगिन फॉर्म में आईडी (आईडी) "wfls-email-verification" के साथ एक छिपा हुआ इनपुट जोड़ता है। जब हम पंजीकरण फॉर्म भरने के बाद एसएमएस प्राप्त करने के लिए "सत्यापन कोड भेजें" बटन पर क्लिक करते हैं, तो हमें नेटजीएसएम प्लग-इन द्वारा ट्रिगर किए गए ब्राउज़र में एक चेतावनी मिलती है। इस चेतावनी में कहा गया है कि ईमेल पता दर्ज नहीं किया गया है, लेकिन हमने ईमेल पता दर्ज कर दिया है. इसका कारण यह है कि जब Wordfence सुरक्षा द्वारा कोई छिपा हुआ इनपुट तत्व जोड़ा जाता है तो नेटजीएसएम प्लगइन ईमेल बॉक्स से डेटा पुनर्प्राप्त नहीं कर सकता है। इसीलिए यह एक चेतावनी देता है कि ईमेल पता दर्ज नहीं किया गया था।

आइए PHP और Wordfence फ़िल्टर का उपयोग करने का प्रयास करें

Wordfence का छिपा हुआ इनपुट तत्व डिफ़ॉल्ट रूप से जोड़ा जाता है, भले ही हम सेटिंग्स में लॉगिन सुरक्षा में रिकैप्चा कुंजी दर्ज न करें। इसे हटाने के लिए पहली बात जो हमारे दिमाग में आती है वह है Wordfence फ़िल्टर का उपयोग करके इस सुविधा को अक्षम करना, है ना? आइए इसे आज़माएं.

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

हालाँकि यह कोड वर्तमान संस्करण में लॉगिन सुरक्षा (ls: लॉगिन सुरक्षा) के लिए कैप्चा आवश्यकता को हटा देता है, लेकिन यह छिपे हुए इनपुट को नहीं हटाता है। इस मामले में, आदर्श समाधान जावास्क्रिप्ट के साथ DOM से इनपुट को हटाना होगा। इस लेख में हम जावास्क्रिप्ट समाधान के बारे में बात करेंगे। बेशक, यह एकमात्र समाधान नहीं है. हम ओओपी क्लास और विधि ढूंढ सकते हैं जिसमें Wordfence प्लगइन प्रासंगिक इनपुट जोड़ता है और इसे चाइल्ड थीम या कोड स्निपेट प्लगइन में लिखे गए कोड के साथ ओवरराइड करता है।

आइए जावास्क्रिप्ट के साथ DOM से छिपे हुए इनपुट को हटाएँ

हम जावास्क्रिप्ट के साथ कोड से छिपे हुए इनपुट को हटाने के लिए निम्नलिखित दृष्टिकोण का उपयोग कर सकते हैं। दृष्टिकोण का विवरण समझाने से पहले, आइए एक महत्वपूर्ण मुद्दे पर गौर करें। यदि इस दृष्टिकोण में DOMContentLoaded ईवेंट का उपयोग किया जाता है, तो कोड कुछ साइटों पर अपरिभाषित वापस आ सकते हैं। सभी परिस्थितियों में DOM लोड होने पर DOMContentLoaded ईवेंट नहीं चलता है। अपनी सफलता सुनिश्चित करने के लिए, हमने window.onload इवेंट में अपने कोड लिखे। हम अनुशंसा करते हैं कि आप इन कोडों को 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 Security प्लगइन oowcRemoveWflsHiddenInput नामक एक वेरिएबल जोड़ता है। यदि तत्व DOM में मौजूद नहीं है (उदाहरण के लिए, यदि यह कोड किसी अन्य पृष्ठ पर चलता है जहां फॉर्म मौजूद नहीं है), तो हमने if ब्लॉक के साथ लक्ष्य तत्व के अस्तित्व की जांच नहीं की क्योंकि forEach वैसे भी काम नहीं करेगा। हमने forEach लूप के साथ पाए गए सभी लक्ष्य तत्वों को हटा दिया। यह सुनिश्चित करने के लिए कि कोड ES12 मानकों का अनुपालन करते हैं, प्रसार विधि का उपयोग किया जाता है। NodeList'iहमने इसे सीधे एक सरणी में बदल दिया। इस तरह NodeListहमने सीधे forEach का उपयोग किया, जो एक ऐरे विधि है।