add_filter()
ve add_action()
herhangi bir eklenti yüklenmeden önce kullanılabilir. Böylece hem eklentinizin hem de temanızın ilk satırında kullanabilirsiniz.
Okunabilirlik için ana dosyanızın en üstündeki eylem ve filtreleri gruplandırmanızı öneririm:
- eklentide, eklenti başlığına sahip dosya
- bir temada
functions.php
Bu kural için istisnalar vardır:
- Zincirleme geri aramalar . Gelen bu örnekte ben bir eylem kayıt
shutdown
için ilk filtre yalnızca wp_nav_menu_objects
adı olmuştur. Dolayısıyla, ikinci geri arama birinciyle aynı anda kaydedilemez.
OOP tarzı. Bazen geri aramaları kaydetmeden önce sınıf üyelerini ayarlamanız gerekir. Çok benzer bir örnek kullanarak …
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
}
}
… Sınıfın örneklemesinin başka bir eklenti tarafından durdurulabileceğini ve bir alt sınıfın daha fazla veya farklı filtre ve eylem kaydedebileceğini görüyoruz.
Gruplamaya ek olarak, bir adım daha ileri gidebilir ve diğer geliştiriciler için özelleştirmeleri kolaylaştırmak için özel bir eylem sunabilirsiniz.
İşte üzerinde çalıştığım bir temadan bir örnek:
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' );
Son satır önemlidir: Bir alt tema veya bir eklenti t5_theme_hooks_registered
şimdi harekete geçebilir ve önceki kancaların kaydını silebilir. Yani kurtaracak öncelikler ile mücadele ve ben değiştirmek için özgürüm benim geri arama öncelikleri her zaman.
Ancak yalnızca kaynak kodu sırasına güvenmeyin. Doküman bloğunuzda kullandığınız kancaları belgeleyin. Bunun için özel bir etiket kullanıyorum wp-hook
. Aynı temanın zincir kancaları ile ilgili bir örnek:
/**
* 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 );
}
Bu işlevlerin nerede çağrıldığını görmek için yukarı kaydırmanız gerekmez, doc bloğuna bir göz atmanız yeterlidir. Bu, biraz çaba gerektirir, çünkü hem senkronizasyonu, kaydı hem de yorumu tutmak zorundasınız, ancak uzun vadede değerli zaman kazandırır.