WIKI使用導(dǎo)航
站長(zhǎng)百科導(dǎo)航
站長(zhǎng)專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機(jī)
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計(jì)算
- 微博營(yíng)銷
- 虛擬主機(jī)管理系統(tǒng)
- 開放平臺(tái)
- WIKI程序與應(yīng)用
- 美國(guó)十大主機(jī)
WordPress插件API
導(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)行。下面是鉤子的兩種形式:
- 動(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ù)。
- 過(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ù)
- has_filters
- add_filter()
- apply_filters()
- current_filter
- merge_filters()
- remove_filter()
- remove_all_filters
動(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ì)介紹):
- 在插件文件中創(chuàng)建一個(gè)可以在事件發(fā)生時(shí)執(zhí)行的PHP函數(shù)
- 調(diào)用add_action,將動(dòng)作函數(shù)勾入WordPress
- 將創(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ì)描述):
- 創(chuàng)建一個(gè)可以過(guò)濾數(shù)據(jù)的PHP函數(shù)
- 調(diào)用add_filter(),將過(guò)濾器函數(shù)勾入WordPress
- 將創(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源代碼或者其它插件源代碼以了解信息。
除了上面介紹的鉤子(動(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。
可插入式函數(shù)[ ]
相關(guān)條目[ ]