WIKI使用導航
站長百科導航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機
- cPanel
- 網(wǎng)址導航專題
- 云計算
- 微博營銷
- 虛擬主機管理系統(tǒng)
- 開放平臺
- WIKI程序與應用
- 美國十大主機
WordPress插件API
導航: 上一頁 | 首頁 | WordPress中文論壇 | WordPress主機 | CMS程序 | 論壇程序 | ECShop | ShopNC | PowerEasy
本文介紹了WordPress中插件開發(fā)人員可以使用的API(應用程序接口)鉤子(hook),以及這些API鉤子的用法。
閱讀本文前請先了解插件的開發(fā)過程。本文著重介紹了“鉤子”的應用程序接口,這里的鉤子又被稱為“過濾器”和“動作”。WordPress通過鉤子來運行插件。這些鉤子也可以用在主題中,參見主題開發(fā)一文中的“主題函數(shù)文件”部分。
注意:以上內(nèi)容適用于WordPress 1.2以及更高版本。在WordPress1.2之前的版本中,所有更改都被叫做“hacks”,且更改時都需要編輯WordPress的源代碼。
鉤子,動作與過濾器[ ]
WordPress用鉤子將插件“勾進”WordPress系統(tǒng)中,讓插件與WordPress相連接。也就是說,通過鉤子,WordPress能夠在特定時間內(nèi)調(diào)用插件中的函數(shù),讓插件開始運行。下面是鉤子的兩種形式:
- 動作(Actions):在系統(tǒng)運行的某些特定時間點或發(fā)生特定事件時,WordPress核心程序會調(diào)用一些鉤子。這里WordPress所調(diào)用的鉤子被稱為“動作”。插件用動作API來指定在上述特定時間點內(nèi)需要執(zhí)行的PHP函數(shù)。
- 過濾器(Filters):WordPress將不同類型文本添加到數(shù)據(jù)庫或發(fā)送給瀏覽器窗口前,需要調(diào)用一些鉤子來修改上述不同類型文本。這里WordPress所調(diào)用的鉤子被稱為“過濾器”。通過使用濾器API,插件可以執(zhí)行一個或多個PHP函數(shù)以修改上述不同類型文本。
有時我們可以直接通過動作或過濾器實現(xiàn)以上效果。例如,如果我們希望用插件來改變某篇日志內(nèi)容,可以為publish_post添加一個動作函數(shù)(保存到數(shù)據(jù)庫時修改日志),也可以為the_content添加一個過濾器函數(shù)(顯示到瀏覽器窗口時修改日志)。
Adam Brown's WP Hooks Database 中列出了WordPress中所有動作鉤子和過濾器鉤子。
函數(shù)引用[ ]
過濾器函數(shù)
- has_filters
- add_filter()
- apply_filters()
- current_filter
- merge_filters()
- remove_filter()
- remove_all_filters
動作函數(shù)
動作[ ]
動作由發(fā)生在WordPress中的特定事件觸發(fā),如發(fā)表日志、更改主題、顯示控制板頁面等。插件以執(zhí)行PHP函數(shù)的方式來響應該事件,函數(shù)的作用可能是:
- 更改數(shù)據(jù)庫資料
- 發(fā)送電子郵件消息
- 更改瀏覽器窗口上顯示的信息(網(wǎng)站管理員或終端用戶)
基本步驟如下(下文中有詳細介紹):
- 在插件文件中創(chuàng)建一個可以在事件發(fā)生時執(zhí)行的PHP函數(shù)
- 調(diào)用add_action,將動作函數(shù)勾入WordPress
- 將創(chuàng)建的PHP函數(shù)存放在插件文件中,激活該函數(shù)
創(chuàng)建動作函數(shù)[ ]
要在插件中新建一個動作函數(shù),首先要用插件中該動作的功能來創(chuàng)建一個PHP函數(shù),然后將函數(shù)存入插件文件(我們需要將插件文件放在wp-content/plugins目錄下)。例如,如果我們希望每次我們發(fā)表新日志,博客都會以電子郵件的方式通知我們的朋友,我們可以定義以下函數(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ù)動作函數(shù)都能接受一個參數(shù)(通常是日志ID或評論ID,取決于動作的性質(zhì))。有些動作函數(shù)能接收更多參數(shù)——更多信息請參照動作的說明文檔或WordPress源代碼。除參數(shù)外,我們也可以獲取WordPress的全局變量,調(diào)用其它WordPress函數(shù)(或插件文件中的函數(shù))。
函數(shù)輸出的內(nèi)容會出現(xiàn)在調(diào)用動作的頁面源代碼中。
注意:其它插件或WordPress核心文件中的函數(shù)可能已經(jīng)使用了我們所創(chuàng)建的函數(shù)名稱。詳細信息參見避免插件名稱沖突。
勾入WordPress(連接到WordPress程序中)[ ]
定義PHP函數(shù)后,我們要將函數(shù)連接到WordPress中。可以在插件文件的全局變量執(zhí)行域中調(diào)用add_action來實現(xiàn)連接:
add_action ( 'hook_name', 'your_function_name', [priority], [accepted_args] );
其中:
hook_name
WordPress動作鉤子的名稱,通過名稱我們可以了解到函數(shù)與什么事件相關聯(lián)。
your_function_name
hook_name指定事件后,需要執(zhí)行的函數(shù)名。函數(shù)需要是WordPress核心文件中的標準PHP函數(shù),或是我們在插件文件中定義的函數(shù)(如上文中定義的'email_friends')。
priority
用一個可選的整數(shù)型變量來規(guī)定函數(shù)(與特定動作相關聯(lián))的執(zhí)行順序,變量值默認為10。若某函數(shù)的priority值小于10,優(yōu)先執(zhí)行該函數(shù)。如果若干函數(shù)priority值相等,則按加入動作的順序執(zhí)行函數(shù)。
accept_args
用一個可選的整數(shù)型變量來定義函數(shù)能夠接受的參數(shù)數(shù)量(默認值為1)。有些鉤子能夠向函數(shù)傳遞一個以上參數(shù),因此accept_args實用價值較大。參數(shù)引進于WordPress 1.5.1。 根據(jù)上面的例子,我們要在插件文件中加入以下代碼行:
add_action ( 'publish_post', 'email_friends' );
同樣,我們也可以刪除動作鉤子中的動作。
安裝與激活[ ]
最后我們要安裝文件、激活插件以運行動作鉤子。我們要將創(chuàng)建的PHP函數(shù)和add_filter調(diào)用存入一個PHP文件并將該PHP文件安裝在wp-content/plugins目錄下。安裝完畢后,在WordPress的管理界面中激活插件;參見管理插件。
當前動作鉤子
插件API/常用動作(action)中列出了WordPress現(xiàn)有動作鉤子以及之前WordPress版本的鏈接。
過濾器(Filters)[ ]
過濾器是WordPres在運行中的特定時間點、對數(shù)據(jù)進行操作(如將數(shù)據(jù)加入數(shù)據(jù)庫,或?qū)?shù)據(jù)發(fā)送到瀏覽器窗口上)前,用來傳遞數(shù)據(jù)的函數(shù)。WordPress生成頁面時,過濾器位于數(shù)據(jù)庫和瀏覽器之間;當WordPress將新日志和評論加入到數(shù)據(jù)庫中時,過濾器位于瀏覽器和數(shù)據(jù)庫之間。WordPress中大多數(shù)輸入和輸出內(nèi)容都至少經(jīng)過一個過濾器的傳遞。默認情況下WordPress會執(zhí)行一些過濾行為,但插件也可以添加自己的過濾器函數(shù)。
將過濾器函數(shù)加入WordPress的基本步驟如下(下文中有詳細描述):
- 創(chuàng)建一個可以過濾數(shù)據(jù)的PHP函數(shù)
- 調(diào)用add_filter(),將過濾器函數(shù)勾入WordPress
- 將創(chuàng)建的PHP函數(shù)存放在插件文件中,激活該函數(shù)
創(chuàng)建過濾器函數(shù)[ ]
過濾器函數(shù)將未經(jīng)修改的數(shù)據(jù)作為輸入內(nèi)容,返回修改后的數(shù)據(jù)(有時會返回空值來表示該數(shù)據(jù)應該被刪除或忽略)。如果過濾器函數(shù)沒有對數(shù)據(jù)做修改,則應該返回原始數(shù)據(jù),方便插件必要時修改數(shù)據(jù)值。 因此要在插件中新建一個過濾器函數(shù),首先要創(chuàng)建一個PHP函數(shù)負責過濾,然后將該PHP函數(shù)存入插件文件(插件文件必須位于wp-content/plugins目錄下)。例如,如果希望我們的日志和評論中沒有褻瀆性語言,我們需要定義一個全局變量,列出所有不允許出現(xiàn)的詞語,然后創(chuàng)建PHP函數(shù):
function filter_profanity($content) { global $profanities; $content=str_ireplace($profanities,'{censored}',$content); return $content; }
為什么這里不用循環(huán)也可以?這是因為$profanities是一個數(shù)組, str_replace可以幫我們循環(huán)該數(shù)組。
注意:其它插件或WordPress核心文件中的函數(shù)可能已經(jīng)使用了我們所創(chuàng)建的函數(shù)名稱。詳細信息參見插件開發(fā)建議。
將過濾器勾入WordPress(連接到WordPress程序中)
定義PHP函數(shù)后,我們要將過濾器函數(shù)連接到WordPress中??梢栽诓寮募娜肿兞繄?zhí)行域中調(diào)用add_filter來實現(xiàn)連接:
add_filter ( 'hook_name', 'your_filter', [priority], [accepted_args] );
其中:
hook_name
WordPress過濾器鉤子的名稱,通過名稱我們可以了解到什么時候需要用到過濾器函數(shù)。
your_function_name
用于過濾的函數(shù)的名稱。函數(shù)需要是WordPress核心文件中的標準PHP函數(shù),或是我們在插件文件中定義的函數(shù)。
priority
用一個可選的整數(shù)型變量來規(guī)定函數(shù)(該函數(shù)與特定過濾器相關聯(lián))的執(zhí)行順序,變量值默認為10。若某函數(shù)的priority值小于10,優(yōu)先執(zhí)行該函數(shù)。如果若干函數(shù)priority值相等,則按加入過濾器的順序執(zhí)行函數(shù)。 accept_args
用一個可選的整數(shù)型變量來定義函數(shù)能夠接受的參數(shù)數(shù)量(默認值為1)。有些鉤子能夠向函數(shù)傳遞一個以上參數(shù),因此accept_args實用價值較大。 根據(jù)上面的例子,我們要在插件文件的主執(zhí)行區(qū)域中加入以下代碼行,讓WordPress過濾含有褻瀆性內(nèi)容的評論:
add_filter('comment_text','filter_profanity');
我們也可以用remove_filter()刪除過濾器鉤子中的過濾器函數(shù)。
安裝與激活[ ]
最后我們要安裝文件、激活插件以運行過濾器鉤子。我們要將創(chuàng)建的PHP函數(shù)和add_filter調(diào)用存入一個PHP文件并且將該PHP文件安裝在wp-content/plugins目錄下。安裝完畢后,在WordPress的管理界面中激活插件;參見管理插件。
當前過濾器鉤子[ ]
插件API/常用動作(action)中列出了WordPress現(xiàn)有過濾器鉤子以及之前WordPress版本的鏈接。
示例[ ]
這是wp-hackers郵件列表中的一個示例。該示例用一個插件來更改(或重寫)默認的bloginfo()函數(shù)。這將會修改核心函數(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; }
刪除動作和過濾器[ ]
有時我們可能會希望插件禁用WordPress內(nèi)置的、或者其它插件創(chuàng)建的某個動作或過濾器。這時可以調(diào)用 例如發(fā)表新日志時,用 注意,如果鉤子優(yōu)先級的值不是10,那么我們必須在調(diào)用remove_action時指定優(yōu)先級。一般來說,除非我們完全了解所要刪除的信息以及信息的作用,否則不能隨意刪除任何信息——可以查看WordPress源代碼或者其它插件源代碼以了解信息。
除了上面介紹的鉤子(動作和過濾器),我們還可以通過重寫WordPress函數(shù)來讓插件影響WordPress的運行。事實上,WordPress為插件提供了一個能夠重新定義的小型函數(shù)集。函數(shù)集中的函數(shù)被稱為可插入式函數(shù),存儲在wp-includes/pluggable.php下。如果所有插件都加載完畢后,可插入式函數(shù)仍然處于未定義狀態(tài),這時WordPress會加載這些函數(shù)。更多信息參見 wp-settings.php。
可插入式函數(shù)[ ]
相關條目[ ]