परेशानी की समझ apply_filters ()


19

Apply_filters () में

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

मैं मुसीबत के आसपास मेरे सिर लपेटकर आ रही हैं $valueऔर $var। मैं कोडेक्स पढ़ता हूं और लगता है कि $valueइसे संशोधित किया जा सकता है, $varनहीं, लेकिन मुझे जंगली में इसका कोई उदाहरण नहीं मिला है। यह एक चर को पारित करने के तरीके के रूप में उपयोग किया जा रहा है। किस मामले में, उसमें और क्या अंतर है $var?

जवाबों:


35

फ़ंक्शन को बेहतर नामों से देखने का प्रयास करें:

apply_filters(
    $filter_name,     // used for add_filter( $filter_name, 'callback' );
    $value_to_change, // the only variable whose value you can change
    $context_1,       // context
    $context_2        // more context
);

तो जब उस फ़ंक्शन को इस रूप में कहा जाता है:

// wp-login.php line 94
apply_filters( 'login_body_class', $classes, $action );

आप उपयोग कर सकते हैं …

add_filter( 'login_body_class', 'function_to_change_login_body_class', 10, 2 );

... और दो चर उस समारोह में पारित कर दिया। आप पहला लौटाते हैं, दूसरा केवल अधिक संदर्भ प्रदान करता है:

function function_to_change_login_body_class( $classes, $action )
{
    if ( 'login' === $action )
        $classes[] = 'foo';

    if ( 'postpass' === $action )
        $classes[] = 'bar';

    return $classes;
}

अतिरिक्त चर आपके निर्णय को आसान बनाने के लिए हैं, न कि उन्हें बदलने के लिए।


अगर मे ठीक समझता हूँ। मैं लागू चर से लौटाया गया मान एकत्र करने के लिए वैरिएबल नहीं जोड़ता क्योंकि यह स्वचालित रूप से $ value_to_change पर लागू होता है?
r00tAcc3ss

@ r00tAcc3ss कुछ भी अपने आप नहीं होता है। आपको अपने कॉलबैक में मूल्य बदलना होगा। आप चाहें तो इसे अपरिवर्तित भी लौटा सकते हैं - यदि आप संदर्भ के आधार पर चाहते हैं।
FUXIA

अरे हां। मेरा मतलब है, मुझे दिए गए मान को दूसरे चर में स्वीकार नहीं करना है और इसे $ मूल्य पर असाइन करना है। यह किया जाता है, अगर मैं हुक किए गए फ़ंक्शन में $ मूल्य बदलता हूं और "स्वचालित रूप से" वापस लौटता हूं।
r00tAcc3ss

11

फिल्टर क्या हैं?

फ़िल्टर ऐसे फ़ंक्शंस हैं, जो डेटा के साथ कुछ कार्रवाई करने से पहले, वर्डप्रेस डेटा से गुजरता है, (जैसे कि इसे डेटाबेस में जोड़ना या ब्राउज़र स्क्रीन पर भेजना)। फिल्टर डेटाबेस और ब्राउज़र के बीच बैठते हैं (जब वर्डप्रेस पेज उत्पन्न कर रहा है), और ब्राउज़र और डेटाबेस के बीच (जब वर्डप्रेस डेटाबेस में नई पोस्ट और टिप्पणियां जोड़ रहा है); वर्डप्रेस में अधिकांश इनपुट और आउटपुट कम से कम एक फिल्टर से होकर गुजरता है। वर्डप्रेस डिफ़ॉल्ट रूप से कुछ फ़िल्टरिंग करता है, और आपका प्लगइन अपना फ़िल्टरिंग जोड़ सकता है।

एक फिल्टर में हुकिंग

उपयोगकर्ताओं को कुछ विशिष्ट डेटा (एक मान, एक फ़ंक्शन आदि का आउटपुट) बदलने के लिए फ़ंक्शंस हुक apply_filtersफ़ंक्शंस के माध्यम से प्रदान किए जाते हैं ।
इन फ़िल्टर हुक में फ़िल्टर का नाम (या टैग ) और कम से कम फ़ंक्शन का नाम शामिल होता है जिसका उपयोग डेटा को फ़िल्टर करने के लिए किया जाता है (यानी, किसी तरह से बदलकर)।

पोस्ट का शीर्षक बदलने के लिए, आप the_titleफ़िल्टर हुक का उपयोग कर सकते हैं , जिसे निम्नानुसार परिभाषित किया गया है:

apply_filters( 'the_title', $title, $id );

इसका अर्थ है, फ़िल्टर में टैग / नाम है the_title, पहला पैरामीटर $titleवह डेटा है जिसे बदलना है (यानी, पोस्ट शीर्षक) और दूसरा पैरामीटर $idअतिरिक्त जानकारी है (इस मामले में पोस्ट आईडी)।

उदाहरण के लिए, UPPERCASE में प्रत्येक पोस्ट का शीर्षक प्रदर्शित करने के लिए, आप निम्न पंक्ति का उपयोग कर सकते हैं:

add_filter('the_title', 'strtoupper');

यदि हम add_filterफ़ंक्शन पर एक नज़र डालते हैं , तो हम देखते हैं कि इसे निम्नानुसार परिभाषित किया गया है:

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

हमने केवल पहले और दूसरे (आवश्यक) पैरामीटर को निर्दिष्ट किया, जबकि तीसरा और चौथा पैरामिटर अपने संबंधित डिफ़ॉल्ट मान (यानी, 10और 1) पर सेट है।

एक और अधिक जटिल फ़िल्टर

यदि आप केवल एक निश्चित पोस्ट को फ़िल्टर करना चाहते हैं , तो आप अतिरिक्त जानकारी (इस फ़िल्टर के मामले में: ID) का उपयोग कर सकते हैं। ऐसा करने के लिए, आपको मापदंडों की संख्या (जो इस मामले में 2 है) को निर्दिष्ट करना होगा, और ऐसा करने के लिए, आपको प्राथमिकता पैरामीटर (जो तर्कों की संख्या से पहले आता है) को निर्दिष्ट करना होगा।

मान लीजिए कि हम केवल आईडी 42 के साथ पद के शीर्षक को प्रभावित करना चाहते हैं, तो यह इस तरह दिखता है:

add_filter('the_title', 'my_strtoupper', 10, 2);
function my_strtoupper($title, $id) {
    if (42 === $id) return strtoupper($title);
    return $title;
} // function my_strtoupper

इस मामले में, हमें सभी चार उपलब्ध मापदंडों को निर्दिष्ट करना होगा।

मेरे पास क्या पैरामीटर हैं?

एक निश्चित फिल्टर के उपलब्ध मापदंडों की संख्या (संख्या) की पहचान करने के लिए, आपको यह देखना होगा कि इसे कहां परिभाषित किया गया है (इस मामले में: यहां )।


संदर्भ :


2
एक पूरी तरह से प्रतिक्रिया और त्रुटिहीन वर्ग (अच्छा स्वरूपण ब्रोचो) के लिए +1!
बोसको

धन्यवाद, यह बहुत गहन है, लेकिन वास्तव में यह नहीं समझाता कि मैं क्या पूछ रहा था। जैसे। फ़िल्टर में $ मूल्य चर और $ var चर के बीच का अंतर।
r00tAcc3ss

हम्म, मैं कहूंगा, यह करता है, लेकिन यह निश्चित रूप से, मेरे व्यक्तिपरक भावना है। मैं फ़िल्टर और इसके मापदंडों पर कुछ जानकारी जोड़ूंगा, हालांकि।
tfrommen
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.