Apply_filters फ़ंक्शन और इसके चर के लिए स्पष्टीकरण


16

मैं सीख रहा हूं कि "सिंपल फॉर्म रजिस्ट्रेशन" प्लगइन से उदाहरण लेकर PHP का उपयोग करके html फॉर्म कैसे बनाएं।

मैं इस कोड को देख रहा हूं:

$form .= apply_filters('simplr-reg-instructions', __('Please fill out this form to sign up for this site', 'simplr-reg'));

क्या आप कृपया बता सकते हैं कि यहाँ क्या खुशी है - क्या कार्य करता है, 'सिम्पल-रेग-निर्देश' और 'सिम्पल-रेग' की आवश्यकता क्यों है?

यह लाइन बस क्यों नहीं हो सकती:

$form .= 'Please fill out this form to sign up for this site' ;

मैंने फंक्शन रेफरेंस पढ़ा है, लेकिन फिर भी इसका पता नहीं लगा सकता।

जवाबों:


22

वह लाइन दो अलग-अलग फ़ंक्शन का उपयोग कर रही है, जिन्हें दो अलग-अलग स्पष्टीकरण की आवश्यकता है।

__ ()

यह एक अनुवाद कार्य है। यदि सेटिंग्स सही तरीके से की जाती हैं, तो यह पहले-अनुवादित स्ट्रिंग्स की सूची से पहले पैरामीटर का अनुवाद करेगा। यदि किसी इंस्टॉलेशन में इस फ़ंक्शन के उपयोग के लिए संकलित अनुवाद के साथ एक फ़ाइल है, तो यह इसका उपयोग करेगा। बेशक, प्लगइन को अपने स्वयं के अनुवाद को पैकेज करना होगा, इसलिए दूसरा पैरामीटर। simplr-regबताता है __()कि स्ट्रिंग 'Please fill out this form to sign up for this site'का अनुवाद संबंधित फ़ाइल में होना चाहिए 'simplr-reg'(यह load_plugin_textdomain()फ़ंक्शन के माध्यम से प्लगइन में पहले किया गया है)।

फ़ंक्शन तब अनुवाद लौटाता है। यदि लौटने के लिए कोई अनुवाद नहीं है (उदाहरण के लिए वर्तमान भाषा में संकलित अनुवाद नहीं है, तो स्ट्रिंग में उस पैकेज, आदि के लिए संकलित अनुवाद नहीं है), मूल इनपुट वापस आ गया है।

तो अंग्रेजी में एक वर्डप्रेस साइट के लिए, __( 'This', 'simplr-reg' )कार्यात्मक रूप से समान है 'This'। L10n (स्थानीयकरण) के बारे में अधिक जानने के लिए, कोडेक्स में इस पर पढ़ें:

http://codex.wordpress.org/I18n_for_WordPress_Developers

apply_filters ()

यह फ़ंक्शन आपको प्लगइन द्वारा उपयोग किए गए मानों को आवश्यकतानुसार फ़िल्टर करने की अनुमति देता है। यह प्लगइन डेवलपर के रूप में समझ लेने के लिए मुख्य अवधारणाओं में से एक है। वर्डप्रेस को हुक के माध्यम से विस्तारित किया जाता है, जो मूल रूप से एक्सेस पॉइंट हैं जो आपको अपने प्लगइन के कार्यों के निष्पादन और / या वर्डप्रेस का उपयोग करने वाली जानकारी / डेटा में हेरफेर करने की अनुमति देता है, आदि।

आपके द्वारा पूछे गए कोड के स्निपेट जैसे डेटा में हेरफेर करने के लिए, आप फ़ंक्शन का उपयोग करेंगे add_filter()। यहां बताया गया है कि यह कैसे काम करता है:

add_filter( 'simplr-reg-instructions', 'wpse16573_my_filter' );

आप शायद वहां पहले तर्क को पहचान लेंगे। यह वही है जिसका उपयोग add_filterऊपर में किया गया है। यह हुक नाम है। दूसरा तर्क फ़िल्टर कॉलबैक है। यह एक फ़ंक्शन के लिए एक वैध कॉलबैक होना चाहिए ( कॉलबैक के बारे में और पढ़ें )। कोड की वह पंक्ति कहती है, "जब 'simplr-reg-instructions'हुक निष्पादित होता है, तो मेरे द्वारा दिए गए कॉलबैक के साथ फ़ंक्शन को चलाएं।" apply_filters()हुक अपने पहले तर्क में पाया जाता है, अनिवार्य रूप से अर्थ "इस हुक के लिए पंजीकृत सभी कार्यों को निष्पादित करें।" apply_filtersफिर 'Please fill out this form to sign up for this site'उस फ़िल्टर पर फ़ंक्शंस में अन्य सभी तर्क (इस मामले में ) पास होते हैं। तो, ऊपर मैंने जिस कॉलबैक का उपयोग किया है, वह इस तरह दिखना चाहिए:

function wpse16573_my_filter( $text ){
  $text = "<strong>$text</strong>";
  return $text;
}

वर्डप्रेस में दो प्रकार के हुक होते हैं: फिल्टर (जिस तरह से हम यहां उपयोग कर रहे हैं) और क्रियाएं। दोनों के बीच मुख्य अंतर यह है कि फ़िल्टर आपको कुछ वापस करने की उम्मीद करते हैं और कार्रवाई नहीं करते हैं। तो, इस फ़िल्टर के लिए, ऊपर दिया गया मेरा उदाहरण कुछ html को चारों ओर जोड़ता है 'Please fill out this form to sign up for this site'और उसे वापस लौटाता है।

क्रियाओं और हुक के बारे में यहाँ पढ़ें:

http://codex.wordpress.org/Plugin_API


जॉन, बहुत बहुत धन्यवाद। बहुत बढ़िया जवाब! लेकिन मुझे प्लगइन फ़ाइलों में एक भी "add_filter ('सिम्पल-रेग-निर्देश', ...) लाइन नहीं मिल रही है। कैसे apply_filter से चला सकते हैं?
राख

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

+1 उत्कृष्ट स्पष्टीकरण - डॉक्स की तरह पढ़ना चाहिए ;-)
एडी बी

+1 महान जवाब, वास्तव में मैं जो देख रहा था, मैं बहुत भ्रमित हो रहा था, लेकिन अब सब कुछ इतना स्पष्ट है;)
दर्ज़नों

5

आपके यहां दो अलग-अलग कार्य हैं apply_filtersऔर__()

apply_filters फ़ंक्शन आपको अपने कॉलबैक फ़ंक्शन और फ़ंक्शन का उपयोग करके चर के मूल्य को बदलने / संपादित करने का वर्डप्रेस तरीका है add_filter। यह कई तर्क स्वीकार करता है लेकिन महत्वपूर्ण पहले दो हैं:

$something = apply_filters( $tag, $value, $var ... );

$ टैग फ़िल्टर हुक का नाम है जिसका उपयोग add_filterउदाहरण के लिए किया जाता है :

add_filter($tag,callback_function);

$ मूल्य वास्तविक मूल्य है जिसे आप बदलने या संपादित करने में सक्षम होंगे।

$ var चर है जो आपके कॉलबैक फ़ंक्शन का उपयोग कर सकता है, एक या अधिक।

__() फ़ंक्शन का उपयोग अनुवाद के लिए किया जाता है:

__($message,$text_domain);

$ संदेश अनुवाद करने के लिए वास्तविक संदेश है।

$ text_domain वह पाठ डोमेन टैग है जिसका उपयोग प्लगइन या थीम अनुवाद को लोड करने के लिए किया जाता है load_plugin_textdomain()

यह क्या करता है?

यह $ संदेश के अनुवाद के लिए स्थानीयकरण मॉड्यूल को खोजता है, और अनुवाद को PHP रिटर्न स्टेटमेंट में भेजता है। यदि $ संदेश के लिए कोई अनुवाद नहीं मिला है, तो यह केवल $ संदेश लौटाता है।

तो अब आपके सामने दो कार्य समान तरीके से काम करते हैं, apply_filters simplr-reg-instructionsफ़िल्टर कॉल से जुड़े किसी भी कॉलबैक फ़ंक्शन को फ़िल्टर मान का अनुवाद करेगा (यदि मौजूद है) तो पाठ का उपयोग करके 'इस साइट के लिए साइन अप करने के लिए इस फ़ॉर्म को भरें' का डोमेनsimplr-reg


Bainternet, बहुत बहुत धन्यवाद! यह कैसे है कि मुझे प्लगइन फ़ाइलों में कोई भी "add_filter ('सिम्पल-रेग-निर्देश'," लाइनें नहीं मिल सकती है?
राख

इसका हुक उन डेवलपर्स के लिए बचा है जो प्लगइन्स कार्यक्षमता को विस्तारित या फ़िल्टर करना चाहते हैं।
बेनटर्नट B

तो add_filter यहाँ अपेक्षित नहीं है? मुझे समझ नहीं आता क्यों। Add_filter फ़ंक्शंस द्वारा अपने हुक से जुड़े सभी कार्यों को apply_filters नहीं चलाना चाहिए?
ऐश

apply_filtersएक ऐसा स्थान धारक है जो आपको अपने स्वयं के कार्यों का उपयोग करने की अनुमति देता है add_filter, इसलिए कोई add_filter अपेक्षित नहीं है जब तक कि आप अपना स्वयं का जोड़ न दें
Bainternet
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.