本文主要介紹了講解WordPress鉤子hook的概念及基本用法,hook是WordPress中調(diào)用函數(shù)的重要用法,也是開發(fā)WordPress各種功能和插件的時(shí)候經(jīng)常用到的。
WordPress常用兩種鉤子,一種叫做動作(action),還有一種叫做過濾器(filter)。
動作鉤子概念
動作鉤子是WP代碼執(zhí)行到某處或某個事件發(fā)生時(shí)觸發(fā)的一系列函數(shù),插件可以利用動作鉤子API在WP代碼執(zhí)行的特定點(diǎn)之前插入一系列函數(shù)以控制執(zhí)行。它跟過濾鉤子極像,唯一不同的是過濾鉤子返回一個處理后的值,而動作鉤子僅完成函數(shù)執(zhí)行并不返回值,如果鉤子不存在則返回NULL并新增該鉤子。
動作鉤子原理
由于動作鉤子和過濾鉤子幾乎一樣,所以它們的實(shí)現(xiàn)原理也是一樣的。它主要利用一個全局變量$wp_filter,增加動作函數(shù)時(shí)使用add_action()函數(shù)給全局變量$wp_filter增加了一個數(shù)組元素,這個元素鍵名中含有鉤子名,值中含有對應(yīng)函數(shù)及執(zhí)行優(yōu)先級等信息,在調(diào)用do_action()函數(shù)使用動作鉤子時(shí),它通過循環(huán)查找出所有跟鉤子關(guān)聯(lián)的函數(shù)并將其依次調(diào)用,最后返回處理后的數(shù)據(jù)。
語法結(jié)構(gòu)
add_action($hook,$function_to_add,$priority = 10,$accepted_args = 1)
add_action()作用:該函數(shù)用于給指定的動作鉤子$hook添加指定的掛載函數(shù)$function_to_add,同時(shí)它可以確定掛載函數(shù)執(zhí)行優(yōu)先級及其可接收參數(shù)個數(shù);
參數(shù)
$hook 為鉤子名
$function_to_add 為掛載函數(shù)名
可選參數(shù)$priority為該掛載函數(shù)執(zhí)行的優(yōu)先級,默認(rèn)為10,該數(shù)字越小則越早執(zhí)行,數(shù)字相同則按其添加到鉤子上的順序執(zhí)行,越早添加越早執(zhí)行
可選參數(shù)$accepted_args確定掛載函數(shù)接收的參數(shù)個數(shù),默認(rèn)為1
只將概念的話可能會有點(diǎn)難以理解,下面我們結(jié)合一個例子進(jìn)行講解。wp_head 是一個很常用的動作鉤子,在開發(fā)主題過程中,開發(fā)者都會在 head 標(biāo)簽里加上 wp_head() 函數(shù),事實(shí)上,正是這個函數(shù)調(diào)用了 wp_head 鉤子,如果沒有這段代碼則有的插件將不能正常工作,該函數(shù)位于wp-includes/general-template.php文件中,原函數(shù)如下:
function wp_head() {
do_action('wp_head');
}
我們這樣解釋do_action函數(shù):do_action執(zhí)行一個“動作”,這個動作名稱就是這個參數(shù)”wp_head”,這個wp_head動作是不需要定義的,do_action還有定義的功能,也就是先前不需要定義這個wp_head是什么、要干嘛,而do_action就定義了一個名叫wp_head的動作,并執(zhí)行它。