कैसे PHP में फिल्टर और हुक वास्तव में काम करते हैं


21

वर्डप्रेस में फिल्टर और हुक वास्तव में कैसे काम करते हैं?

मैं कुछ उन्नत के बारे में पूछ रहा हूँ। इसे PHP में कैसे लागू किया जाता है? जैसे कि यह कैसे अलग-अलग प्लगइन्स से सभी हुक इकट्ठा करता है और उन्हें कोर हुक आदि से "संलग्न" करता है।


2
जहां तक ​​मुझे पता है कि php में कोई 'हुक' या 'फिल्टर' नहीं हैं, तो फंक्शन हैं। Wordpress के विशेष कार्य होते हैं जो उनके निष्पादन से पहले अन्य कार्यों के कॉल-बैक का उपयोग करते हैं।
इरीर बरूच


3
@OfirBaruch, मुझे पूरा यकीन है कि ओपी वर्डप्रेस में उनके कार्यान्वयन का जिक्र कर रहा था, और यह सुझाव नहीं दे रहा था कि कुछ देशी PHP कार्यान्वयन है।
टॉम ऑस्टर

जवाबों:


33

अवलोकन

मूल रूप से " प्लगइन एपीआई ," जो फिल्टर और हुक को सम्मन करता है, में निम्नलिखित कार्य शामिल हैं:

  1. apply_filters()- निष्पादित करें
  2. do_action- निष्पादित करें
  3. apply_filters_ref_array()- निष्पादित करें
  4. do_action_ref_array()- निष्पादित करें
  5. add_filter()- स्टैक में जोड़ें
  6. add_action()- स्टैक में जोड़ें

मूल आंतरिक

कुल मिलाकर इसमें कुछ ग्लोबल्स (वर्डप्रेस वर्ल्ड में और क्या शामिल हैं) शामिल हैं:

global $wp_filter, $wp_actions, $wp_current_filter, $merged_filters;

पहला एक $wp_filterवैश्विक है Arrayजो सभी फ़िल्टर नामों को सबरेज़ के रूप में रखता है। उनमें से प्रत्येक उप-प्रहर तब और भी अधिक उप-धारियाँ रखता है जो एक प्राथमिकता सरणी के तहत बुलाए गए कॉलबैक हैं।

संक्षेप में गहराई से

इसलिए जब एक निष्पादन कार्य कहा जाता है, तो वर्डप्रेस उन नाम के साथ उन ग्लोबल्स सरणियों को खोजता है। फिर संलग्न कॉलबैक को प्राथमिकता के बाद निष्पादित किया जाता है। केवल एक चीज जो सामने होती है वह allफ़िल्टर से जुड़ी कॉलबैक होती है ।

जब आप कॉलबैक का उपयोग करते हैं add_actionया add_filter, तब वर्डप्रेस पहले एक "यूनिक" आईडी की गणना करता है, जो पहले से अटैच कॉलबैक को अधिलेखित नहीं करता है।

$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);

तब यह आपके कॉलबैक को global $wp_filterस्टैक में जोड़ता है :

$wp_filter[ $tag ][ $priority ][ $idx ] = array(
    'function'      => $function_to_add,
    'accepted_args' => $accepted_args
);

जैसा कि आप देख सकते हैं कि मुख्य उप सरणी $tag(या एक्शन / फ़िल्टर नाम) है, तो सब कुछ एक विशिष्ट प्राथमिकता के तहत बुलाया जाता है, और फिर "अद्वितीय" कॉलबैक / आईडी स्ट्रिंग को कुंजी के रूप में उपयोग किया जाता है।

बाद में, जब एक फिल्टर को कॉल किया जाता है - $tag/ कार्रवाई / / फिल्टर-नाम के साथ हो रहा है - सरणी की खोज की जाती है और कॉलबैक को कॉल किया जाता है। जैसा कि यह उपयोग कर call_user_func_arrayरहा है यह वास्तव में मायने नहीं रखता है कि कितने तर्क संलग्न हैं। वर्डप्रेस खुद से हल करता है।

foreach ( (array) current( $wp_filter[ $tag ] ) as $the_ )
{
    call_user_func_array(
        $the_['function'], 
        array_slice(
            $args, 
            0, 
            (int) $the_['accepted_args']
        )
    );
}

3
यह मत भूलो कि जैसा कि कॉलबैक से गुजर रहा है, यह अपनी "प्राथमिकता" का उपयोग करके एक ही हुक पर कई कॉलबैक को निष्पादित करने का आदेश देता है, जो कि add_action () और apply_filters () और चूक के साथ 10 पर सेट है
टॉम बरमा

1
@TomAuger कृपया उत्तर में कोई भी अतिरिक्त नोट्स और संपादन जोड़ने के लिए स्वतंत्र महसूस करें।
कैसर

5

वर्डप्रेस कोर फ़ाइलों और कुछ मूल थीम फ़ाइलों में हुक शामिल हैं। वे आपको फ़ाइल में एक विशिष्ट स्थान में सामग्री को हुक करने में सक्षम करते हैं।

एक उदाहरण वर्डप्रेस में wp_head हुक है। आप उस स्थान में सामग्री जोड़ने के लिए अपने बच्चे के विषय में इस हुक का उपयोग कर सकते हैं '

उदाहरण:

add_action('wp_head', 'add_content_to_head');
function add_content_to_head() {
echo 'Your Content';
}

कुछ प्रीमियम थीम में एक्शन हुक भी शामिल होते हैं जिनका उपयोग आप चाइल्ड थीम में भी कर सकते हैं। यहां एक दृश्य मानचित्र है जिसमें सभी एक्शन हुक शामिल हैं और वह स्थिति जो वे आपकी सामग्री को जेनेसिस थीम फ्रेमवर्क में आउटपुट करते हैं।

उदाहरण:

add_action('genesis_header', 'add_content_to_header');
function add_content_to_header() {
echo 'Your Content';
}

यहाँ क्या दिखता है अगर आपने Genesis विषय ढांचे में हैडर.php फ़ाइल खोली है:

do_action( 'genesis_header' );

यहां वर्डप्रेस हुक की एक सूची दी गई है जिसका आप कई तरह से उपयोग कर सकते हैं।

फ़िल्टर आपको किसी मौजूदा फ़ंक्शन के आउटपुट को संशोधित करने में सक्षम करते हैं और इसमें वर्डप्रेस कोर फ़ाइलों और उत्पत्ति जैसे कुछ मूल थीम फ्रेमवर्क दोनों शामिल हैं।

यहां उन फ़िल्टर की सूची दी गई है जिनका उपयोग आप जेनेसिस डिज़ाइन फ्रेमवर्क के साथ कर सकते हैं

यहां वर्डप्रेस में शामिल फिल्टर की सूची दी गई है

यहां इस बात का उदाहरण दिया गया है कि आप उत्पत्ति जैसे थीम फ्रेमवर्क में फ़िल्टर का उपयोग कैसे कर सकते हैं:

add_filter( 'comment_author_says_text', 'custom_comment_author_says_text' );
function custom_comment_author_says_text() {
return 'author says';
}

उपरोक्त कोड का उपयोग एक बाल विषय में किया जा सकता है ताकि लेखक आपकी टिप्पणियों में पाठ को संशोधित कर सके। यह किसी भी विषय में काम करता है।

यहाँ एक और उदाहरण दिया गया है जो अंशों की लंबाई को 50 शब्दों में अनुकूलित करता है:

add_filter( 'excerpt_length', 'change_excerpt_length' );
function change_excerpt_length($length) {
return 50; 
}

आपको wp में / post-template.php फ़ाइल में the_excerpt () फ़ंक्शन मिलेगा

यहाँ यह कैसा दिखता है:

  function the_excerpt() {
        echo apply_filters('the_excerpt', get_the_excerpt());
}

आप प्लगइन्स में हुक और फिल्टर का भी उपयोग कर सकते हैं ठीक उसी तरह से और जब आप मूल विषय या वर्डप्रेस को अपडेट करते हैं तो कोड खो नहीं जाएगा।

मूल रूप से, हुक और फ़िल्टर आपको कोर वर्डप्रेस फ़ाइलों या अपने मूल विषय फ़ाइलों को संपादित किए बिना वर्डप्रेस और अपने मूल विषय दोनों को अनुकूलित और संशोधित करने में सक्षम बनाते हैं।

पेरेंट थीम फ्रेमवर्क में हुक और फिल्टर्स शामिल होने पर चाइल्ड थीम को कस्टमाइज करना काफी आसान हो जाता है क्योंकि आपको कभी भी पेरेंट थीम टेम्पलेट फाइल को एडिट करने की आवश्यकता नहीं होती है। इस तरह आप सुरक्षित रूप से थीम भी बदल सकते हैं।


2
यह हुक और फिल्टर का एक बड़ा सामान्य अवलोकन है, लेकिन मुझे डर है कि ओपी के सवाल को पूरी तरह से याद किया जाएगा, जो कि हुक कैसे काम करते हैं और वर्डप्रेस कैसे बनाते हैं, स्टोर करता है और उन्हें प्रोसेस करता है। बहुत बढ़िया जवाब; आपको संभवतः WP साइट्स पर अपने ट्यूटोरियल से लिंक करना चाहिए।
टॉम ऑगस्टर

ठीक है मैं इसे हटा दूंगा। मेरा बुरा जैसा कि मुझे प्रश्न को बेहतर ढंग से पढ़ना चाहिए था, लेकिन सोचा कि पहले से दिए गए उत्तर शुरुआती लोगों के लिए यह समझना आसान होगा कि क्या वे पहले मूल को जानते थे।
ब्रैड डाल्टन

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