WordPress的鈎子函數之一——do_action()


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

  • 准備工作——給主題的頭部文件加上wp_head();函數

介紹與分析:要是不加這個函數,有的插件將不能正常工作!該函數位於wp-includes/general-template.php文件的1577行,原函數如下:

 function wp_head() {   
    do_action('wp_head');   
}  

①可以看到這個wp_head函數調用了do_action函數,傳入參數"wp_head"。該函數(do_action函數)位於wp-includes/plugin.php文件。不過這個函數就比較復雜了,這里就不講解了,只需要明白會用就好。

②do_action函數:do_action執行了一個“動作”,這個動作名稱就是這個參數"wp_head",這個“wp_head動作”是不需要定義的,do_action含有自動定義的功能。也就是不需要事先定義這個參數wp_head是什么、要干嘛,而do_action就會自動定義一個名叫wp_head的動作,並執行它。

但是,這個動作是要干什么,這里我們還需要一個函數——add_action()。注意,動作鈎子的兩個基本函數——add_action和do_action,位於同一個文件wp-includes/plugin.php中。

add_action()函數可以給“動作”添加具體事務,比如我們已經定義並執行了一個動作“飯前”,然后我們add_action('飯前 ','洗手'),就給這個“飯前”動作添加了具體內容,在程序中來講,“洗手”這個參數應該是個函數名稱,也就是‘飯前’動作要執行這個函數。

我們do_action里面的動作——'wp_head',叫做動作鈎子(hook),鈎子可以掛東西,所以add_action就是往這個鈎子上掛函數,然后執行那個鈎子的時候,也就是執行所有掛在這個鈎子上的函數!

  • 鈎子
函數:

<?php      

    do_action($tag, $arg);      

    //$tag  必需、你想創建的動作鈎子的名稱      

    //$arg  傳遞給已有的動作鈎子的值      

?>  

<?php      

    add_action( $tag, $function_to_add, $priority, $accepted_args );      

    //$tag  參數必需,動作鈎子的名稱      

    //$function_to_add  參數為必需,要執行的函數      

    //$priority  參數為int(整數),數字越小越先調用      

    //$accepted_args  參數為int(整數),函數需要的參數個數,默認1;自己理解:就是$function_to_add函數需要的參數個數      

 ?> 

簡單示例一——通過wp_head()函數來往wp頭部輸出一個meta信息

<?php   

add_action('wp_head','echo_author');   

function echo_author(){   

    echo '<meta name="author" content="阿樹工作室" />';   

}   

?>  

我們只需要往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、1、2、3,少接受可以,但是多了就木有了。

<?php    

add_action('ashu','function1',10,2);   

add_action('ashu','function2',1,3);   

function function1($a1,$a2){   

    echo $a1.'<br />'.$a2;   
}   

function function2($a1,$a2,$a3){   

    echo $a1.$a2.$a3.'<br />';   
}   

$arg_1 = '這里是阿樹工作室';   

$arg_2 = '這里有主題制作教程';   

$arg_3 = '我們提供主題定制服務';   

do_action('ashu',$arg_1,$arg_2,$arg_3);   

?>  

可以看到定義並執行了一個叫“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()....要想再深入了解,可以看官網了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM