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

WordPress:Writing a Plugin

來(lái)自站長(zhǎng)百科
Sutrong討論 | 貢獻(xiàn)2008年5月27日 (二) 11:01的版本
(差異) ←上一版本 | 最后版本 (差異) | 下一版本→ (差異)
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索

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

介紹[ ]

WordPress 1.2版本之前,如果你想要修改WordPress行為,你必須編輯(或者 "hack") WordPress 源代碼。盡管如此,在更多的現(xiàn)行WordPress版本中 ,你可以通過(guò)使用插件很容易的修改添加核心功能?;镜牟寮Y(jié)構(gòu)的想法是保持WordPress核心相關(guān)內(nèi)容的簡(jiǎn)潔,但是富有靈活性,足以使各個(gè)輸入輸出方面可以通過(guò)插件來(lái)修改。下面是定義:

WordPress 插件
WordPress 插件是一個(gè)程序,或者是一組或更多函數(shù),由PHP腳本語(yǔ)言編寫(xiě),添加某種特殊的功能或者服務(wù)到WordPress weblog,使用接入點(diǎn)和WordPress Plugin Application Program Interface (API) 提供的方法,可以與weblog很好的結(jié)合在一起。

如果你發(fā)現(xiàn)你希望WordPress能擁有一些新的或者改良的功能,第一件事就是搜索各種插件庫(kù)(你可以從 插件文章中了解),然后看是否某人已經(jīng)創(chuàng)建了這樣的適合你的需要的插件。如果沒(méi)有,本文將指導(dǎo)你如何創(chuàng)建你自己的插件的過(guò)程。

本文假設(shè)你已經(jīng)熟悉基本的WordPress功能以及 PHP編程。

資源[ ]

  • 有很多插件開(kāi)發(fā)者的的全面的文章列表和資源,插件資源中包括有關(guān)編寫(xiě)插件的外部文章以及關(guān)于特別話題的文章。
  • 另外一個(gè)了解有關(guān)插件的好方法是看寫(xiě)的好的插件的PHP 源代碼,如 Hello Dolly, 一個(gè)分布式插件。
  • 一旦你寫(xiě)了插件,閱讀插件提交和宣傳來(lái)學(xué)習(xí)如何讓它更廣泛的散布開(kāi)來(lái)。

創(chuàng)建插件[ ]

本部分進(jìn)入你需要遵守的幾個(gè)步驟,和一些考慮什么時(shí)候建立一個(gè)結(jié)構(gòu)良好的 WordPress插件。

名字,文件和位置[ ]

插件名字[ ]

創(chuàng)建插件的第一個(gè)任務(wù)是想出插件要做什么,然后起一個(gè)(希望是唯一的)名字。 查看插件 和其他的相關(guān)庫(kù),驗(yàn)證你的名字是唯一的;你也可以使用Google搜索。 多數(shù)插件開(kāi)發(fā)者選擇使用能描述插件功能的那個(gè)名字; 如,一個(gè)聯(lián)系到天氣的插件可能含有單詞"weather"在名字中。名字可以是好幾個(gè)詞。

插件文件[ ]

下一步是創(chuàng)建PHP文件,文件名由你選擇的插件名衍生而來(lái)。如,如果你的插件叫做"Fabulous Functionality",你可以把你的PHP文件起名為 fabfunc.php。試著取一個(gè)唯一的名字。人們安裝你的插件的時(shí)候會(huì)把這個(gè)PHP文件放到WordPress插件目錄中,wp-content/plugins/,所以沒(méi)有兩個(gè)不同的在使用的插件擁有相同的PHP文件名。

另外一個(gè)操作是把你的插件分成幾個(gè)文件,你的插件至少要有一個(gè)PHP 文件,它可以包含JavaScript文件,CSS文件,圖片文件和語(yǔ)言文件等等。如果有幾種文件選擇了唯一的文件夾和主PHP文件名字,如fabfuncfabfunc.php,就把所有的插件文件放到這個(gè)目錄下,然后告訴你的插件用戶安裝整個(gè)目錄到wp-content/plugins/下。

在這個(gè)文章的其余部分,"插件PHP文件"引用了主插件PHP文件,可以在 wp-content/plugins/ 或者一個(gè)子目錄下

自述文件[ ]

如果你想在http://wordpress.org/extend/plugins/上建立一個(gè)插件主機(jī),你還需要用標(biāo)準(zhǔn)格式創(chuàng)建readme.txt文件,把它放到你的插件中去。參見(jiàn) http://wordpress.org/extend/plugins/about/readme.txt 獲得這格式的描述.

主頁(yè)[ ]

創(chuàng)建一個(gè)網(wǎng)頁(yè)來(lái)作為你的插件的主頁(yè)也是非常有用的。這個(gè)頁(yè)面可以描述如何安裝插件,它可以做些什么,兼容WordPress 的哪個(gè)版本,版本更替的時(shí)候你的插件做出了哪些改動(dòng),如何使用插件等等。

文件標(biāo)題[ ]

現(xiàn)在開(kāi)始在你的插件的主PHP文件中添加信息。

標(biāo)準(zhǔn)插件信息[ ]

插件主PHP文件的頂部必須包含一個(gè)標(biāo)準(zhǔn)插件信息標(biāo)題。這個(gè)標(biāo)題讓W(xué)ordPress 識(shí)別你的插件存在,添加到插件管理界面以便激活,載入,運(yùn)行; 沒(méi)有標(biāo)題,你的插件將不會(huì)被激活也不會(huì)運(yùn)行,如下是標(biāo)題格式:

<?php
/*
Plugin Name: Name Of The Plugin
Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
Description: A brief description of the plugin.
Version: The plugin's Version Number, e.g.: 1.0
Author: Name Of The Plugin Author
Author URI: http://URI_Of_The_Plugin_Author
*/
?>

WordPress需要用來(lái)識(shí)別你的插件的最小信息是Plugin Name這行,其他信息(如果出現(xiàn)的話) 將用來(lái)創(chuàng)建插件管理界面上的插件表格。這些行的順序并不重要。

許可[ ]

根據(jù)帶有許可信息這個(gè)標(biāo)準(zhǔn)標(biāo)題是個(gè)慣例。多數(shù)插件使用WordPress 使用的GPL 許可,或者是一個(gè) compatible with the GPL的許可。簡(jiǎn)要說(shuō)明下GPL許可,在你的插件中添加如下幾行:

<?php
/*  Copyright YEAR  PLUGIN_AUTHOR_NAME  (email : PLUGIN AUTHOR EMAIL)

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/
?>

規(guī)劃你的插件[ ]

現(xiàn)在是該讓你的插件做些什么的時(shí)候了。這個(gè)部分包含了一些一般的關(guān)于插件開(kāi)發(fā)的思想,描述了如何完成你的插件需要完成的幾個(gè)任務(wù)。

WordPress 插件 Hooks[ ]

很多插件通過(guò)連接一個(gè)或者多個(gè)的WordPress 插件 "hooks"來(lái)完成它們的目標(biāo)。 插件hooks的工作方式是在WordPress運(yùn)行的時(shí)候,在各個(gè)不同的時(shí)候,WordPress檢查是否有插件在那時(shí)有注冊(cè)過(guò)的函數(shù)在此刻運(yùn)行,如果有的話,函數(shù)運(yùn)行。三個(gè)函數(shù)更改WordPress的默認(rèn)行為。

例如,在WordPress添加文章標(biāo)題到瀏覽器輸出的時(shí)候,首先檢查是否有任何插件為"filter"hook注冊(cè)了一個(gè)函數(shù)叫做"the_title"。如果有,標(biāo)題文字會(huì)被每個(gè)注冊(cè)函數(shù)按順序傳遞,最終結(jié)果就是打印出來(lái)的結(jié)果。這樣,如果你的插件需要添加一些信息到打印標(biāo)題,它可以注冊(cè)一個(gè)"the_title" filter函數(shù).

另一個(gè)例子是"action" hook,叫做"wp_footer"。在WordPress生成的HTML頁(yè)面的底部,它檢查看是否某個(gè)插件已經(jīng)為 "wp_footer" action hook注冊(cè)函數(shù),然后依次運(yùn)行。

你可以了解更多關(guān)于如何為filter 和 action hooks注冊(cè)函數(shù),什么插件hooks在WordPress和在插件API中可用。如果你在WordPress代碼中發(fā)現(xiàn)一個(gè)你想使用action或者filter的地方,但是WordPress沒(méi)有,你可以建議使用新的hooks (建議通常都會(huì)被采納); 如何建議參見(jiàn)提交錯(cuò)誤。

模板標(biāo)簽[ ]

另外一種用插件添加WordPress功能的方法是通過(guò)建立自定義 模板標(biāo)簽。有人想使用你的插件添加這些 "標(biāo)簽"到他們的主題,邊欄,文章目錄或者其他任何合適的地方。例如,添加地理標(biāo)簽到文章中的插件,可以為邊欄定義一個(gè)叫做geotag_list_states()的模板標(biāo)簽函數(shù),列出所有的有關(guān)國(guó)家,并帶有國(guó)家歸檔頁(yè)面的鏈接。

想要定義一個(gè)模板標(biāo)簽,需要簡(jiǎn)單的寫(xiě)一個(gè)PHP 函數(shù)并為插件用戶在插件主頁(yè)或者是插件PHP主文件中寫(xiě)下資料說(shuō)明。在給函數(shù)做資料說(shuō)明時(shí),給出一個(gè)具體需要加入什么到主題文件中以使用函數(shù)的例子是個(gè)不錯(cuò)的想法包括 <?php?>.

保持插件數(shù)據(jù)到數(shù)據(jù)庫(kù)[ ]

大多數(shù)插件需要從站長(zhǎng)或者blog用戶得到一些信息并保存在sessions中,為了在它的filter 函數(shù), action 函數(shù)和模板函數(shù)中使用。這個(gè)信息必須保存在WordPress 數(shù)據(jù)庫(kù)中,為了在sessions中可以持久穩(wěn)定。有兩種基本方法可以保存插件數(shù)據(jù)到數(shù)據(jù)庫(kù)中:

  1. 使用WordPress "操作"機(jī)制(下有描述)。這個(gè)方法適合儲(chǔ)存相關(guān)的小量靜態(tài)的指定的數(shù)據(jù) – 那種你希望在第一次設(shè)置插件時(shí)站長(zhǎng)輸入的,今后幾乎不會(huì)更改的數(shù)據(jù)。
  2. 創(chuàng)建一個(gè)新的自定義的數(shù)據(jù)庫(kù)表格。這種方法適合聯(lián)合單獨(dú)的文章,頁(yè)面,附件或者評(píng)論的數(shù)據(jù)—一種隨著時(shí)間而增加的,沒(méi)有單獨(dú)的名字的數(shù)據(jù)。參見(jiàn) 創(chuàng)建插件表格.

WordPress 操作機(jī)制[ ]

參見(jiàn)創(chuàng)建操作頁(yè)面 得到關(guān)于如何創(chuàng)建自動(dòng)為你保存操作的頁(yè)面的信息。

WordPress有一個(gè)保存,更新,重新得到個(gè)體, 制定的數(shù)據(jù)("操作")機(jī)制,在 WordPress 數(shù)據(jù)庫(kù)中。操作值可以是字符串,數(shù)組或者是PHP對(duì)象(它們將被 "連載",或者在存儲(chǔ)前轉(zhuǎn)變?yōu)樽址谥匦碌玫絺€(gè)體時(shí)反連載)。操作名字是字符串,它們必須是唯一的,這樣它們不會(huì)與其他 WordPress或者是插件起沖突。

這里是你的插件可以用來(lái)進(jìn)入WordPress操作的主要函數(shù)。

add_option($name, $value, $description, $autoload);
創(chuàng)建一個(gè)新選項(xiàng);如果選項(xiàng)存在就什么都不做
$name
Required (string). 將被添加的選項(xiàng)名字
$value
Optional (string), 默認(rèn)為空的字符串。 將被存儲(chǔ)的選項(xiàng)值
$description
Optional (string), 默認(rèn)為空的字符串。選項(xiàng)的描述,被放在wordpress數(shù)據(jù)庫(kù)中以防某些人瀏覽數(shù)據(jù)庫(kù)去看選項(xiàng)在哪。
$autoload
選項(xiàng),默認(rèn)為'yes' (enum: 'yes' or 'no').如果設(shè)置為'yes',那么設(shè)置被get_alloptions函數(shù)自動(dòng)檢索。
get_option($option);
從數(shù)據(jù)庫(kù)中檢索一個(gè)選項(xiàng)值
$option
Required (string). 你想要返回的選項(xiàng)值的選項(xiàng)的名稱(chēng)。你能夠找到被安裝在相關(guān)選項(xiàng)中的一列默認(rèn)選項(xiàng)
update_option($option_name, $newvalue);
在數(shù)據(jù)庫(kù)里更新或者創(chuàng)建一個(gè)選項(xiàng)值(注:如果你不想使用$description 或者 $autoload參數(shù),add_option就沒(méi)必要被訪問(wèn)。)
$option_name
Required (string). 選項(xiàng)名稱(chēng)更新。
$newvalue
Required. 為選項(xiàng)賦予新的值。

管理面板[ ]

假設(shè)你的插件有一些操作存儲(chǔ)在WordPress數(shù)據(jù)庫(kù)中 (參見(jiàn)上面的部分),你也許希望有一個(gè)管理面板,允許你的插件用戶來(lái)查看和編輯操作。方法可以在 添加管理目錄中找到。

讓你的插件國(guó)際化[ ]

一旦你插件的程序完成了,另一個(gè)需要考慮的是(假設(shè)你打算發(fā)布你的插件) 國(guó)際化. 國(guó)際化是建立軟件的一個(gè)過(guò)程,這樣它才可以本地化 ;本地化是翻譯軟件的顯示文本為其他語(yǔ)言。WordPress是全世界使用的,所以它有國(guó)際化和本地化版本,包括本地化的插件。想要知道關(guān)于WordPress的 GNU gettext的本地化使用,參見(jiàn)WordPress:Translating WordPress.

強(qiáng)力推薦你國(guó)際化你的插件,這樣來(lái)自不同國(guó)家的用戶,可以本地化插件,過(guò)程如下:

  • 給插件選擇一個(gè)翻譯"文本區(qū)域"名字。這通常和你的插件文件名字一樣(除了 .php), 而且必須是用戶安裝過(guò)的插件中唯一的。
  • 不論在哪里插件使用的顯示給用戶的文本(即"消息"), 使用一個(gè)或者兩個(gè) WordPress gettext 函數(shù)把它們包圍起來(lái)。注意在插件中,你需要使用第二種方法,你選擇的翻譯文本區(qū)域名字中的傳遞,不像WordPress核心(留下 $domain 這部分空白).
__($message, $domain)
使用現(xiàn)有本地$domain翻譯 $message。換行你將要用來(lái)用這個(gè)函數(shù)計(jì)算的文字字符串。
_e($message, $domain)
使用現(xiàn)有本地$domain翻譯 $message, 然后在屏幕上顯示出來(lái),給你使用這個(gè)函數(shù)直接顯示出的文本字符串換行。


  • 創(chuàng)建一個(gè)POT文件(翻譯目錄列出了所有的可以翻譯的信息),隨著你的插件分發(fā)出去。用戶將需要把他們的翻譯過(guò)的MO文件放在你的插件的PHP文件的同一目錄下,命名為domain-ll_CC.mo,那里ll_CC是本地文件的名字。參見(jiàn)翻譯WordPress以獲得關(guān)于POT文件,MO文件和本地文件的信息。
  • 通過(guò)在調(diào)用gettext函數(shù)之前調(diào)用load_plugin_textdomain為現(xiàn)有本地文件和你的文本區(qū)域文件載入翻譯,在session中越晚越好,(因?yàn)橐恍┒嗾Z(yǔ)言插件載入時(shí)改變了本地文件)。一個(gè)可能的辦法是定義一個(gè)初始化函數(shù),在所有插件函數(shù)之前調(diào)用,如,假設(shè)你的文本區(qū)域是"fabfunc":
$fabfunc_domain = 'fabfunc';
$fabfunc_is_setup = 0;

function fabfunc_setup()
{
   global $fabfunc_domain, $fabfunc_is_setup;

   if($fabfunc_is_setup) {
      return;
   } 

   load_plugin_textdomain($fabfunc_domain, 'wp-content/plugins');
}

If your plugin is in its own subdirectory, append that to the second argument of load_plugin_textdomain

如果你閱讀了這個(gè)部分因?yàn)槟阆胍獓?guó)際化一個(gè)主題,你大體上可以按照上面的步驟來(lái),除非:

  • MO文件在主題目錄中(與style.css同樣的位置).
  • MO 文件命名為ll_CC.mo, ll_CC是本地文件名(這個(gè)域不是文件名字的一部分).
  • 想要載入文本域,加入如下代碼(在某個(gè)PHP 溢出,如果需要的話) 到你的主題的functions.php文件:
load_theme_textdomain('your_domain');

插件開(kāi)發(fā)建議[ ]

最后一部分包括一些關(guān)于插件開(kāi)發(fā)的建議。

  • 插件代碼應(yīng)該遵循 WordPress編碼標(biāo)準(zhǔn)。請(qǐng)參照內(nèi)嵌文檔標(biāo)準(zhǔn)。
  • 所有的插件中的函數(shù)需要有唯一的名字,因?yàn)檫@個(gè)原因,在所有插件函數(shù)中使用唯一的函數(shù)名字前綴是個(gè)很好的主意。另一個(gè)可能性是在類(lèi)中定義你的插件函數(shù)(也需要有唯一名字).
  • 不要把WordPress數(shù)據(jù)庫(kù)表格前綴(通常是"wp_")放入你的插件中。確認(rèn)使用不同的$wpdb->前綴來(lái)代替。
  • 數(shù)據(jù)庫(kù)閱讀很簡(jiǎn)單但是寫(xiě)確很難,數(shù)據(jù)庫(kù)是非常善于取數(shù)據(jù)給你,而且這些操作(通常是)如閃電般迅速。在數(shù)據(jù)庫(kù)中做改動(dòng),卻是一個(gè)復(fù)雜的多的過(guò)程,很難。所以試著最小化寫(xiě)入的數(shù)量。首先在你的代碼中準(zhǔn)備好一切,這樣你只需要選擇那些你需要的寫(xiě)操作。
  • 只選擇你需要的。盡管數(shù)據(jù)庫(kù)取數(shù)據(jù)非常快,你需要試著減少數(shù)據(jù)庫(kù)的負(fù)載,通過(guò)只選擇你需要的數(shù)據(jù)。如果你需要知道一個(gè)表格有多少行,不要SELECT * FROM,因?yàn)樗行兄械乃袛?shù)據(jù)都會(huì)被牽扯到,浪費(fèi)內(nèi)存。這樣,如果你只需要插件中的post_id 和post_author,只要SELECT那些特定的區(qū)域,來(lái)減小數(shù)據(jù)庫(kù)負(fù)載。記住: 大量的其他進(jìn)程可能同時(shí)需要使用數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)和服務(wù)器每個(gè)都有大量的資源供這些進(jìn)程使用。了解如何減小你的插件需要的資源會(huì)保證你的插件不會(huì)是被人說(shuō)成濫用資源的哪種。


外部資源[ ]