鉤子是 WordPress 的精髓
他們允許插件開發人員鉤進 WordPress 工作流程(WordPress的核心代碼或主題框架等代碼),插入代碼或修改值,而不用修改原代碼。
插沒有鉤子,插件就沒辦法改變 WordPress 的功能了。
鉤子處理動作
1、把鉤子埋到埋點
do_action()和apply_filters():埋鉤子,通過這兩個函數把鉤子插入埋點
2、鉤一個函數到這個賣點(動作或過濾器)
add_action()和add_filter():調用一個回調函數,執行的代碼或返回值插入到埋點
原理理解:
程序在執行過程中,如果這個地方埋了鉤子,則會先執行這些動作(過濾器),執行完繼續往下走;
後面的開發者可以通過添加動作(過濾器),在不改變上遊程序的情況下,插入代碼或修改賦值。
用在哪些地方
幾個地方會用到:
- WordPress核心:指的是 WordPress 內建的程式碼架構,提供 WordPress 主要的基本功能
- 主題框架、父主題
- 主題functions
- 插件文件
一般情況下:
do_action()和apply_filters() 存在於WordPress核心代碼或主題框架或父主題中。
add_action()和add_filter() 存在於插件中(最重要的用法);也用於主題的functions文件(針對核心代碼埋的鉤子)或子主題的模板文件中(針對主題框架或父主題埋的鉤子)。
鉤子分類
- 動作(action):讓你可以在 WordPress 加載過程中或者當某個事件發生的特定時刻觸發一個函數,執行相關指令
- 過濾器(filter):讓你可以在 WordPress 加載過程中或者當某個事件發生的特定時刻觸發一個函數,修改一個賦值(有返回值)
動作鉤子(action)
do_action():執行動作
add_action():添加動作
過濾器(filter)
apply_filters():創建過濾器
add_filter():添加鉤子
動作和過濾器的區別
過濾器有返回值,而動作沒有
舉例:
<?php
add_action( 'wp_footer', 'boj_example_footer_message', 100 );
?>
過濾器鉤子可以讓你改一些東西的值,過濾器回調函數會接受一個參數,這就是當前的值
舉例:
調用文章內容的 the_content() 函數,這個函數就提供了一個 the_content 過濾器
給 the_content 鉤子添加一個函數,這個函數需要接收一個參數,這個參數就是當前的值。
//文章內容全部鏈接新窗口打開
function Bing_autoblank( $content ){//$content 變量就是文章內容,因為其它過濾器也要過濾,所以這個內容可能是經過其它函數過濾的
$content = str_replace( '<a', '<a target="_blank"', $content );//添加 target="_blank"
return $content;//必須要把過濾後的內容返回回去,否則值就丟了
}
add_filter( 'the_content', 'Bing_autoblank' );