WordPress 之所以能成為世界上最受歡迎的網(wǎng)頁內(nèi)容管理系統(tǒng),原因就在于它的高度靈活性和可塑性,而這種靈活性和可塑性正是由“掛鉤”(Hooks)簡潔宜用的結(jié)構(gòu)所決定的。可以說,沒有過濾掛鉤(Filter Hooks)和動(dòng)作掛鉤(Action Hooks), WordPress 就不會(huì)具有這樣高的可拓展性,我們也不可能會(huì)有如此多的 WordPress 插件和主題可供選擇。
在本系列教程中,我將會(huì)向你詳細(xì)介紹 WordPress 中的動(dòng)作掛鉤。在整個(gè)教程中,我們將會(huì)涵蓋有關(guān)動(dòng)作掛鉤幾乎所有方面的內(nèi)容。
- 在第一部分,也就是在本文中,我們將會(huì)逐步了解到 WordPress 動(dòng)作掛鉤:什么是 WordPress 動(dòng)作掛鉤,以及怎樣使用 WordPress 的7大核心動(dòng)作掛鉤。
- 在接下來的五個(gè)部分,我們將會(huì)接觸到大量有關(guān) WordPress 動(dòng)作掛鉤的實(shí)例。而在每一個(gè)部分,我們都會(huì)了解到10個(gè)掛鉤的優(yōu)點(diǎn)和它們的使用條件,并通過一些實(shí)例來進(jìn)一步掌握它們。
- 在本系列課程的最后,我們將會(huì)進(jìn)行一次課程回顧與總結(jié),包括所舉的50個(gè)例子。
這個(gè)學(xué)習(xí)過程將會(huì)非常漫長,所以,請(qǐng)做好準(zhǔn)備。
什么是 WordPress 動(dòng)作掛鉤
在 Codex ( WordPress 法典)中,給出的定義如下:
動(dòng)作掛鉤由 WordPress 中的特定事件激活,例如:發(fā)布一篇文章、更改主題,或者是顯示管理控制界面( administration screen)。動(dòng)作掛鉤是在插件(或主題)中定義的自定義PHP函數(shù),即被設(shè)定為回應(yīng)某些特定事件。
所以,從本質(zhì)上來說,動(dòng)作掛鉤由某個(gè) WordPress 事件激活,可以在事件之前或之后運(yùn)行。動(dòng)作掛鉤只是WordPress的兩種掛鉤之一,另一個(gè)則是我們之前講到的過濾掛鉤(Filters)——如果想了解更多有關(guān) WordPress 過濾掛鉤的內(nèi)容,請(qǐng)參閱《50個(gè) WordPress 過濾掛鉤》一文。
在WordPress中使用動(dòng)作掛鉤
定義動(dòng)作掛鉤只是最簡單的一步,幸運(yùn)的是,學(xué)會(huì)如何創(chuàng)建和使用動(dòng)作掛鉤也是非常簡單的。首先,讓我們來看看怎樣將相關(guān)函數(shù)掛載到動(dòng)作掛鉤上,怎樣創(chuàng)建新的動(dòng)作掛鉤,清除現(xiàn)有的掛鉤和其他在 WordPress core中與動(dòng)作掛鉤相關(guān)的函數(shù)。
將一個(gè)函數(shù)掛載到一個(gè)動(dòng)作掛鉤上
其中最簡單的函數(shù)也許就是 add_action():它可以將某個(gè)函數(shù)掛載到我們即將使用的動(dòng)作掛鉤上
<?php
add_action( $hook_name, $function_name, $priority, $arguments );
?>
讓我們來看看這些參數(shù)意味著什么:
- $hook_name 是所使用的動(dòng)作掛鉤的名稱。
- $function_name 是函數(shù)名。
- $priority 是我們規(guī)定的一個(gè)整數(shù),用來設(shè)置函數(shù)在此掛鉤中的優(yōu)先級(jí)別。
- $arguments 是函數(shù)所使用的和動(dòng)作掛鉤同時(shí)所允許的參數(shù)個(gè)數(shù)。
讓我們來看一個(gè)簡單的例子:
<?php
add_action( 'add_meta_boxes', 'my_function', 10, 2 );
function my_function( $post_type, $post ) {
// do stuff with $post_type and $post
}
?>
很簡單,對(duì)吧?
從動(dòng)作掛鉤中清除原有函數(shù)
我們可以使用以下兩個(gè)函數(shù)清除動(dòng)作掛鉤中的原有函數(shù): remove_action() 和 remove_all_actions()
首先來看一看它們是如何使用的:
<?php
// remove_action( $hook_name, $function_name, $priority );
remove_action( 'login_enqueue_scripts', 'some_function', 10 );
// remove_all_actions( $hook_name, $priority );
remove_all_actions( 'wp_enqueue_scripts', 10 );
?>
remove_action() 有三個(gè)參數(shù):掛鉤名稱、要清除的函數(shù)名和使用 add_action() 時(shí)設(shè)置的優(yōu)先級(jí)別。 remove_all_actions() 函數(shù)則沒有$function_name 參數(shù),因?yàn)樗鼤?huì)清除動(dòng)作掛鉤中的所有函數(shù)。
創(chuàng)建一個(gè)動(dòng)作掛鉤
如果你想要開發(fā) WordPress插件或者主題的話,一個(gè)值得推薦的做法是在你的代碼中創(chuàng)建一些掛鉤,這樣其他的開發(fā)人員就可以繼續(xù)擴(kuò)展你的插件和主題了。而要做到這一點(diǎn),我們需要兩個(gè)函數(shù):do_action() 和 do_action_ref_array()。讓我們來看看第一個(gè)函數(shù)是如何運(yùn)作的:
<?php
do_action( $hook_name, $arg1, $arg2, /* ... */ $argN );
/*
* Usage:
*
* add_action( hook_name, my_function )
*
* function my_function( $arg1, $arg2 ) {
* // do stuff with $arg1, $arg2 and so on
* }
*
*/
?>
正如你所看到的那樣,這個(gè)函數(shù)實(shí)際上可以包含無限多的參數(shù),你可以根據(jù)需要來定義任意多的參數(shù)。如果你想在一個(gè)數(shù)組中保存這些參數(shù),那么你還需要使用第二個(gè)函數(shù):
<?php
$args = array( $arg1, $arg2, /* ... */ $argN );
do_action_ref_array( $hook_name, $args );
/*
* Usage:
*
* add_action( hook_name, my_function )
*
* function my_function( $args ) {
* // do stuff with $args[0], $args[1] and so on
* }
*
*/
?>
檢索動(dòng)作掛鉤被調(diào)用的次數(shù)
如果你想知道一個(gè)動(dòng)作掛鉤被調(diào)用的次數(shù),你可以使用一個(gè)簡單方便的函數(shù)來統(tǒng)計(jì):
<?php
function tuts_foo() {
$action_count = did_action( 'some_action_name' );
if ( 1 === $action_count ) {
// run code if 'some_action_name' has been fired only once
}
}
?>
正如你看到的那樣,這個(gè)函數(shù)中唯一的參數(shù)就是動(dòng)作掛鉤的命名。
檢查是否存在指定的動(dòng)作掛鉤
假設(shè)你正在為一個(gè)流行的 WordPress 插件開發(fā)其他的擴(kuò)展插件,你首先需要檢查用戶是否已經(jīng)安裝了這個(gè) WordPress 插件。(畢竟,如果這個(gè)插件沒有安裝并激活的話,那么你后來開發(fā)的插件也將無法使用。)
為了進(jìn)行這項(xiàng)檢查,你可以使用 has_action() 函數(shù)以確定這個(gè)插件的動(dòng)作掛鉤是可以訪問的:
<?php
if( has_action( 'some_popular_plugin_action' ) {
add_action( 'some_popular_plugin_action', 'extension_to_the_some_popular_plugin' );
} else {
wp_die( 'Sorry to kill your website but I need "Some Popular Plugin" to work with.' );
// CAUTION: This is a joke. Don't shut down a website because your plugin can't work with it.
}
?>
就像 did_action() 函數(shù),has_action() 函數(shù)只有一個(gè)參數(shù):動(dòng)作掛鉤的名稱。
小結(jié)
現(xiàn)在,我們已經(jīng)介紹完了有關(guān)創(chuàng)建和使用動(dòng)作掛鉤幾乎所有的基本內(nèi)容,接下來的五篇長文將涉及到非常多的實(shí)例。我們將選出其中有代表性的50個(gè)例子來講解,如果你有興趣的話,可以在 WordPress core 中找到數(shù)以百計(jì)的例子。
我希望你會(huì)喜歡我創(chuàng)建并分享的這一系列課程。如果你能為這個(gè)課程推薦更多更好的動(dòng)作掛鉤,或者你需要更多例子的話,請(qǐng)告訴我,并在下面的評(píng)論區(qū)分享你的看法。如果你喜歡這些課程,別忘了分享哦!
讓我們下節(jié)課再見!
- 原文出自:http://code.tutsplus.com/tutorials/fifty-actions-of-wordpress-an-introduction–cms-21577
- 由 stonetan@WordPress大學(xué) 原創(chuàng)翻譯,未經(jīng)允許,禁止轉(zhuǎn)載和采用本譯文。
您已閱讀完《50個(gè) WordPress 動(dòng)作掛鉤(共7篇)》專題的第 1 篇。請(qǐng)繼續(xù)閱讀該專題下面的文章:






學(xué)習(xí)了。
很實(shí)用的教程,學(xué)習(xí)一下。