Add_filter और apply_filters के बीच अंतर


17

मैंने यहाँ add_filter()और apply_filters()यहाँ के बीच के अंतर का एक उपयुक्त स्पष्टीकरण खोजा है, लेकिन एक नहीं मिला।

क्या कोई मुझे बता सकता है कि उपयोग करने से पहले add_filterया apply_filtersएक संदर्भ में क्या जानकारी या तर्क पर विचार करना चाहिए ।

यह एक अनिवार्यता का उपयोग करता है और दूसरे का नहीं?

  • क्या यह सही है कि add_filterकिसी फ़ंक्शन को केवल एक चर पर निष्पादित होने के लिए फ़ंक्शन की कतार में जोड़ा जाता है और apply_filtersकार्यों को क्रम में निष्पादित करता है?

  • क्या यह भी सही है कि apply_filtersजब एक तर्क के साथ बुलाया जाता है (जिस फ़ंक्शन को चलाया जाना है) उस फ़ंक्शन को अन्य सभी (यदि वे मौजूद हैं) से पहले कतार में निष्पादित करेंगे?


2
मौजूदा दस्तावेज़ के बारे में यहाँ और यहाँ क्या यह आपके लिए पर्याप्त रूप से व्याख्या नहीं करता है?
t31os

3
मुझे लगता है कि यह वास्तव में एक अच्छा सवाल है। एक नए वर्डप्रेस देव के रूप में यह एक भ्रामक अवधारणा हो सकती है।
शॉन

जवाबों:


26

निम्नलिखित में से अधिकांश कोडेक्स में पाए जा सकते हैं :


apply_filters

फ़िल्टर हुक से जुड़े कॉलबैक फ़ंक्शन $tagइस फ़ंक्शन को कॉल करके लागू किए जाते हैं। इस फ़ंक्शन का उपयोग केवल $ टैग पैरामीटर का उपयोग करके निर्दिष्ट नए हुक के नाम के साथ इस फ़ंक्शन को कॉल करके एक नया फ़िल्टर हुक बनाने के लिए किया जा सकता है।

$value = apply_filters( $tag, $value, $var_1, $var_2, ... );

संक्षेप में:
आप किसी दिए गए apply_filtersको फ़िल्टर करने के लिए उपयोग करते हैं $value- मूल्य के संबंध में और साथ ही साथ वैकल्पिक रूप $var_1से प्रदान किए गए चर भी $var_n


add_filter

एक विशेष फिल्टर कार्रवाई के लिए एक समारोह हुक।

add_filter( $tag, $function_to_add, $priority, $accepted_args );

संक्षेप में:
आप add_filterएक कस्टम फ़ंक्शन को दिए गए फ़िल्टर एक्शन ( $tag) को हुक करने के लिए उपयोग करते हैं , जो आपने apply_filtersपहले उत्पन्न किया हो सकता है (या यह एक बिल्ट-इन फ़िल्टर एक्शन था या एक प्लगइन / आपके थीम से उपजा था)।


तो, यहाँ एक काल्पनिक उदाहरण है:

function print_initials( $name ) {

    if ( ! is_string( $name ) ) {
        return;
    }

    $fragments = explode( ' ', $name );

    /**
     * Filter wether to print initials in reverse order.
     *
     * @param bool $reverse Print initials in reverse order?
     */
    if ( apply_filters( 'reverse_initials', FALSE ) ) {
        $fragments = array_reverse( $fragments );
    }

    foreach ( $fragments as $f ) {
        echo substr( $f, 0, 1 );
    }
}

print_initials( 'Some Guy' ); // outputs: SG

add_filter( 'reverse_initials', '__return_true' );

print_initials( 'Some Guy' ); // outputs: GS

अब, यदि हम अपने कार्य को यथायोग्य कहते हैं, तो आद्याक्षर बाईं से दाईं ओर मुद्रित होते हैं- क्योंकि इसे हमने डिफ़ॉल्ट व्यवहार के रूप में परिभाषित किया है।

दूसरी बार, हमें शुरुआती क्रम में रिवर्स ऑर्डर मिलता है- क्योंकि फ़िल्टर फ़ंक्शन __return_true, जो हमारे फ़िल्टर एक्शन से जुड़ा होता है, हमेशा वापस लौटता है TRUEऔर इस तरह से इनीशियल्स दाएं से बाएं ओर आउटपुट हो जाता है।


3
यह एक शानदार उत्तर है और दिखाता है कि आप फ़िल्टर को कैसे ओवरराइड कर सकते हैं। धन्यवाद।
शॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.