WordPress 是用 PHP 編寫的一個 Web 發布平台,存儲部分使用的是 MySQL。它的可擴展性表現在通過構建插件可以添加過濾器和行為。Eclipse PHP Development Tools (PDT) V2.0 項目允許您使用 Eclipse 來構建 PHP 應用程序。在本文中,您將學習如何通過使用 PDT 構建插件來擴展 WordPress。
Eclipse PDT V2.0 項目是最近才發布的。與先前的版本相比,它增加了一些新的可用性特性,包括添加構建路徑、打開類型和訪問改進了的代碼幫助的功能。
本文將演示如何下載並安裝 WordPress 以及如何用 Eclipse PDT 構建插件。另外還演示了如何從 Eclipse 導出插件以便共享。
要想更好地學習本文,需要安裝以下工具:
WordPress 概述
WordPress 是用 PHP 編寫的一個發布平台,藉助它,可以快速便捷地向 Web 發布內容。它具有高度的可擴展性,可以在這個平台上創建出具有任意功能的插件。自 2005 年來,有上百萬的 WordPress 拷貝被大公司及個人下載並使用。
WordPress 很容易安裝和配置,並且要求很少:只需 PHP 和 MySQL。要安裝 WordPress,只需從 Web 站點下載 ZIP 文件(參見 參考資料),然後將 ZIP 解壓縮到可從 Web 伺服器訪問到的一個目錄下即可。本文中,我們採用的這個 Web 伺服器已被配置成允許向該 Web 伺服器發布此用戶目錄(類似 Apache 中的 userdir 模塊)。如果願意,可以重命名這個目錄:這裡,我將名稱從 wordpress 改為了 blog。
在完成解壓縮和重命名目錄后,請遵照 “Famous 5-Minute Install” 的指導(參見 參考資料)進行操作。如果您的 ISP 支持 WordPress 的需求,那麼您就可以在本地開發,然後將整個目錄 FTP 到您的站點。
擴展 WordPress
很多人都習慣使用 WordPress 撰寫博客,但是實際上它可以用來輕鬆發布任何內容。我接觸過很多用 WordPress 作為主要引擎來託管產品信息類站點的網站,這些站點往往還包括有論壇、反饋表及首頁上的 Adobe® Flash® 動畫。
針對 WordPress,有很多插件可用(參見 參考資料)。這些插件的範圍很廣,從添加定製欄位來收集更多關於該 WordPress 站點註冊用戶信息的功能,到標記雲(tag clouds)、反垃圾郵件實用程序,再到能生成指向諸如 Facebook、MySpace、del.icio.us 和 Technorati 這類流行站點的 “Share this” 鏈接的聯繫插件。
但即使有了這些插件,還是會出現需要通過擴展 WordPress 來滿足具體需要的情況。本文後面的部分將展示如何用 Eclipse 和 PDT 建立一個可以在其中開發並測試 WordPress 插件的開發環境。
建立自已的工作區
在建立工作區之前,請確認已經安裝並運行了 WordPress。此外,還需要對 WordPress 目錄有讀寫的訪問權。最好的情況是在您自己的機器上使用在 Web 伺服器上已經配置了的用戶目錄,以便能將文件放入您自己的根目錄下。但一個共享的目錄也是可以的,只要您可以對它進行讀寫操作。
在繼續進行前,先在 WordPress_home/wp-content/plugins 目錄(其中,WordPress_home 是 WordPress 解壓縮后所處的那個目錄的完整路徑)內創建一個目錄 — 例如, WordPress home/wp-content/plugins/myplugin。之後,新 WordPress 插件都將被存放在這個目錄之下。
如果已經安裝並運行了 WordPress,並且可以對剛剛為插件創建的這個目錄進行讀寫,那麼就可以著手為 WordPress 插件創建一個新項目了:
創建項目后,WordPress_home/wp-content/plugins/myplugin 目錄的目錄列表應類似清單 1。
drwxr-xr-x 7 user user 238 Feb 3 11:02 . drwxr-xr-x@ 5 user user 170 Feb 3 08:39 .. -rw-r--r-- 1 user user 259 Feb 3 11:10 .buildpath -rw-r--r-- 1 user user 30244 Feb 3 11:02 .pmd -rw-r--r-- 1 user user 496 Feb 3 08:39 .project drwxr-xr-x 3 user user 102 Feb 3 08:39 .settings -rw-r--r-- 1 user user 795 Feb 3 11:13 myplugin.php |
在一個團隊環境中工作
假如您正在一個團隊環境中工作並在共享您的代碼,那麼 Eclipse 工具會負責將文件從正確的目錄登記到源代碼控制存儲庫內。然而,請留意文件在其中被從團隊共享環境導入到您的工作區的這個目錄。當從一個源代碼控制存儲庫導出文件並導入到您的工作區時,您可以定義這些文件的存儲位置(參見圖 3)。要獲得更多關於 Eclipse 與源代碼存儲庫如何聯合使用的信息,請參見 參考資料。
向構建路徑中添加 WordPress
PDT 項目提供了向構建路徑添加文件夾的功能,它同時也使代碼完成工具能夠用於 WordPress。為了查看在代碼完成工具中的 add_filter 與 add_action 函數,可以修改構建路徑以添加 WordPress wp-includes 目錄。
要想將 WordPress wp-includes 目錄添加到構建路徑,在 PHP 項目被突出顯示的同時選擇 Project > Properties 。在 Libraries 選項卡上,單擊 Add External Source Folder,然後瀏覽到在安裝 WordPress 的位置中找到的這個 wp-includes 目錄。完成後,單擊 OK。現在,可以在 PHP 編輯器中鍵入 add_ 並調用代碼完成功能,之後將看到一個包括 add_action 與 add_filter 的列表。
添加第一個插件文件
要添加第一個插件文件,可以選擇 File > New > PHP File。第一個文件的名稱要與此文件所在目錄的名稱一樣。例如,如果插件目錄的名稱是 myplugin,那麼此文件就應該命名為 myplugin.php。WordPress 會讀取該文件以獲得插件信息並註冊擴展點。
為了使 WordPress 能夠識別插件,需要向新的插件文件中粘貼一個註釋塊。如果創建的 WordPress 插件很多,不妨考慮把這個代碼塊放入 PHP 的代碼模板中。清單 2 就是一個完成了的代碼塊。
/* Plugin Name: My Plugin Plugin URI: http://www.example.com/myplugin Description: This is a really great plugin that extends WordPress. Version: 1.0.0 Author: Nathan A. Good Author URI: http://www.nathanagood.com */ |
此時,該插件不做任何事情。它將被顯示在 WordPress 的插件管理區內,不過只有這個註釋塊。要查看這個新插件,請用管理員身份登錄到 WordPress 實例,然後單擊 Plugins。應該會看到這個新插件被列在 Inactive Plugins 的下面。
添加功能性
本文中,我將添加兩種功能。第一個功能很簡單,就是讓博客條目標題全部大寫。這是一個添加過濾器 的示例。第二個功能是在用戶註冊表的末尾添加一個額外欄位。這是一個添加動作 的示例。
下面我要用函數性代碼編寫這兩個示例以使其儘可能地簡單。記住:若使用的是 PHP V5 或更新的版本,就可以融入面向對象的概念以使代碼更易於讀懂和維護。有關如何用面向對象編程的概念和設計模式編寫更易於維護的 PHP 的詳細信息,請參見 參考資料。
大寫的標題
清單 3 所示的是標題過濾器的代碼。其中,使用了 PHP 中的 strtoupper() 函數以使此博客的標題變為大寫。
/** * Capitalizes the title given by $title. */ function capitalizeTitle($title) { return strtoupper($title); } |
寫完這個函數后,需要調用 add_filter 以在 WordPress 中將此函數註冊為特定的過濾器擴展點。參考資料 中提供了所有可用過濾器的清單的一個鏈接。下面是一個添加過濾器的示例。
/* now add the filter */ add_filter('the_title', 'capitalizeTitle'); |
添加註冊欄位
清單 5 所示的代碼可以生成一個新的定製註冊欄位。我用這個 Firebug 擴展來查看現有註冊表單欄位的 CSS(Cascading Style Sheet)樣式,以確保我的定製欄位具有相同的 CSS 樣式類。
/** * Adds a custom field that prompts the user for their favorite * color. * @return void */ function drawCustomField() { echo '<p><label>Favorite Color:<br />'; echo '<input autocomplete="off" class="input" name="fav_color" '; echo ' id="fav_color" size="25"'; echo ' value="' .WordPress 是用 PHP 編寫的一個 Web 發布平台,存儲部分使用的是 MySQL。它的可擴展性表現在通過構建插件可以添加過濾器和行為。Eclipse PHP Development Tools (PDT) V2.0 項目允許您使用 Eclipse 來構建 PHP 應用程序。在本文中,您將學習如何通過使用 PDT 構建插件來擴展 WordPress。
WordPress 概述 WordPress 是用 PHP 編寫的一個發布平台,藉助它,可以快速便捷地向 Web 發布內容。它具有高度的可擴展性,可以在這個平台上創建出具有任意功能的插件。自 2005 年來,有上百萬的 WordPress 拷貝被大公司及個人下載並使用。 WordPress 很容易安裝和配置,並且要求很少:只需 PHP 和 MySQL。要安裝 WordPress,只需從 Web 站點下載 ZIP 文件(參見 參考資料),然後將 ZIP 解壓縮到可從 Web 伺服器訪問到的一個目錄下即可。本文中,我們採用的這個 Web 伺服器已被配置成允許向該 Web 伺服器發布此用戶目錄(類似 Apache 中的 userdir 模塊)。如果願意,可以重命名這個目錄:這裡,我將名稱從 wordpress 改為了 blog。 在完成解壓縮和重命名目錄后,請遵照 “Famous 5-Minute Install” 的指導(參見 參考資料)進行操作。如果您的 ISP 支持 WordPress 的需求,那麼您就可以在本地開發,然後將整個目錄 FTP 到您的站點。 擴展 WordPress 很多人都習慣使用 WordPress 撰寫博客,但是實際上它可以用來輕鬆發布任何內容。我接觸過很多用 WordPress 作為主要引擎來託管產品信息類站點的網站,這些站點往往還包括有論壇、反饋表及首頁上的 Adobe® Flash® 動畫。 針對 WordPress,有很多插件可用(參見 參考資料)。這些插件的範圍很廣,從添加定製欄位來收集更多關於該 WordPress 站點註冊用戶信息的功能,到標記雲(tag clouds)、反垃圾郵件實用程序,再到能生成指向諸如 Facebook、MySpace、del.icio.us 和 Technorati 這類流行站點的 “Share this” 鏈接的聯繫插件。 但即使有了這些插件,還是會出現需要通過擴展 WordPress 來滿足具體需要的情況。本文後面的部分將展示如何用 Eclipse 和 PDT 建立一個可以在其中開發並測試 WordPress 插件的開發環境。 建立自已的工作區 在建立工作區之前,請確認已經安裝並運行了 WordPress。此外,還需要對 WordPress 目錄有讀寫的訪問權。最好的情況是在您自己的機器上使用在 Web 伺服器上已經配置了的用戶目錄,以便能將文件放入您自己的根目錄下。但一個共享的目錄也是可以的,只要您可以對它進行讀寫操作。 在繼續進行前,先在 WordPress_home/wp-content/plugins 目錄(其中,WordPress_home 是 WordPress 解壓縮后所處的那個目錄的完整路徑)內創建一個目錄 — 例如, WordPress home/wp-content/plugins/myplugin。之後,新 WordPress 插件都將被存放在這個目錄之下。 如果已經安裝並運行了 WordPress,並且可以對剛剛為插件創建的這個目錄進行讀寫,那麼就可以著手為 WordPress 插件創建一個新項目了:
創建項目后,WordPress_home/wp-content/plugins/myplugin 目錄的目錄列表應類似清單 1。 清單 1. 新 myplugin 目錄的內容
在一個團隊環境中工作 假如您正在一個團隊環境中工作並在共享您的代碼,那麼 Eclipse 工具會負責將文件從正確的目錄登記到源代碼控制存儲庫內。然而,請留意文件在其中被從團隊共享環境導入到您的工作區的這個目錄。當從一個源代碼控制存儲庫導出文件並導入到您的工作區時,您可以定義這些文件的存儲位置(參見圖 3)。要獲得更多關於 Eclipse 與源代碼存儲庫如何聯合使用的信息,請參見 參考資料。 圖 3. 顯示在 WordPress 管理員面板內的插件 向構建路徑中添加 WordPress PDT 項目提供了向構建路徑添加文件夾的功能,它同時也使代碼完成工具能夠用於 WordPress。為了查看在代碼完成工具中的 add_filter 與 add_action 函數,可以修改構建路徑以添加 WordPress wp-includes 目錄。 要想將 WordPress wp-includes 目錄添加到構建路徑,在 PHP 項目被突出顯示的同時選擇 Project > Properties 。在 Libraries 選項卡上,單擊 Add External Source Folder,然後瀏覽到在安裝 WordPress 的位置中找到的這個 wp-includes 目錄。完成後,單擊 OK。現在,可以在 PHP 編輯器中鍵入 add_ 並調用代碼完成功能,之後將看到一個包括 add_action 與 add_filter 的列表。 添加第一個插件文件 要添加第一個插件文件,可以選擇 File > New > PHP File。第一個文件的名稱要與此文件所在目錄的名稱一樣。例如,如果插件目錄的名稱是 myplugin,那麼此文件就應該命名為 myplugin.php。WordPress 會讀取該文件以獲得插件信息並註冊擴展點。 為了使 WordPress 能夠識別插件,需要向新的插件文件中粘貼一個註釋塊。如果創建的 WordPress 插件很多,不妨考慮把這個代碼塊放入 PHP 的代碼模板中。清單 2 就是一個完成了的代碼塊。 清單 2. 能識別插件的註釋塊
此時,該插件不做任何事情。它將被顯示在 WordPress 的插件管理區內,不過只有這個註釋塊。要查看這個新插件,請用管理員身份登錄到 WordPress 實例,然後單擊 Plugins。應該會看到這個新插件被列在 Inactive Plugins 的下面。 圖 4. 在從源代碼控制存儲庫導入時定義源位置 添加功能性 本文中,我將添加兩種功能。第一個功能很簡單,就是讓博客條目標題全部大寫。這是一個添加過濾器 的示例。第二個功能是在用戶註冊表的末尾添加一個額外欄位。這是一個添加動作 的示例。 下面我要用函數性代碼編寫這兩個示例以使其儘可能地簡單。記住:若使用的是 PHP V5 或更新的版本,就可以融入面向對象的概念以使代碼更易於讀懂和維護。有關如何用面向對象編程的概念和設計模式編寫更易於維護的 PHP 的詳細信息,請參見 參考資料。 大寫的標題 清單 3 所示的是標題過濾器的代碼。其中,使用了 PHP 中的 strtoupper() 函數以使此博客的標題變為大寫。 清單 3. 使標題變成大寫的函數
寫完這個函數后,需要調用 add_filter 以在 WordPress 中將此函數註冊為特定的過濾器擴展點。參考資料 中提供了所有可用過濾器的清單的一個鏈接。下面是一個添加過濾器的示例。 清單 4. 用 add_filter 添加過濾器
添加註冊欄位 清單 5 所示的代碼可以生成一個新的定製註冊欄位。我用這個 Firebug 擴展來查看現有註冊表單欄位的 CSS(Cascading Style Sheet)樣式,以確保我的定製欄位具有相同的 CSS 樣式類。 清單 5. 新的定製欄位動作
要添加這個定製動作,可以使用如下代碼。 清單 6. 用 add_action 添加動作
這個動作只在表單上繪出此欄位。當用戶提交此表單時,它並不實際保存數據。要想保存數據,需要使用 profile_update 動作。有關所有可用操作的詳細列表及各自的功能,請參看 參考資料。 測試插件 在項目內放入代碼后,就可以開始測試插件了。在測試前,需要在 WordPress 內啟用插件。以管理員身份登錄到 WordPress,然後單擊 Plugins。找到插件,然後單擊 Activate。 激活插件后,進入博客的首頁。應該可以看到 “Hello World!” 示例標題現在全部都是大寫字母了。如果禁用該插件,那麼它將還原回普通的大小寫的情況。利用這個功能還可以做一些其他的事情,比如將標題中的 URL 轉為超鏈接。此外,也可以添加具有同樣名稱的多個過濾器,所以與其創建一個功能全面的過濾器,不如考慮創建多個小的、功能集中的功能塊並將它們連接在一起。 要測試插件的註冊欄位部分,必須以管理用戶身份登錄到 WordPress 並啟用允許用戶在 Settings 頁面註冊的特性。啟用這個選項后,在進入到這個註冊頁面時,就會看到 Favorite Color 欄位。 WordPress 的其他擴展點 除了添加過濾器和動作外,還可以覆蓋 WordPress 內的函數。覆蓋的函數均在 WordPress 主目錄中的 pluggable.php 文件內定義。wp_mail 是其中的一個例子,可用來為用戶發送電子郵件。很多可覆蓋的函數都會處理用戶授權,比如登錄、設置 cookie 以及發送不同事件的通知。通過覆蓋基於授權的函數,就可以構建一些插件,而這些插件能為 WordPress 提供另一種身份驗證和授權方式,比如針對一個企業用戶組織的身份驗證。 導出插件 在編寫和仔細測試了插件之後,有可能還會想要與他人共享。大多數 WordPress 插件與 WordPress 本身一樣,都只打包成一個 ZIP 文件,這個文件可被擴展和複製到 WordPress 插件目錄。 可以用 Eclipse 導出這些插件文件。通過 Eclipse 將項目導出到一個 ZIP 歸檔文件,就可以避免同時發送特定於項目的文件和團隊共享目錄及文件(比如 .svn 或 Concurrent Version Systems(CVS)目錄)。 要將插件導出到一個歸檔文件,可以先選中 PHP 項目,然後選擇 File > Export。在 Select 窗口,從目標列表中選擇 Archive File,然後單擊 Next。 圖 5. 導出 WordPress 插件 在如圖 6 所示的 Archive file 窗口中,單擊 Deselect All,然後單擊想要包括到歸檔文件(比如 myplugin.php)的那些 PHP 文件。在選擇了這些 PHP 文件后,可以從 To archive file 選擇此歸檔文件的位置,然後單擊 Finish 創建此文件。為了保持一致性,最好是讓此 ZIP 文件的名稱與此插件目錄以及主要插件文件的名稱相同。 圖 6. 選擇要導出的文件 從 Eclipse 創建了歸檔文件后,就可將其發布到一個 Web 伺服器上或是將其複製到您的 ISP 處以便您可以使用它。 要在官方 WordPress 站點上添加有關此插件的信息,可以參考 參考資料 並遵照那裡的指導信息。 結束語 WordPress 是越來越流行的一個可擴展 Web 應用程序,它讓您能夠輕鬆地將內容發布給用戶。您無需修改任何 WordPress 代碼就可以擴展 WordPress,從而提供更多的功能。 藉助安裝了 PDT 的 Eclipse IDE,可以使用 PHP 工具構建一個插件。您還可以用 WordPress 測試和運行您的插件,直到它全部完成。之後,您可以使用 Eclipse 的導出功能來將此插件導出到一個適合於分發的歸檔文件。(責任編輯:A6) POST['fav_color'] . '" type="text" tabindex="32" />'; echo '</label><br /></p>'; } |
要添加這個定製動作,可以使用如下代碼。
___FCKpd___5 |
這個動作只在表單上繪出此欄位。當用戶提交此表單時,它並不實際保存數據。要想保存數據,需要使用 profile_update 動作。有關所有可用操作的詳細列表及各自的功能,請參看 參考資料。
測試插件
在項目內放入代碼后,就可以開始測試插件了。在測試前,需要在 WordPress 內啟用插件。以管理員身份登錄到 WordPress,然後單擊 Plugins。找到插件,然後單擊 Activate。
激活插件后,進入博客的首頁。應該可以看到 “Hello World!” 示例標題現在全部都是大寫字母了。如果禁用該插件,那麼它將還原回普通的大小寫的情況。利用這個功能還可以做一些其他的事情,比如將標題中的 URL 轉為超鏈接。此外,也可以添加具有同樣名稱的多個過濾器,所以與其創建一個功能全面的過濾器,不如考慮創建多個小的、功能集中的功能塊並將它們連接在一起。
要測試插件的註冊欄位部分,必須以管理用戶身份登錄到 WordPress 並啟用允許用戶在 Settings 頁面註冊的特性。啟用這個選項后,在進入到這個註冊頁面時,就會看到 Favorite Color 欄位。
WordPress 的其他擴展點
除了添加過濾器和動作外,還可以覆蓋 WordPress 內的函數。覆蓋的函數均在 WordPress 主目錄中的 pluggable.php 文件內定義。wp_mail 是其中的一個例子,可用來為用戶發送電子郵件。很多可覆蓋的函數都會處理用戶授權,比如登錄、設置 cookie 以及發送不同事件的通知。通過覆蓋基於授權的函數,就可以構建一些插件,而這些插件能為 WordPress 提供另一種身份驗證和授權方式,比如針對一個企業用戶組織的身份驗證。
導出插件
在編寫和仔細測試了插件之後,有可能還會想要與他人共享。大多數 WordPress 插件與 WordPress 本身一樣,都只打包成一個 ZIP 文件,這個文件可被擴展和複製到 WordPress 插件目錄。
可以用 Eclipse 導出這些插件文件。通過 Eclipse 將項目導出到一個 ZIP 歸檔文件,就可以避免同時發送特定於項目的文件和團隊共享目錄及文件(比如 .svn 或 Concurrent Version Systems(CVS)目錄)。
要將插件導出到一個歸檔文件,可以先選中 PHP 項目,然後選擇 File > Export。在 Select 窗口,從目標列表中選擇 Archive File,然後單擊 Next。
在如圖 6 所示的 Archive file 窗口中,單擊 Deselect All,然後單擊想要包括到歸檔文件(比如 myplugin.php)的那些 PHP 文件。在選擇了這些 PHP 文件后,可以從 To archive file 選擇此歸檔文件的位置,然後單擊 Finish 創建此文件。為了保持一致性,最好是讓此 ZIP 文件的名稱與此插件目錄以及主要插件文件的名稱相同。
從 Eclipse 創建了歸檔文件后,就可將其發布到一個 Web 伺服器上或是將其複製到您的 ISP 處以便您可以使用它。
要在官方 WordPress 站點上添加有關此插件的信息,可以參考 參考資料 並遵照那裡的指導信息。
結束語
WordPress 是越來越流行的一個可擴展 Web 應用程序,它讓您能夠輕鬆地將內容發布給用戶。您無需修改任何 WordPress 代碼就可以擴展 WordPress,從而提供更多的功能。
藉助安裝了 PDT 的 Eclipse IDE,可以使用 PHP 工具構建一個插件。您還可以用 WordPress 測試和運行您的插件,直到它全部完成。之後,您可以使用 Eclipse 的導出功能來將此插件導出到一個適合於分發的歸檔文件。(責任編輯:A6)
[火星人 ] 用 Eclipse PDT 開發一個 WordPress 插件已經有907次圍觀