wordpress功能集成(二):基礎知識-wordpress鉤子(轉)

要想爲所欲爲的給主題添加功能,wordpress的鉤子和過濾器應該要能明白。wordpress鉤子和過濾器也是插件開發的基本知識。 php

咱們經過實例來說解wordpress鉤子,在第一節基礎教程中咱們說到,要給主題的頭部文件加上wp_head();函數,不然有的插件將不能正常工做,該函數位於wp-includes/general-template.php文件的1577行,原函數以下: css

  1. function wp_head() {   
  2.     do_action('wp_head');   
  3. }  

可一看到這個函數調用了do_action函數,傳入參數"wp_head",有興趣的看官能夠繼續追溯一下do_action函數,該函數位於wp-includes/plugin.php文件。不過這個函數就比較複雜了,這裏就不講解了,只須要明白會用就好。 wordpress

咱們這樣解釋do_action函數:do_action執行一個「動做」,這個動做名稱就是這個參數"wp_head",這個wp_head動做是不須要定義的,do_action還有定義的功能,也就是先前不須要定義這個wp_head是什麼、要幹嗎,而do_action就定義了一個名叫wp_head的動做,並執行它。 函數

可是光有一個空名稱不行啊,不如你說咱們do_action('飯前'),固然這裏的參數是假想的,確定不能用中文嘛,飯前具體幹嗎呢? spa

因此咱們還須要一個函數:add_action(),add_action跟do_action位於同一個文件中。 插件

add_action()函數能夠給「動做」添加具體事務,好比前面咱們已經定義並執行了一個動做「飯前」,而後咱們add_action('飯前','洗手'),就給這個「飯前」動做添加了具體內容,在程序中來說,「洗手」這個參數應該是個函數名稱,也就是執行這個函數。 教程

因此咱們do_action裏面的動做叫作動做鉤子(hook),鉤子能夠掛東西,因此add_action就是往這個鉤子上掛函數,而後執行那個鉤子的時候,也就是執行全部掛在這個鉤子上的函數。 事務

函數: 開發

  1. <?php      
  2.     do_action($tag$arg);      
  3.     //$tag  必需、你想建立的動做鉤子的名稱      
  4.     //$arg  傳遞給已有的動做鉤子的值      
  5. ?>  
  1. <?php      
  2.     add_action( $tag$function_to_add$priority$accepted_args );      
  3.     //$tag  參數必需,動做鉤子的名稱      
  4.     //$function_to_add  參數爲必需,要執行的函數      
  5.     //$priority  參數爲int(整數),數字越小越先調用      
  6.     //$accepted_args  參數爲int(整數),函數須要的參數個數,默認1;      
  7.  ?>  

注意了:咱們看到do_action函數和add_action函數還有一個參數,咱們將在實例中講解參數的應用。 rem

先看簡單示例一,咱們經過wp_head()函數來往wp頭部輸出一個meta信息:

  1. <?php   
  2. add_action('wp_head','echo_author');   
  3. function echo_author(){   
  4.     echo '<meta name="author" content="阿樹工做室" />';   
  5. }   
  6. ?>  

咱們只須要往wp_head動做上添加一個函數,輸出meta信息便可,上面的函數添加在哪裏呢?主題的functions.php,或者其它主題被包含的函數文件,好吧,只要主題會執行的地方。

這個應用很簡單,不少插件就是這樣工做的,像這樣來輸出css或js代碼。

示例二:

此次咱們要經過鉤子來傳遞參數了,do_action('hookname',$arg_1,$arg_2,$arg_3)除了鉤子名外,還要帶3個參數,而後add_action()中,除了鉤子名,函數名,優先級,剩下那個就是參數的個數了,也就是掛靠的這個函數須要多少個參數,do_action傳了3個參數,那麼對應的add_action的accepted_args能夠爲0、一、二、3。少接受能夠,可是多了就木有了。

例如:

  1. <?php    
  2. add_action('ashu','function1',10,2);   
  3. add_action('ashu','function2',1,3);   
  4. function function1($a1,$a2){   
  5.     echo $a1.'<br />'.$a2;   
  6. }   
  7. function function2($a1,$a2,$a3){   
  8.     echo $a1.$a2.$a3.'<br />';   
  9. }   
  10.   
  11. $arg_1 = '這裏是阿樹工做室';   
  12. $arg_2 = '這裏有主題製做教程';   
  13. $arg_3 = '咱們提供主題定製服務';   
  14. do_action('ashu',$arg_1,$arg_2,$arg_3);   
  15. ?>  

能夠看到定義並執行了一個叫「ashu」的動做鉤子,而且傳3個參數給動做函數,而後使用add_action,往這個鉤子上掛了2個函數,function1函數須要2個參數,function2須要3個參數,因此使用add_action的時候後面對應的參數個數也是2和3。而後優先級分別是10和1,因此function2先執行。

我想到了這裏,動做的使用已經很清楚了。然而關於動做鉤子(hook)的函數不單單隻有這兩個,還有has_action() do_action_ref_array() remove_action() remove_all_action()....要想再深刻了解,能夠看官網了。

相關文章
相關標籤/搜索