久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

WordPress插件API

來(lái)自站長(zhǎng)百科
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索

導(dǎo)航: 上一頁(yè) | 首頁(yè) | WordPress中文論壇 | WordPress主機(jī) | CMS程序 | 論壇程序 | ECShop | ShopNC | PowerEasy

本文介紹了WordPress中插件開發(fā)人員可以使用的API(應(yīng)用程序接口)鉤子(hook),以及這些API鉤子的用法。

閱讀本文前請(qǐng)先了解插件的開發(fā)過(guò)程。本文著重介紹了“鉤子”的應(yīng)用程序接口,這里的鉤子又被稱為“過(guò)濾器”和“動(dòng)作”。WordPress通過(guò)鉤子來(lái)運(yùn)行插件。這些鉤子也可以用在主題中,參見(jiàn)主題開發(fā)一文中的“主題函數(shù)文件”部分。

注意:以上內(nèi)容適用于WordPress 1.2以及更高版本。在WordPress1.2之前的版本中,所有更改都被叫做“hacks”,且更改時(shí)都需要編輯WordPress的源代碼。

鉤子,動(dòng)作與過(guò)濾器[ ]

WordPress用鉤子將插件“勾進(jìn)”WordPress系統(tǒng)中,讓插件與WordPress相連接。也就是說(shuō),通過(guò)鉤子,WordPress能夠在特定時(shí)間內(nèi)調(diào)用插件中的函數(shù),讓插件開始運(yùn)行。下面是鉤子的兩種形式:

  1. 動(dòng)作(Actions):在系統(tǒng)運(yùn)行的某些特定時(shí)間點(diǎn)或發(fā)生特定事件時(shí),WordPress核心程序會(huì)調(diào)用一些鉤子。這里WordPress所調(diào)用的鉤子被稱為“動(dòng)作”。插件用動(dòng)作API來(lái)指定在上述特定時(shí)間點(diǎn)內(nèi)需要執(zhí)行的PHP函數(shù)。
  2. 過(guò)濾器(Filters):WordPress將不同類型文本添加到數(shù)據(jù)庫(kù)或發(fā)送給瀏覽器窗口前,需要調(diào)用一些鉤子來(lái)修改上述不同類型文本。這里WordPress所調(diào)用的鉤子被稱為“過(guò)濾器”。通過(guò)使用濾器API,插件可以執(zhí)行一個(gè)或多個(gè)PHP函數(shù)以修改上述不同類型文本。

有時(shí)我們可以直接通過(guò)動(dòng)作或過(guò)濾器實(shí)現(xiàn)以上效果。例如,如果我們希望用插件來(lái)改變某篇日志內(nèi)容,可以為publish_post添加一個(gè)動(dòng)作函數(shù)(保存到數(shù)據(jù)庫(kù)時(shí)修改日志),也可以為the_content添加一個(gè)過(guò)濾器函數(shù)(顯示到瀏覽器窗口時(shí)修改日志)。

Adam Brown's WP Hooks Database 中列出了WordPress中所有動(dòng)作鉤子和過(guò)濾器鉤子。

函數(shù)引用[ ]

過(guò)濾器函數(shù)

動(dòng)作函數(shù)

動(dòng)作[ ]

動(dòng)作由發(fā)生在WordPress中的特定事件觸發(fā),如發(fā)表日志、更改主題、顯示控制板頁(yè)面等。插件以執(zhí)行PHP函數(shù)的方式來(lái)響應(yīng)該事件,函數(shù)的作用可能是:

  • 更改數(shù)據(jù)庫(kù)資料
  • 發(fā)送電子郵件消息
  • 更改瀏覽器窗口上顯示的信息(網(wǎng)站管理員或終端用戶)

基本步驟如下(下文中有詳細(xì)介紹):

  1. 在插件文件中創(chuàng)建一個(gè)可以在事件發(fā)生時(shí)執(zhí)行的PHP函數(shù)
  2. 調(diào)用add_action,將動(dòng)作函數(shù)勾入WordPress
  3. 將創(chuàng)建的PHP函數(shù)存放在插件文件中,激活該函數(shù)

創(chuàng)建動(dòng)作函數(shù)[ ]

要在插件中新建一個(gè)動(dòng)作函數(shù),首先要用插件中該動(dòng)作的功能來(lái)創(chuàng)建一個(gè)PHP函數(shù),然后將函數(shù)存入插件文件(我們需要將插件文件放在wp-content/plugins目錄下)。例如,如果我們希望每次我們發(fā)表新日志,博客都會(huì)以電子郵件的方式通知我們的朋友,我們可以定義以下函數(shù):

function email_friends($post_ID)  
{
$friends = 'bob@example.org,susie@example.org';      
mail($friends, "sally's blog updated",         
'I just put something on my blog: );      
return $post_ID;  

}

大多數(shù)動(dòng)作函數(shù)都能接受一個(gè)參數(shù)(通常是日志ID或評(píng)論ID,取決于動(dòng)作的性質(zhì))。有些動(dòng)作函數(shù)能接收更多參數(shù)——更多信息請(qǐng)參照動(dòng)作的說(shuō)明文檔或WordPress源代碼。除參數(shù)外,我們也可以獲取WordPress的全局變量,調(diào)用其它WordPress函數(shù)(或插件文件中的函數(shù))。

函數(shù)輸出的內(nèi)容會(huì)出現(xiàn)在調(diào)用動(dòng)作的頁(yè)面源代碼中。

注意:其它插件或WordPress核心文件中的函數(shù)可能已經(jīng)使用了我們所創(chuàng)建的函數(shù)名稱。詳細(xì)信息參見(jiàn)避免插件名稱沖突。

勾入WordPress(連接到WordPress程序中)[ ]

定義PHP函數(shù)后,我們要將函數(shù)連接到WordPress中。可以在插件文件的全局變量執(zhí)行域中調(diào)用add_action來(lái)實(shí)現(xiàn)連接:

add_action ( 'hook_name', 'your_function_name', [priority], [accepted_args] );  

其中:

hook_name

WordPress動(dòng)作鉤子的名稱,通過(guò)名稱我們可以了解到函數(shù)與什么事件相關(guān)聯(lián)。

your_function_name

hook_name指定事件后,需要執(zhí)行的函數(shù)名。函數(shù)需要是WordPress核心文件中的標(biāo)準(zhǔn)PHP函數(shù),或是我們?cè)诓寮募卸x的函數(shù)(如上文中定義的'email_friends')。

priority

用一個(gè)可選的整數(shù)型變量來(lái)規(guī)定函數(shù)(與特定動(dòng)作相關(guān)聯(lián))的執(zhí)行順序,變量值默認(rèn)為10。若某函數(shù)的priority值小于10,優(yōu)先執(zhí)行該函數(shù)。如果若干函數(shù)priority值相等,則按加入動(dòng)作的順序執(zhí)行函數(shù)。

accept_args

用一個(gè)可選的整數(shù)型變量來(lái)定義函數(shù)能夠接受的參數(shù)數(shù)量(默認(rèn)值為1)。有些鉤子能夠向函數(shù)傳遞一個(gè)以上參數(shù),因此accept_args實(shí)用價(jià)值較大。參數(shù)引進(jìn)于WordPress 1.5.1。 根據(jù)上面的例子,我們要在插件文件中加入以下代碼行:

add_action ( 'publish_post', 'email_friends' );  

同樣,我們也可以刪除動(dòng)作鉤子中的動(dòng)作。

安裝與激活[ ]

最后我們要安裝文件、激活插件以運(yùn)行動(dòng)作鉤子。我們要將創(chuàng)建的PHP函數(shù)和add_filter調(diào)用存入一個(gè)PHP文件并將該P(yáng)HP文件安裝在wp-content/plugins目錄下。安裝完畢后,在WordPress的管理界面中激活插件;參見(jiàn)管理插件。

當(dāng)前動(dòng)作鉤子

插件API/常用動(dòng)作(action)中列出了WordPress現(xiàn)有動(dòng)作鉤子以及之前WordPress版本的鏈接。

過(guò)濾器(Filters)[ ]

過(guò)濾器是WordPres在運(yùn)行中的特定時(shí)間點(diǎn)、對(duì)數(shù)據(jù)進(jìn)行操作(如將數(shù)據(jù)加入數(shù)據(jù)庫(kù),或?qū)?shù)據(jù)發(fā)送到瀏覽器窗口上)前,用來(lái)傳遞數(shù)據(jù)的函數(shù)。WordPress生成頁(yè)面時(shí),過(guò)濾器位于數(shù)據(jù)庫(kù)和瀏覽器之間;當(dāng)WordPress將新日志和評(píng)論加入到數(shù)據(jù)庫(kù)中時(shí),過(guò)濾器位于瀏覽器和數(shù)據(jù)庫(kù)之間。WordPress中大多數(shù)輸入和輸出內(nèi)容都至少經(jīng)過(guò)一個(gè)過(guò)濾器的傳遞。默認(rèn)情況下WordPress會(huì)執(zhí)行一些過(guò)濾行為,但插件也可以添加自己的過(guò)濾器函數(shù)。

將過(guò)濾器函數(shù)加入WordPress的基本步驟如下(下文中有詳細(xì)描述):

  1. 創(chuàng)建一個(gè)可以過(guò)濾數(shù)據(jù)的PHP函數(shù)
  2. 調(diào)用add_filter(),將過(guò)濾器函數(shù)勾入WordPress
  3. 將創(chuàng)建的PHP函數(shù)存放在插件文件中,激活該函數(shù)

創(chuàng)建過(guò)濾器函數(shù)[ ]

過(guò)濾器函數(shù)將未經(jīng)修改的數(shù)據(jù)作為輸入內(nèi)容,返回修改后的數(shù)據(jù)(有時(shí)會(huì)返回空值來(lái)表示該數(shù)據(jù)應(yīng)該被刪除或忽略)。如果過(guò)濾器函數(shù)沒(méi)有對(duì)數(shù)據(jù)做修改,則應(yīng)該返回原始數(shù)據(jù),方便插件必要時(shí)修改數(shù)據(jù)值。 因此要在插件中新建一個(gè)過(guò)濾器函數(shù),首先要?jiǎng)?chuàng)建一個(gè)PHP函數(shù)負(fù)責(zé)過(guò)濾,然后將該P(yáng)HP函數(shù)存入插件文件(插件文件必須位于wp-content/plugins目錄下)。例如,如果希望我們的日志和評(píng)論中沒(méi)有褻瀆性語(yǔ)言,我們需要定義一個(gè)全局變量,列出所有不允許出現(xiàn)的詞語(yǔ),然后創(chuàng)建PHP函數(shù):

function filter_profanity($content) {      
global $profanities;          
$content=str_ireplace($profanities,'{censored}',$content);      
return $content;  }

為什么這里不用循環(huán)也可以?這是因?yàn)?em>$profanities是一個(gè)數(shù)組, str_replace可以幫我們循環(huán)該數(shù)組。

注意:其它插件或WordPress核心文件中的函數(shù)可能已經(jīng)使用了我們所創(chuàng)建的函數(shù)名稱。詳細(xì)信息參見(jiàn)插件開發(fā)建議。

將過(guò)濾器勾入WordPress(連接到WordPress程序中)

定義PHP函數(shù)后,我們要將過(guò)濾器函數(shù)連接到WordPress中??梢栽诓寮募娜肿兞繄?zhí)行域中調(diào)用add_filter來(lái)實(shí)現(xiàn)連接:

add_filter ( 'hook_name', 'your_filter', [priority], [accepted_args] );  

其中:

hook_name

WordPress過(guò)濾器鉤子的名稱,通過(guò)名稱我們可以了解到什么時(shí)候需要用到過(guò)濾器函數(shù)。

your_function_name

用于過(guò)濾的函數(shù)的名稱。函數(shù)需要是WordPress核心文件中的標(biāo)準(zhǔn)PHP函數(shù),或是我們?cè)诓寮募卸x的函數(shù)。

priority

用一個(gè)可選的整數(shù)型變量來(lái)規(guī)定函數(shù)(該函數(shù)與特定過(guò)濾器相關(guān)聯(lián))的執(zhí)行順序,變量值默認(rèn)為10。若某函數(shù)的priority值小于10,優(yōu)先執(zhí)行該函數(shù)。如果若干函數(shù)priority值相等,則按加入過(guò)濾器的順序執(zhí)行函數(shù)。   accept_args

用一個(gè)可選的整數(shù)型變量來(lái)定義函數(shù)能夠接受的參數(shù)數(shù)量(默認(rèn)值為1)。有些鉤子能夠向函數(shù)傳遞一個(gè)以上參數(shù),因此accept_args實(shí)用價(jià)值較大。 根據(jù)上面的例子,我們要在插件文件的主執(zhí)行區(qū)域中加入以下代碼行,讓W(xué)ordPress過(guò)濾含有褻瀆性內(nèi)容的評(píng)論:

add_filter('comment_text','filter_profanity');  

我們也可以用remove_filter()刪除過(guò)濾器鉤子中的過(guò)濾器函數(shù)。

安裝與激活[ ]

最后我們要安裝文件、激活插件以運(yùn)行過(guò)濾器鉤子。我們要將創(chuàng)建的PHP函數(shù)和add_filter調(diào)用存入一個(gè)PHP文件并且將該P(yáng)HP文件安裝在wp-content/plugins目錄下。安裝完畢后,在WordPress的管理界面中激活插件;參見(jiàn)管理插件

當(dāng)前過(guò)濾器鉤子[ ]

插件API/常用動(dòng)作(action)中列出了WordPress現(xiàn)有過(guò)濾器鉤子以及之前WordPress版本的鏈接。

示例[ ]

這是wp-hackers郵件列表中的一個(gè)示例。該示例用一個(gè)插件來(lái)更改(或重寫)默認(rèn)的bloginfo()函數(shù)。這將會(huì)修改核心函數(shù)。

add_filter('bloginfo', 'mybloginfo', 1, 2);  
add_filter('bloginfo_url', 'mybloginfo', 1, 2);    
function mybloginfo($result=, $show=) 
{          
switch ($show) {          
   case 'wpurl':                  
   $result = SITE_URL;break;          
     case 'template_directory':                  
   $result = TEMPL_DIR;break;          
   default:           }          
 return $result;  }

刪除動(dòng)作和過(guò)濾器[ ]

有時(shí)我們可能會(huì)希望插件禁用WordPress內(nèi)置的、或者其它插件創(chuàng)建的某個(gè)動(dòng)作或過(guò)濾器。這時(shí)可以調(diào)用

例如發(fā)表新日志時(shí),用

注意,如果鉤子優(yōu)先級(jí)的值不是10,那么我們必須在調(diào)用remove_action時(shí)指定優(yōu)先級(jí)。一般來(lái)說(shuō),除非我們完全了解所要?jiǎng)h除的信息以及信息的作用,否則不能隨意刪除任何信息——可以查看WordPress源代碼或者其它插件源代碼以了解信息。

可插入式函數(shù)[ ]

除了上面介紹的鉤子(動(dòng)作和過(guò)濾器),我們還可以通過(guò)重寫WordPress函數(shù)來(lái)讓插件影響WordPress的運(yùn)行。事實(shí)上,WordPress為插件提供了一個(gè)能夠重新定義的小型函數(shù)集。函數(shù)集中的函數(shù)被稱為可插入式函數(shù),存儲(chǔ)在wp-includes/pluggable.php下。如果所有插件都加載完畢后,可插入式函數(shù)仍然處于未定義狀態(tài),這時(shí)WordPress會(huì)加載這些函數(shù)。更多信息參見(jiàn) wp-settings.php。

相關(guān)條目[ ]