文本是《WordPress 插件開發(fā)教程(共4篇)》專題的第 2 篇。閱讀本文前,建議先閱讀前面的文章:
本部分教程包括以下內(nèi)容:
- 創(chuàng)建一個可靠的插件基礎(chǔ)
- 確定目錄和文件的路徑
- 使用“啟用”( Active )和“停用”( Deactivate )功能
- 了解可用的插件的卸載方法
- 提供最佳實踐和代碼標(biāo)準(zhǔn)
- 了解規(guī)范的代碼文檔
- 使用插件開發(fā)參考表
在 WordPress 中開發(fā)一個插件的時候,最重要的是要從可靠的插件基礎(chǔ)開始。有一個好的基礎(chǔ)可以在開發(fā)過程中避免許多令人頭痛的問題。本部分內(nèi)容討論的技術(shù)會作為一個示范在整個教程中使用。
創(chuàng)建一個插件文件
WordPress 中的插件可以是一個單獨的 PHP 文件,也可以是一個目錄下的多個文件。在創(chuàng)建一個新插件的時候你需要考慮很多事情,比如插件的名字和適當(dāng)?shù)哪夸浭褂谩?/p>
為你的插件命名
在為插件選名字的時候,最好根據(jù)插件的實際功能來。比如,一個 SEO 方面的插件,你就不想把它命名成”我的插件“。你的用戶沒辦法通過你的插件名字來知道你的插件究竟是做什么的。你的插件名字必須是唯一的并且能很好的描述它的功能。
去wordpress.org 官方插件目錄搜一搜和你的插件相近的插件可以很好的避免混淆。如果你打算把你的插件命名為 SEO Gold,而已經(jīng)有一個叫 SEO Sliver 的插件了,就有可能帶來混淆了。在 Part – 17 “營銷你自己的插件”中我們將詳細(xì)討論這個問題。
使用文件夾
強烈建議把你的插件放在 plugins 目錄下的子文件夾中。所有的從 WordPress.org 下載的插件都自動的放在了子目錄下面。這樣你就可以方便的包含多文件以及使用其他的內(nèi)容,比如圖片。子目錄還可以再包含子目錄來更好的組織你的插件文件。文件夾的名字必須和你的主插件文件相同。在文件夾名稱中不應(yīng)該包含任何空格( )或者下劃線(_),如果需要就是用連字號(-)。子目錄和文件的目錄組織結(jié)構(gòu)會在接下來的”最佳實踐“中討論。
最佳實踐
下面是開發(fā) WordPress 插件的一系列的最佳實踐。這一部分所介紹的最佳實踐是你應(yīng)該在所有的插件中都嚴(yán)格遵守的。這有助于消除許多在 WordPress 中遇到的常規(guī)錯誤。這些最佳實踐同樣會使你的插件的組織更加清晰。
全部加上前綴
在開發(fā)插件的時候,在所有東西前面都加上唯一的前綴是非常關(guān)鍵的。這包括插件中的文件、函數(shù)名、變量名、以及其他所有包含在插件中的東西。為什么呢?很簡單,插件開發(fā)中一個最普遍的錯誤就是使用了太普遍的函數(shù)名或者變量名。例如你的函數(shù)名是 update_options(),如果用戶安裝的其他插件中有同名的函數(shù),網(wǎng)站會出錯,因為在 PHP 中是不能有兩個同名的函數(shù)的。
一種比較好的規(guī)則是用你的插件的首字母,和你自己的首字母來做前綴。例如你的名字是 Michael Myers,你的插件名字是 Halloween Revenge,那么你的前綴可以是 mm_hr_update_options()。這樣子其他的插件與你的插件同名的機會就很小了。這樣和其他插件沖突的風(fēng)險就很小了。
對于變量名,這也是個好辦法。在聲明變量時,不要使用常見的名字。例如,你的插件中有個變量叫 $post 。這就可能引起非預(yù)期的結(jié)果,因為 $post 是 WordPress 中包含文章數(shù)據(jù)的全局變量。如果在 WordPress 仍然需要用文章數(shù)據(jù)的時候你的插件覆蓋了 $post 中的數(shù)據(jù),那就可能遇到嚴(yán)重的問題了。所以你應(yīng)該使用與上面類似的前綴 $mm_hr_post。在其他插件中基本不會用到這個變量了。
下面的文章中,使用 lc_ 和 myplugin_ 組合來做前綴,比如 lc_myplugin_function_name()。
文件組織
對于開發(fā)專業(yè)的插件來說,插件文件的良好組織是非常重要的。一般來說,在你的插件文件夾中只放兩個文件:一個是插件的主 PHP 文件,另一個是 uninstall.php 文件。為了有序的組織,把其他的插件所需文件都放到其他子目錄下面去。
同樣建議將插件分到幾個小的文件中。這么做一個主要的原因是性能的原因。例如,你應(yīng)該把所有的管理界面的代碼放在一個獨立的文件中。這使得你可以在用戶瀏覽 WordPress 管理員界面時有條件的包含管理員代碼。
<?php
if( is_admin() ) {
// 在 wp-admin 里面
require_once( dirname( __FILE__ ).'/includes/admin.php' );
}
?>
上面的例子使用 is_admin() 條件語句來驗證用戶是否在 WordPress 的管理控制板中。如果是,你的插件應(yīng)該包含 /includes/admin.php 文件。
目錄結(jié)構(gòu)
另一個插件開發(fā)中的要點是要有清晰的目錄結(jié)構(gòu),從而很好的包含插件中所有的小文件。例如,你的插件需要 JavaScript 文件,就建立一個 /js 目錄來存放左右的 JavaScript 文件。如果有樣式表文件,就建立一個 /css 目錄來存放所有的樣式表文件。同樣所有的圖片放在 /images 目錄里面。
下面看看一個插件的標(biāo)準(zhǔn)的目錄結(jié)構(gòu):
- /unique-plugin-name — 唯一的插件名稱,不要包含空格或者特殊字符
-
- unique-plugin-name.php — 唯一的插件名稱,插件主文件
- uninstall.php — 插件的卸載文件
- /js — JavaScript 文件
- /css — css 樣式表
- /images — 圖片
- /includes — 存放要包含的 PHP 文件
用清晰的目錄結(jié)構(gòu)來使得你的文件有序使得追蹤文件的時候更方便。多于其他的插件卡發(fā)著來說,他們更容易理解你的插件的邏輯。
必要的插件頭部
插件要在 WordPress 中起作用,其頭部是唯一的必須代碼。“插件頭部”是位于插件文件頭部的一段 PHP 的注釋代碼塊。這段注釋塊告訴 WordPress 這是一個有效的插件。
創(chuàng)建頭部
下面是一個插件的頭部示例:
<?php
/*
Plugin Name: My Plugin
Plugin URI: http://example.com/wordpress-plugins/my-plugin
Description: 插件的詳細(xì)說明
Version: 1.0
Author: Lexo Charles
Author URI: http://sixpoint.me
License: GPLv2
*/
?>
WordPress 只需要 Plugin Name 這一行就可以識別插件,不過最好是像上面一樣填寫詳細(xì)的信息。
Plugin URI 是連接到你的插件的詳細(xì)內(nèi)容的網(wǎng)頁的鏈接。Description 是插件的簡短描述。Version 是當(dāng)前插件的版本。WordPress 使用這里設(shè)置的版本號來檢查插件在 wordpress.org 的更新。下面兩行是 Author – 作者,和 Author URI – 作者的網(wǎng)站。最后一行是這個插件發(fā)布所遵照的許可證。
插件許可證
在插件頭部的注釋塊中,最好包含你的插件的版權(quán)。對于插件的功能來說,這不是必須的,但是任何時候你發(fā)布代碼,都最好包含版權(quán)信息。這是你的用戶知道你的插件的版權(quán)是什么,以及他們可以如何使用你的插件。part-17:插件營銷中,我們會詳細(xì)討論這個話題。
WordPress 的版權(quán)是 GPL 軟件版權(quán)所以任何 WordPress 的插件都要是和 GPL。 下面是一段 GPL 版權(quán)注釋塊的示例。
<?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
*/
?>
只用填上年份,插件作者名,以及 email 就可以了。然后把這段注釋放在插件的頭部。這樣你的插件就急于 GPL 版權(quán)協(xié)議了。
確定目錄結(jié)構(gòu)
通常你要確定你的插件的目錄和文件結(jié)構(gòu)。例如,圖片都放在 images 文件夾下。一般來說,最好在插件中硬編碼一個目錄結(jié)構(gòu)。WordPress 可以被配置運行在許許多多的情形下,所以目錄結(jié)構(gòu)說不定就是個錯誤。這部分介紹確定目錄和文件結(jié)構(gòu)的合適的方法。
插件路徑
最基本的事情就是把你的文件和目錄引入到 WordPress 的安裝中。要引入文件有兩種方法:使用本地服務(wù)器路徑,或者使用標(biāo)準(zhǔn)的 URL。
本地服務(wù)器路徑就是計算機的目錄。本地服務(wù)器路徑通常在你要包含在你本地服務(wù)器上的內(nèi)容時使用。URL 則通常用來連接你的服務(wù)器外部的內(nèi)容,不過這并不是說你就不能用 URL 來連接本地服務(wù)器上的內(nèi)容了。
WordPress 支持把 wp-content 目錄移動到不同的位置。由于這個原因,在 WordPress 中你不應(yīng)該硬編碼目錄,而應(yīng)該用可用的函數(shù)來確定正確的路徑。
本地路徑
插件開發(fā)中有一個常見問題:確定你的插件文件的本地路徑的合適方法是什么?要確定你的插件的本地路徑,應(yīng)該使用 plugin_dir_path() 函數(shù)。 plugin_dir_path() 函數(shù)從它的文件名中提取和插件目錄對應(yīng)的物理地址。
<?php plugin_dir_path($file); ?>
參數(shù):
$file – (string)(必須) — 插件的文件名
下面看如何確定到你的插件目錄的本地路徑的例子:
<?php
echo plugin_dir_path(__FILE__);
?>
把 PHP 常量 __FILE__ 傳遞給了 plugin_dir_path() 函數(shù)。這會生成指向你的插件目錄的完整的本地路徑。
/public_html/wp-content/plugins/my-custom-plugin/
如何得到在你插件目錄下的子目錄中文件的本地路徑呢?同樣可以使用 plugin_dir_pah() 函數(shù)并加上子目錄和文件名:
<?php
echo plugin_dir_path(__FILE__).'js/scripts.js';
?>
這段代碼會輸出下面的結(jié)果:
/public_html/wp-content/plugins/my-custom-plugin/js/scripts.js
這個函數(shù)在開發(fā)一個健壯的 WordPress 插件時很有用。使用正確的方法來訪問你的插件文件和目錄可以確保你的插件與 WordPress 安裝的兼用性,不管它是怎么自定義的。
URL 路徑
同樣有函數(shù)幫助確定WordPress 中的 URL。下面是這些函數(shù)的列表:
- plugins_url() — 插件目錄的 URL (例如:http://example.com/wp-content/plugins)
- include_url() — includes 目錄的 URL (例如:http://example.com/wp-includes)
- content_url() — content 目錄的 URL (例如:http://example.com/wp-content)
- admin_url() — admin 目錄的 URL (例如:http://example.com/wp-admin/)
- site_url() — 當(dāng)前網(wǎng)站的 URL (例如:http://example.com)
- home_url() — 當(dāng)前網(wǎng)站首頁的 URL (例如:http://example.com)
site_url() 和 home_url() 很相似,容易混淆。site_url() 返回的是數(shù)據(jù)庫中 wp_options 表里面的 siteurl 字段值。這是指向 WordPress 核心文件的 URL。如果你的 WordPress 核心文件在你的服務(wù)器的子目錄中,比如 /wordpress,那么 site_url() 的值就會是 http://example.com/wordpress 。
home_url() 則從 wp_option 表中取得 home 字段的值。這個地址是你希望訪問你的 WordPress 網(wǎng)站的 URL 地址。例如,你的 WordPres 核心文件放在 /wordpress 目錄下,但是你希望你的 URL是 http://example.com,那么就要把 home 的值設(shè)置成 http://example.com。
plugins_url() 函數(shù)在寫 WordPress 插件的時候很有用。這個函數(shù)可以確定在插件目錄下的任何文件的完全 URL。
<?php plugins_url( $path, $plugin ); ?>
參數(shù):
- $path — (string)(可選) — 相對于 插件 URL 的路徑
- $plugin — (string)(可選) — 要相對的插件文件(如果是自己,就傳 __FILE__ )
例如:要在插件中引用一個圖片文件,可以這樣子:
<?php echo '<img src="'.plugins_url('images/icon.png', __FILE__). '"/>';?>
第一個參數(shù)是要用到的圖片文件的相對路徑。第二個參數(shù)是要取相對路徑時的參考文件,本例中直接是 —__FILE__。上面的代碼會生成下面的 HTML 標(biāo)簽:
<img src="http://example.com/wp-content/plugins/my-custom-plugin/images/icon.png"/>
下面是使用 plugin_url() 函數(shù)來確定插件的 URL 的好處:
- 支持 mu — 插件的插件目錄。
- 自動檢測 SSL,所以如果 SSL 被開啟,那么 URL 會自動返回包含 https 的。
- 使用 WP_PLUGIN_URL 常量,意味著即使用戶把插件移動到了自定義的位置,也可以檢測到插件的目錄。
- 使用 WPMU_PLUGIN_URL 常量來支持 Multisite
activate/deactivate 函數(shù)
WordPress 有一些插件開發(fā)中可用到的通用函數(shù)。下面介紹 activate 和 deactivate 函數(shù)。
插件 activation 函數(shù)
插件 activation 函數(shù)當(dāng)一個插件在 WordPress 中”activated(啟用)”時被觸發(fā)。
這個函數(shù)叫做 register_activation_hook()。使用這個函數(shù)可以用來為插件設(shè)置一些默認(rèn)選項。也可以用來驗證插件和 WordPress 版本的兼容性。這個插件接收兩個參數(shù):
<?php register_activation_hook( $file, $function ); ?>
參數(shù):
- $file — (string)(必須) — 主插件文件的路徑。
- $function — (string)(必須) — 當(dāng)插件啟用時要執(zhí)行的函數(shù)。
下面是一個例子:
<?php
register_activation_hook( __FILE__, 'boj_myplugin_install');
function boj_myplugin_install() {
// 啟用時要做的事情
}
?>
第一個參數(shù)是插件的路徑,使用了 __FILE__ 常量。這個一個 PHP 自帶的常量,指向調(diào)用它的文件的 絕對路徑。第二個參數(shù)是唯一的一個函數(shù)名。
知道了 register_activation_hook() 函數(shù)的用處后,我們看一個真實的例子。下面的例子用來驗證 WordPress 的版本:
<?php
register_activation_hook( __FILE__, 'boj_install');
function boj_install() {
if( version_compare( get_bloginfo( 'version' ), '3.1', '<' ) ) {
deactivate_plugins( basename( __FILE__ )); //禁用插件
}
}
?>
我們使用 get_bloginfo() 函數(shù)來取得當(dāng)前安裝的 WordPress 版本號。接著用 PHP 函數(shù) version_compare() 來驗證安裝的 WordPress 的版本是否至少為 3.1。如果低于 3.1,就調(diào)用 deactivate_plugins() 函數(shù)來 禁用插件。
在啟用時進行默認(rèn)設(shè)置
另一個常用的啟用技術(shù)就是在你的插件啟用時為它設(shè)置默認(rèn)選項。假設(shè)你的插件有許多許多選項,也許有一些選擇需要被設(shè)置才能保證插件正常工作。你可以再啟動時自動設(shè)置默認(rèn)值,而不用讓用戶跑到設(shè)置頁面來親自設(shè)置。
<?php
register_activation_hook( __FILE__, 'boj_install');
function boj_istall() {
$boj_myplugin_options = array(
'view' => 'grid',
'food' => 'bazon',
'mode' => 'zombie'
);
update_option( 'boj_myplugin_options', $boj_myplugin_options );
}
?>
}
上面的代碼在你插件啟用時生成了一個包含默認(rèn)值的數(shù)組并把它們存到 WordPress 中。在 part-7,”插件設(shè)置” 中將詳細(xì)介紹創(chuàng)建和保存插件選項。
插件 deactivation (禁用)函數(shù)
和啟用函數(shù)類似,同樣有禁用函數(shù)。叫做 register_deactivation_hook() 函數(shù)。這個函數(shù)在插件被禁用時觸發(fā)。這個函數(shù)和前面的啟用函數(shù)一頁同樣接收兩個參數(shù)。
<?php register_deactivation_hook( $file, $function ); ?>
參數(shù):
- $file — (string)(必須) — 主插件文件的路徑。
- $function — (string)(必須) — 當(dāng)插件禁用時要執(zhí)行的函數(shù)。
下面是一個例子:
<?php
register_deactivation_hook( __FILE__, 'boj_myplugin_uninstall' );
function boj_myplugin_unstall() {
// 執(zhí)行內(nèi)容
}
?>
在禁用插件時執(zhí)行 boj_myplugin_uninstall() 函數(shù)。
禁用 != 卸載
在處理禁用的時候,不應(yīng)該包含卸載插件的功能。因為禁用了還可以重新啟用的,但卸載(刪除)就不一樣了。注意:WordPress 在自動更新的時候,會先禁用所有的插件,然后再安裝 WordPress 的新版本。
卸載的方法
為插件提供卸載功能可以方便的刪除掉插件添加到 WordPress 中的數(shù)據(jù)。這應(yīng)該是每個插件的必須部分。這不會帶來多少工作量,但是可以讓用戶來選擇是否完全刪除它。
為什么卸載是必須的?
想像一下插件是安裝到你電腦中的一個軟件。你就希望這個軟件有個非常方便的卸載的方法。你同樣希望可以徹底卸載該軟件的所有內(nèi)容。WordPress 中的插件也是同樣的意思,實質(zhì)就是安裝在 WordPress 中的軟件。如果用戶希望刪除這個插件,你應(yīng)該為用戶提供從 WordPress 中徹底刪除它的功能。
關(guān)心插件用戶的數(shù)據(jù)是一個良好的規(guī)則。例如如果你的插件建立事件作為自定義文章類型,也許用戶希望卸載插件,但并不希望刪除他們所有的事件。因此你或許希望詢問用戶是否要刪除他們的數(shù)據(jù)。
WordPress 提供了兩種卸載插件的方法:一個是 uninstall.php 文件,另一個是 uninstall 鉤子。
uninstall.php
第一種方法:uninstall.php 文件。這是典型的流行方法,因為它把你所有的卸載代碼放在一個獨立的文件中。要使用這個方法,創(chuàng)建一個 uninstall.php 文件并放置在插件的根目錄。如果這個文件存在,WordPress 會在插件被刪除的時候執(zhí)行這個文件的代碼。下面是使用 uninstall.php 文件的一個例子:
<?php
// 如果 uninstall 不是從 WordPress 調(diào)用,則退出
if( !defined( 'WP_UNINSTALL_PLUGIN' ) )
exit();
// 從 options 表刪除選項
delete_option( 'boj_myplugin_options' );
// 刪除其他額外的選項和自定義表
?>
第一件要做的事就是驗證確實是 WordPress 在調(diào)用 uninstall.php 文件。通過嚴(yán)重 WP_UNINSTALL_PLUGIN 常量是否定義。如果沒有,立即退出。這是一個保證只有在刪除插件時才能夠執(zhí)行 uninstall.php 文件的安全的方法。
在驗證了這是合法的卸載調(diào)用以后,就可以從數(shù)據(jù)庫中刪除插件的設(shè)置項了。插件卸載腳本的目的是要從數(shù)據(jù)庫中刪除任何與插件相關(guān)的內(nèi)容。這包括刪除所有選項,已經(jīng)刪除所有自定義的表。你不需要操心刪除插件的文件或者目錄的事情,一旦卸載腳本執(zhí)行了,WordPress 會自動為你做這些事情。
卸載鉤子
第二種可用的卸載方法叫做卸載鉤子。如果你刪除一個不存在 uninstall.php 的插件,WordPress 會執(zhí)行卸載鉤子(如果存在的話).
<?php register_uninstall_hook( $file, $function ); ?>
參數(shù):
- $file — (string)(必須) — 插件主文件的路徑
- $function — (string)(必須) — 在插件卸載后要執(zhí)行的函數(shù)
下面看卸載函數(shù)的例子:
<?php
register_activation_hook( __FILE__, 'boj_myplugin_activate' );
function boj_myplugin_activate() {
// 注冊卸載函數(shù)
register_uninstall_hook( __FILE__, 'boj_myplugin_uninstaller' );
}
function boj_myplugin_uninstaller() {
// 刪除插件創(chuàng)建的選擇,表等等
delete_option( 'boj_myplugin_options' );
}
?>
register_uninstall_hook() 必須在啟用函數(shù)中調(diào)用。因此要在使用 register_activation_hook() 函數(shù)執(zhí)行插件啟用的函數(shù)中包含 uninstall 鉤子。接著調(diào)用 uninstall 函數(shù)。注意:如果插件根目錄下包含 uninstall.php 文件,那么刪除鉤子是不會執(zhí)行的。
重要:要知道不能使用一個類的方法作為卸載鉤子的回調(diào)函數(shù)。因為卸載鉤子會保存一個 $this 的引用到數(shù)據(jù)庫中,它多那個頁面的加載來說是唯一的。
如本節(jié)中提醒的,使用卸載鉤子有許多陷阱。所以最好使用更簡潔的 uninstall.php 文件來進行卸載。
編碼規(guī)范
WordPress 在所有的核心代碼中保持著一系列的編碼規(guī)范。這有助于保持整個 WordPress 的代碼格式始終如一,易于閱讀。所以建議在插件開發(fā)過程中遵循這些編碼規(guī)范。這有助于使核心代碼和插件保持一致。在http://codex.wordpress.org/WordPress_coding_Standards可以看到官方的編碼規(guī)范。
代碼文檔
一個最明顯,但又最容易忽略的步驟就是代碼注釋。注釋你的插件的源代碼是最快速便捷的寫插件功能文檔的方式。注釋代碼有許多許多好處。主要的代碼注釋的好處就是解釋你的代碼究竟是干什么的。
想像一個沒有一行注釋的十分復(fù)雜的插件。如果你不檢視幾個月的代碼,或許你是不會明白這代碼是干什么的。再想象其他的開發(fā)者看你的沒有注釋的代碼,則可能花費更長的時間來弄清插件的功能。注釋對任何人都有好處,所以一定記得要注釋。
幾乎所有的 WordPress 核心函數(shù)都包含 PHPDoc 形式的行內(nèi)文檔。PHPDoc 是一個標(biāo)準(zhǔn)的描述函數(shù)作用的注釋形式。下面是一段基本的 PHPDoc 格式的函數(shù)注釋:
<?php
/**
* Short description
*
* Longer more detailed description
*
* @param type $varname1 Description
* @param type $varname2 Description
* @return type Description
*/
function boj_super_function( $varname1, $varname2 ) {
// 函數(shù)內(nèi)容
}
?>
上面的 PHPDoc 注釋直接在注釋塊中描述函數(shù)的功能。如果一個開發(fā)者查看你的插件的代碼,他不用看函數(shù)的代碼也可以很快可以明白你的函數(shù)的功能,接受什么參數(shù),返回什么結(jié)果。這些注釋也被許多可視化軟件使用,例如 PHPDocumentor 和 PHPXref。
變量、函數(shù)和文件的命名
變量和函數(shù)名應(yīng)該全部小寫。代詞應(yīng)該用下劃線來分割。下面是函數(shù)和變量命名的正確方法:
<?php
function boj_myplugin_function_name ( $boj_myplugin_variable ) {
// do something
}
?>
文件名同樣應(yīng)該只使用小寫字母,不過,文件名應(yīng)該用連字號”-”來分割單詞,而不要用下劃線。例如你應(yīng)該這樣命名插件文件:boj-plugin-name.php
單引號 v.s. 雙引號
PHP 同時允許使用單引號或者雙引號來定義字符串。WordPress 中推薦在可能的情況下盡量使用單引號。使用單引號的一個好處這樣你就很少需要在字符串中去避免 HTML 的引號。下面是使用單引號來輸出一個超鏈接的方法的例子:
<?php
echo '<a href="http://example.com/" > 訪問 example.com </a> ';
?>
在 PHP 中連接一個字符串時,你也可以使用雙引號方法。例如:看下面的為網(wǎng)站 URL 插入一個變量的簡單方法:
<?php
$boj_myplugin_website = 'http://example.com/';
echo " <a href='$boj_myplugin_website' > 訪問 example.com </a> ";
?>
把 $boj_myplugin_website 變量設(shè)置成你想包含在 HTML 超鏈接中的 URL。然后把這個字符串連接到 echo 語句中的網(wǎng)站 URL 中。
縮進
縮進應(yīng)該反映代碼的邏輯結(jié)構(gòu)。這意味著在縮進時使用 tab 而不是空格。下面是很差的 if 語句縮進的例子:
<?php
if ( 條件 ) {
echo 'Yes';
} elseif ( 條件2 ){
echo 'No';
}
?>
上面代碼的邏輯很難體現(xiàn)出來,因為沒有反應(yīng) if 語句代碼邏輯結(jié)構(gòu)的縮進。下面是使用合理縮進的例子:
<?php
if ( 條件 ) {
echo 'Yes';
} elseif ( 條件2 ){
echo 'No';
}
?>
注意如何使用合適的縮進來使得代碼的邏輯更顯而易見。你可以簡單的跳過這段內(nèi)部代碼而直接明白這些語句的結(jié)果。這就是為什么你的所有代碼都必須有合適的縮進。
括號格式
多行代碼塊必須使用花括號。括號應(yīng)該和你要檢查的條件語句在同一行中。看合適的使用花括號的例子:
<?php
if ( condition ) {
action1();
action2();
} elseif ( condition2 || condition3 ) {
action3();
action4();
} else {
defaultaction();
}
?>
如果你的代碼塊很長,最好在結(jié)束的花括號后面加一小段注釋來幫助確定這是哪個花括號的結(jié)束。
<?php
if ( condition ) {
action1();
action2();
} elseif ( condition2 || condition3 ) {
action3();
action4();
} else {
defaultaction();
} // end of condition check
?>
空格的使用
在括號的后面、邏輯或者賦值運算符的兩端都應(yīng)該加一個空格。下面看看幾個合適的使用空格不同例子:
<?php
if ( $foo == 34 ) {
// do something
}
foreach ( $foo as $bar ) {
// do something
}
$foo = array( 34, 16, 8 );
function super_function( $param1 = 'foo', $param2 = 'bar' ) {
// do something
}
?>
注意每一個語句的空格使用技巧。這使得閱讀以及理解代碼邏輯更容易,因為真?zhèn)€代碼簡潔一致。
PHP 簡寫
你不應(yīng)該在代碼中使用 PHP 標(biāo)簽的簡寫形式 ( <? ?> )。因為簡寫形式要起作用必須在服務(wù)器中開啟。許多主機的配置,該選項是被禁止的,這樣你的代碼直接就崩潰了。所以應(yīng)該使用標(biāo)準(zhǔn)的標(biāo)簽形式:
<?php ?>
SQL 語句
在操作數(shù)據(jù)庫時,你可能會用到 SQL 語句。復(fù)雜的 SQL 語句可以分成多行來寫。盡管 SQL 語句是大小寫不敏感的,最好還是把 SQL 命令寫成大寫形式。
SELECT username FROM table1 WHERE status = 'active'
part-6,插件安全中,將詳細(xì)討論在 WordPress 中使用 SQL 語句的正確方法。
插件開發(fā)檢查列表
在開發(fā) WordPress 插件時,你需要記住許多事情來創(chuàng)建一個合適的插件基礎(chǔ)。下面的列表幫助你完成這個過程。跟隨這個列表,你就可以確保有一個合適的插件基礎(chǔ)了:
- 確定一個具有描述性的唯一的插件名
- 名字是否可以描述你的插件的功能
- 是否驗證了插件名在插件目錄中不存在
- 為插件設(shè)置一個唯一的前綴
- 前綴是否足夠特殊來避免沖突
- 建立插件的目錄結(jié)構(gòu)
- 是否需要 PHP 目錄
- 是否需要 JavaScript 目錄
- 是否需要 CSS 目錄
- 是否需要 images 目錄
- 建立默認(rèn)的插件文件
- 建立和插件文件夾名同名的主插件文件
- 建立 uninstall.php 文件來執(zhí)行卸載過程
- 建立插件的頭部代碼
- 設(shè)置你希望顯示的插件的名字
- 添加一個詳細(xì)的插件目的的描述
- 設(shè)置正確的版本
- 確保設(shè)置了插件的 URI 和 作者的 URI 的值
- 包括版權(quán)信息
- 在插件頭下面直接包含版權(quán)信息
- 建立插件的啟用函數(shù)
- 你的插件功能的實現(xiàn)是否需要一個特殊的或者更高的 WordPress?
- 你的插件是否要在啟用時設(shè)置默認(rèn)值?
- 建立插件的禁用函數(shù)
- 你的插件是否要在禁用時執(zhí)行神馬東西?
- 建立插件的卸載腳本
- 建立 uninstall.php 文件
- 在文件中包含卸載腳本
- 文件引用
- 使用合適的目錄常量和函數(shù)來確定 WordPress 和插件中的路徑
總結(jié)
本章討論了在進行 WordPress 插件開發(fā)時建立一個合適的插件基礎(chǔ)。遵循這些步驟是建立跨各種版本的 WordPress 插件的精髓。保持合適的代碼文檔同樣是描述插件功能的重要步驟。這會在你今后升級代碼的時候節(jié)省時間。這也同樣會幫助其他開發(fā)者明白你的代碼邏輯。
注:本文出自《Professional WordPress Plugin Development》一書,由 sixpoint.me 翻譯,倡萌整編。
您已閱讀完《WordPress 插件開發(fā)教程(共4篇)》專題的第 2 篇。請繼續(xù)閱讀該專題下面的文章:





教程非常清晰明了,深入淺出,很有學(xué)習(xí)價值。
昌猛哥。您有承接插件編寫嗎?
如果有請加我QQ:860630830 因為我這邊QQ有點問題。主動加人的時候,老提示驗證碼讀取失敗。。:(
最近非常忙 沒時間接單
http://www.ithinkopen.com這里變得也很不錯