अन्य हुक को कॉल करने के लिए wp init हुक का उपयोग करें?


11

मैं जानना चाहता हूं कि क्या यह वर्डप्रेस थीम या प्लगइन विकास के अनुसार एक अच्छा अभ्यास है।

add_action('init','all_my_hooks');

function all_my_hooks(){

// some initialization stuff here and then

add_action('admin_init',-----);
add_action('admin_menu',----);

// more like so

}

धन्यवाद

जवाबों:


16

सामान्य तौर पर: हां, अपना कोड शुरू करने के लिए एक समर्पित हुक की प्रतीक्षा करें। वैश्विक नाम स्थान में कभी भी वस्तु का उदाहरण दें। लेकिन initशायद ही जरूरी हो।

आप जितनी देर हो सके उतनी देर हुक करें। यदि आपका पहला कोड चलता है wp_headतो पहले वाले हुक का उपयोग न करें। आप कैस्केड हुक भी कर सकते हैं :

add_action( 'wp_head', 'first_callback' );

function first_callback()
{
    // do something
    // then
    add_action( 'wp_footer', 'second_callback' );
}

initहुक के बारे में : wp_loadedइसके बजाय उपयोग करें । कहा जाता है initऔर उसके बाद चलता है ms_site_check()। इस तरह आप एक बहु-साइट स्थापना में अमान्य उप-साइट पर अपना प्लगइन चलाने से बचते हैं। बाकी हर कोई एक जैसा है।


3
+1 wp_loadedऔर MS जानकारी के लिए।
केसर

आपकी प्रतिक्रिया के लिए बहुत बहुत धन्यवाद, अभी भी एक संदेह है, जो wp_loaded के अंदर अन्य सभी हुक को बेहतर ढंग से लोड करता है या उन्हें अलग से लोड करता है? मुझे आश्चर्य है कि अगर मैं wp_loaded में हुक जोड़ दूं तो उन्हें admin_init या admin_menu के बाद हुक करने के बजाय पहले ही हुक कर दिया जाएगा?
atinder

कैस्केडिंग हुक एक मुद्दा नहीं है?
atinder

नहीं, ऐसा क्यों होना चाहिए? दूसरा हुक तभी बुलाएं जब पहला उपयोगी हो।
FUXIA

3

मैं इन कारणों से इस अभ्यास के बड़े लाभ नहीं देखता :

पंजीकरण करते समय आपके कॉलबैक फ़ंक्शंस को नहीं बुलाया जाता है

add_actionऔर add_filterकार्यों केवल वैश्विक चर के लिए एक प्रविष्टि जोड़ने $wp_filterजो सभी फिल्टर और कार्यों रखती है। स्रोत देखें । यह आपके फ़ंक्शन को कॉल नहीं करता है। आपका कोड चलेंगे केवल जब do_actionऔर apply_filters(उचित हुक नाम के साथ) कहा जाता है, जो होता है बहुत देर से जगह है जहाँ उन हुक होना चाहिए में।

आप कह सकते हैं कि ऐसा करने से वैश्विक वैरिएबल $wp_filterको अधिक => अधिक मेमोरी की आवश्यकता होगी। लेकिन मुझे लगता है कि एक नया फ़ंक्शन बनाने में भी यही समस्या है।

आयोजन कोड

एक फंक्शन में सब कुछ डालने से आपको अपने थीम / प्लगइन की हर फाइल में सभी हुक याद करने के लिए मजबूर होना पड़ता है। आप ऐसा कुछ नहीं करेंगे :

  • में header.php: ऐड हुक और बातों के लिए कॉलबैक कार्य (मेनू की तरह, स्क्रिप्ट दर्ज की) शीर्षक में होती हैं
  • में content.php: सामग्री को छानने के लिए हुक और कॉलबैक फ़ंक्शन जोड़ें
  • admin-menu.php: व्यवस्थापक मेनू जोड़ने के लिए हुक और कॉलबैक फ़ंक्शन जोड़ें

(मान लें कि उन फ़ाइलों को आपके थीम / प्लगइन में डाला गया है)

इसके बजाय, आपको निम्न करना होगा:

  • में केवल कॉलबैक कार्य डाल header.php, content.php,admin-menu.php
  • और एक अलग फ़ाइल में सभी हुक एक और फ़ाइल में डाल दिया

=> इससे आपको यह जानने में कठिनाई होगी कि जब आप header.phpफ़ाइल की सामग्री को देखते हैं तो क्या होता है । आपको पता करना होगा कि ये कॉलबैक कब निकाल दिए गए हैं।

और उस स्थिति के बारे में सोचें जब आपके विषय / प्लगइन में कई कक्षाएं हों। क्या आप सभी वर्गों के सभी हुक एक ही स्थान पर रखते हैं? या क्या प्रत्येक वर्ग में एक आवरण कार्य होता है जो सभी हुक रखता है? यह बहुत बेमानी है!

इन कारणों से ऊपर, मुझे लगता है कि यह व्यक्तिगत शैली है :)। मैं देख रहा हूँ कि कुछ हाइब्रिड जैसे कि आपने क्या कहा। कभी-कभी मुझे उन चौखटों में खोदना कठिन हो जाता है!

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