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.