WordPress 中有一種叫執(zhí)行掛勾的機(jī)制,允許插件把一些功能“掛載”到 WordPress 當(dāng)中。
也就是說,在系統(tǒng)運(yùn)行至某一個(gè)環(huán)節(jié)時(shí),去調(diào)用插件內(nèi)的一些函數(shù)。
WordPress中有2個(gè)函數(shù)可以讓我們執(zhí)行WordPress標(biāo)準(zhǔn)操作到時(shí)候調(diào)用我們自定義的函數(shù),這2個(gè)函數(shù)分別是add_action()和add_filter()。
先看看WordPress里面關(guān)于這2個(gè)函數(shù)的定義,在wp-includes/plugin.php文件中,先看add_filter()的定義:
function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) { global $wp_filter, $merged_filters; $idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority); $wp_filter[$tag][$priority][$idx] = array('function' => $function_to_add, 'accepted_args' => $accepted_args); unset( $merged_filters[ $tag ] ); return true;}
再看看add_action()函數(shù)的定義:
function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {return add_filter($tag, $function_to_add, $priority, $accepted_args);}
看到這里你也許就明白了,其實(shí)add_action()是調(diào)用add_filter()的功能,沒有加入新的處理操作,說明這兩個(gè)函數(shù)是沒有什么區(qū)別的。
下面來詳細(xì)說說add_filter()函數(shù)。
通過add_filter()函數(shù)的定義,我們可以看到該函數(shù)是把我們要hook的函數(shù)的一些變量存儲(chǔ)在global $wp_filter這樣一個(gè)全局?jǐn)?shù)組中的,包括$tag,即我們要hook的函數(shù),$priority即hook的順序,還有就是$idx這個(gè)就是我們自定義函數(shù)的名稱了。
值得注意的是如果我們?cè)谑褂胊dd_filter這個(gè)函數(shù)的時(shí)候如果指定順序,那么默認(rèn)的就是10,這個(gè)在插件開發(fā)的時(shí)候值得注意一下,以免和其它插件產(chǎn)生沖突。
博客發(fā)表新內(nèi)容時(shí)用電子郵件通知朋友:
總結(jié)一下:網(wǎng)上很多說到add_filter與add_action的區(qū)別,說的主觀上的區(qū)別,add_filter是指在數(shù)據(jù)顯示之前對(duì)數(shù)據(jù)進(jìn)行一些處理,而add_action則是執(zhí)行一下復(fù)雜的操作。
其實(shí)二者在功能上是沒有任何區(qū)別的
全部評(píng)論