當(dāng)前位置:首頁>WordPress建站>WordPress開發(fā)>WordPress 插件開發(fā)教程 Part 2 – WordPress 插件基礎(chǔ)

WordPress 插件開發(fā)教程 Part 2 – WordPress 插件基礎(chǔ)

文本是《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ǔ)了:

  1. 確定一個具有描述性的唯一的插件名
    1. 名字是否可以描述你的插件的功能
    2. 是否驗證了插件名在插件目錄中不存在
  2. 為插件設(shè)置一個唯一的前綴
    1. 前綴是否足夠特殊來避免沖突
  3. 建立插件的目錄結(jié)構(gòu)
    1. 是否需要 PHP 目錄
    2. 是否需要 JavaScript 目錄
    3. 是否需要 CSS 目錄
    4. 是否需要 images 目錄
  4. 建立默認(rèn)的插件文件
    1. 建立和插件文件夾名同名的主插件文件
    2. 建立 uninstall.php 文件來執(zhí)行卸載過程
  5. 建立插件的頭部代碼
    1. 設(shè)置你希望顯示的插件的名字
    2. 添加一個詳細(xì)的插件目的的描述
    3. 設(shè)置正確的版本
    4. 確保設(shè)置了插件的 URI 和 作者的 URI 的值
  6. 包括版權(quán)信息
    1. 在插件頭下面直接包含版權(quán)信息
  7. 建立插件的啟用函數(shù)
    1. 你的插件功能的實現(xiàn)是否需要一個特殊的或者更高的 WordPress?
    2. 你的插件是否要在啟用時設(shè)置默認(rèn)值?
  8. 建立插件的禁用函數(shù)
    1. 你的插件是否要在禁用時執(zhí)行神馬東西?
  9. 建立插件的卸載腳本
    1. 建立 uninstall.php 文件
    2. 在文件中包含卸載腳本
  10. 文件引用
    1. 使用合適的目錄常量和函數(shù)來確定 WordPress 和插件中的路徑

總結(jié)

本章討論了在進行 WordPress 插件開發(fā)時建立一個合適的插件基礎(chǔ)。遵循這些步驟是建立跨各種版本的 WordPress 插件的精髓。保持合適的代碼文檔同樣是描述插件功能的重要步驟。這會在你今后升級代碼的時候節(jié)省時間。這也同樣會幫助其他開發(fā)者明白你的代碼邏輯。

注:本文出自《Professional WordPress Plugin Development》一書,由 sixpoint.me 翻譯,倡萌整編。

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個人或組織,在未征得本站同意時,禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關(guān)注WordPress大學(xué)公眾號 WPDAXUE
WordPress開發(fā)

WordPress 限制不同用戶角色可上傳的文件類型及大小

2013-3-27 6:42:00

WordPress開發(fā)

WordPress 插件開發(fā)教程 Part 3 – 鉤子( Hooks )

2013-3-28 6:46:00

4 條回復(fù) A文章作者 M管理員
  1. shenxianfeng

    教程非常清晰明了,深入淺出,很有學(xué)習(xí)價值。

  2. 昌猛哥。您有承接插件編寫嗎?

    如果有請加我QQ:860630830 因為我這邊QQ有點問題。主動加人的時候,老提示驗證碼讀取失敗。。:(

    • 最近非常忙 沒時間接單

?
個人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

广昌县| 革吉县| 榆社县| 奉新县| 南华县| 富蕴县| 江津市| 洪洞县| 沂水县| 紫云| 静宁县| 宝山区| 韶山市| 易门县| 辛集市| 睢宁县| 宜黄县| 淳安县| 高安市| 七台河市| 阳西县| 汕头市| 宁陵县| 金乡县| 德江县| 韩城市| 皋兰县| 锡林郭勒盟| 湖南省| 舞钢市| 汝州市| 兴和县| 吴桥县| 阿图什市| 蒙自县| 隆安县| 上饶县| 哈巴河县| 封开县| 东辽县| 盐池县|