當(dāng)前位置:首頁>WordPress建站>WordPress開發(fā)>介紹50個(gè) WordPress 動(dòng)作掛鉤

介紹50個(gè) WordPress 動(dòng)作掛鉤

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é)課再見!

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺(tái)。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關(guān)注WordPress大學(xué)公眾號(hào) WPDAXUE
WordPress開發(fā)

WordPress:自定義WP REST API (WP API)授權(quán)

2015-4-8 8:42:21

WordPress開發(fā)

介紹50個(gè) WordPress 動(dòng)作掛鉤(1-10)

2015-6-9 9:55:03

2 條回復(fù) A文章作者 M管理員
  1. 學(xué)習(xí)了。

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

?
個(gè)人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

永善县| 兰溪市| 怀安县| 保山市| 东平县| 长海县| 涟水县| 唐河县| 临沭县| 舟山市| 广西| 宁陵县| 海林市| 茶陵县| 孙吴县| 子洲县| 齐齐哈尔市| 洛川县| 绍兴市| 新河县| 江西省| 宁南县| 酒泉市| 吴江市| 天峻县| 镇安县| 安乡县| 常熟市| 固原市| 瓦房店市| 承德市| 广州市| 年辖:市辖区| 普宁市| 汪清县| 海晏县| 庄河市| 尤溪县| 宜宾县| 大港区| 栖霞市|