add_filter()
और add_action()
किसी भी प्लगइन को लोड करने से पहले उपलब्ध हैं। तो आप अपने प्लगइन या विषय की पहली पंक्ति में दोनों का उपयोग कर सकते हैं।
पठनीयता के लिए मैं आपकी मुख्य फ़ाइल के शीर्ष पर समूह कार्रवाई और फ़िल्टर पंजीकरण की सिफारिश करता हूं:
- एक प्लगइन में, प्लगइन हेडर के साथ फाइल
- एक विषय में
functions.php
उस नियम के कुछ अपवाद हैं:
- जंजीर की पुकार । में इस उदाहरण मैं के लिए एक कार्य रजिस्टर
shutdown
तभी होता है जब के लिए पहला फिल्टर wp_nav_menu_objects
बुलाया गया है। इसलिए दूसरा कॉलबैक पहले वाले के समान पंजीकृत नहीं किया जा सकता है।
OOP शैली। कभी-कभी आपको कॉलबैक रजिस्टर करने से पहले कक्षा सदस्यों को सेट करना होगा। इसी तरह के एक उदाहरण का उपयोग कर ...
add_action(
'plugins_loaded',
array ( T5_Plugin_Class_Demo::get_instance(), 'plugin_setup' )
);
class T5_Plugin_Class_Demo
{
public function plugin_setup()
{
$this->plugin_url = plugins_url( '/', __FILE__ );
$this->plugin_path = plugin_dir_path( __FILE__ );
$this->load_language( 'plugin_unique_name' );
// more stuff: register actions and filters
}
}
… हम देखते हैं कि कक्षा की तात्कालिकता को अन्य प्लगइन द्वारा रोका जा सकता है, और एक बच्चा वर्ग अधिक या विभिन्न फिल्टर और कार्यों को पंजीकृत कर सकता है।
समूहीकरण के अलावा आप एक कदम आगे जा सकते हैं और अन्य डेवलपर्स के लिए अनुकूलन को आसान बनाने के लिए एक कस्टम कार्रवाई की पेशकश कर सकते हैं।
यहाँ एक विषय पर एक उदाहरण दिया गया है जिस पर मैं काम कर रहा हूँ:
add_action( 'activate_header', 't5_activate_screen' );
// wp_loaded is too late, WP customizer would not detect the features then.
add_action( 'after_setup_theme', 't5_setup_custom_background' );
add_action( 'after_setup_theme', 't5_setup_custom_header' );
add_filter( 'body_class', 't5_enhance_body_class' );
add_action( 'comment_form_before', 't5_enqueue_comment_reply' );
add_action( 'content_before', 't5_frontpage_widget' );
add_action( 'footer_before', 't5_loop_navigation' );
add_action( 'get_the_excerpt', 't5_excerpt_clean_up', 1 );
add_action( 'header_before', 't5_skiplink', 0, 0 );
add_filter( 'the_title', 't5_fill_empty_title', 20, 1 );
add_action( 'wp_enqueue_scripts', 't5_enqueue_style' );
add_action( 'wp_enqueue_scripts', 't5_enqueue_script' );
add_action( 'wp_loaded', 't5_setup' );
add_action( 'wp_loaded', 't5_page_enhancements' );
add_action( 'wp_loaded', 't5_post_format_support' );
add_action( 'wp_loaded', 't5_load_theme_language' );
add_action( 'wp_loaded', 't5_setup_sidebars' );
add_filter( 'wp_nav_menu_items', 't5_customize_top_menu', 10, 2 );
add_filter( 'wp_nav_menu_args', 't5_nav_menu_args', 10, 1 );
add_filter( 'wp_title', 't5_wp_title_filter', 20, 2 );
add_shortcode( 'gallery', 't5_shortcode_gallery' );
add_shortcode( 'wp_caption', 't5_shortcode_img_caption' );
add_shortcode( 'caption', 't5_shortcode_img_caption' );
// Use this action to unregister theme actions and filters.
do_action( 't5_theme_hooks_registered' );
अंतिम पंक्ति महत्वपूर्ण है: एक बच्चा विषय या एक प्लगइन t5_theme_hooks_registered
अब कार्रवाई में हुक कर सकता है और किसी भी पिछले हुक को अपंजीकृत कर सकता है। यह प्राथमिकताओं के साथ संघर्ष करने से बचाएगा , और मैं किसी भी समय अपनी कॉलबैक प्राथमिकताओं को बदलने के लिए स्वतंत्र हूं ।
लेकिन अकेले सोर्स कोड ऑर्डर पर निर्भर न रहें। अपने डॉक्स ब्लॉक में आपके द्वारा उपयोग किए जा रहे हुक का दस्तावेज़। मैं उसके wp-hook
लिए एक कस्टम टैग का उपयोग कर रहा हूं । यहाँ एक ही विषय से जंजीर हुक के साथ एक उदाहरण है:
/**
* Register handler for auto-generated excerpt.
*
* @wp-hook get_the_excerpt
* @param string $excerpt
* @return string
*/
function t5_excerpt_clean_up( $excerpt )
{
if ( ! empty ( $excerpt ) )
return $excerpt;
add_filter( 'the_content', 't5_excerpt_content' );
return $excerpt;
}
/**
* Strip parts from auto-generated excerpt.
*
* @wp-hook the_content
* @param string $content
* @return string
*/
function t5_excerpt_content( $content )
{
remove_filter( current_filter(), __FUNCTION__ );
return preg_replace( '~<(pre|table).*</\1>~ms', '', $content );
}
आपको यह देखने के लिए स्क्रॉल करने की आवश्यकता नहीं है कि ये फ़ंक्शन कहाँ कहे जाते हैं, डॉक्टर ब्लॉक पर एक नज़र ही पर्याप्त है। इसके लिए कुछ प्रयासों की आवश्यकता है, क्योंकि आपको सिंक, पंजीकरण और टिप्पणी दोनों को रखना होगा, लेकिन लंबे समय में यह मूल्यवान समय बचाता है।