WordPress插件開發入門指南:從零開始構建你嘅第一個功能擴展

3分鐘閱讀
2026-03-12
2026-06-03
2,736
當你透過以下連結購物,我會獲得佣金,對你嚟講冇額外成本。.

準備工作同環境搭建

喺開始寫程式碼之前,你需要一個合適嘅開發環境。包括一個本地嘅 WordPress 安裝同一個程式碼編輯器。建議用 XAMPP、Local by Flywheel 或者 Docker 嚟搭建本地伺服器環境。確保你嘅 WordPress 係最新版本,咁就可以用最新嘅 API 同安全功能。

你需要了解 WordPress 插件嘅基本結構。一個最簡單嘅插件至少需要一個主檔案,呢個檔案係一個有特定檔案標頭註釋嘅 PHP 檔案。呢個檔案個名通常係 your-plugin-name.php,佢話俾 WordPress 知呢個係一個插件,同埋提供咗名稱、描述、版本同作者等資料。

喺程式碼編輯器入面,為你嘅插件項目開一個新資料夾,例如 my-first-plugin。喺呢個文件夾入面,創建主 PHP 文件。

推薦閱讀 從零開始:WordPress插件開發終極指南與實踐教程

創建你嘅第一個插件檔案

而家,等我哋動手創建插件嘅主文件。呢個文件係插件嘅入口點,佢透過頂部嘅註釋塊向 WordPress 宣告自己嘅存在。

UltaHost WordPress 主機
30日退款保證,無限頻寬同數據庫,免費DDoS防護,買3年優惠50%

編寫插件頭部信息

喺啱啱創建嘅 PHP 文件入面,你需要加入標準嘅插件文件頭。例如,一個叫做「網站問候語」嘅插件可以咁樣開始:

<?php
/**
 * Plugin Name:       站点问候语
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       一个简单的插件,用于在网站前台显示自定义问候语。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

WordPress 會掃描 wp-content/plugins 目錄下嘅所有 PHP 檔案,讀取呢啲特定嘅註解資訊,並喺後台嘅插件管理頁面顯示出嚟。其中 Text Domain 用於國際化,Domain Path 指定咗語言檔案嘅位置。

實現核心功能代碼

喺頭部信息下面,你就可以開始編寫插件嘅功能代碼喇。我哋用一個簡單功能做例子:喺網站頁腳嘅左上角輸出句問候語。為咗避免直接修改主題檔案,我哋會用 WordPress 嘅掛勾系統。

首先,我哋需要創建一個函數嚟輸出問候語。然後,用 add_action 函數將呢個輸出掛到 WordPress 嘅某個執行動作上面,例如 wp_footer

推薦閱讀 WordPress插件開發完整指南:從零基礎到實戰上架

// 定义一个函数来输出问候语
function my_first_plugin_display_greeting() {
    echo '<p style="position: fixed; bottom: 10px; left: 10px; background: #f1f1f1; padding: 10px; border-radius: 5px;">你好,歡迎嚟到我嘅網站!</p>';
}

// 使用 add_action 钩子将函数挂载到 wp_footer 动作
add_action( 'wp_footer', 'my_first_plugin_display_greeting' );

完成以上代碼之後,將呢個插件資料夾(例如 my-first-plugin)將成個複製到你 WordPress 安裝目錄下嘅 wp-content/plugins/ 路徑入面。然後,登入 WordPress 後台,進入「插件」菜單,你應該會睇到「網站問候語」呢個插件,撳「啟用」。而家,訪問你嘅網站前台,就可以喺頁面底部睇到自訂嘅問候語啦。

為插件加入管理選項

一個功能完善嘅插件通常需要一個設定頁面,容許管理員喺 WordPress 後台進行設定。呢個會牽涉到建立管理菜單同選項處理邏輯。

創建插件設定頁面

WordPress 提供咗啲函數嚟幫插件加設設定頁面。通常,我哋會用 add_options_pageadd_menu_page 呢啲函數將呢個頁面加落後台選單度。下面嘅例子示範點樣加一個簡單嘅設定子頁面去「設定」主選單下面。

hosting.com 共享主機
高效能,配備 AMD EPYC 處理器、NVMe SSD 儲存同 LiteSpeed,提供全天候專業內部支援,採用先進安全措施,包括 SSL、暴力破解、惡意軟件同 DDoS 防護,可節省高達 73%。

首先,整一個函數嚟渲染設定頁面嘅 HTML 內容。

// 渲染插件设置页面的函数
function my_first_plugin_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>網站歡迎語設定</h1>
        <form method="post" action="/yue/options.php/" data-trp-original-action="options.php">
            <?php
            settings_fields( 'my_first_plugin_settings_group' );
            do_settings_sections( 'my-first-plugin' );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="yue"/></form>
    </div>
    &lt;?php
}

跟住,用 add_action 鉤喺 admin_menu 階段註冊呢個頁面。

// 将设置页面添加到后台菜单
function my_first_plugin_add_admin_menu() {
    add_options_page(
        '问候语设置',          // 页面标题
        '站点问候语',          // 菜单标题
        'manage_options',      // 权限要求
        'my-first-plugin',     // 菜单别名
        'my_first_plugin_settings_page' // 渲染函数
    );
}
add_action( 'admin_menu', 'my_first_plugin_add_admin_menu' );

註冊設定欄位同數據保存

淨係有頁面都唔夠,我哋需要定義具體嘅設定欄位(例如輸入框、選擇框)同處理數據嘅保存。呢個需要用 WordPress 設定 API 入面嘅 register_settingadd_settings_section 同埋 add_settings_field 等函數。

推薦閱讀 從零到一:WordPress插件開發權威指南與實踐教程

以下代碼註冊一個設定組同一個文字欄位,用畀用戶自訂問候語內容。

// 初始化插件的设置
function my_first_plugin_settings_init() {
    // 注册一个设置,将其保存到 `options` 表的 `my_first_plugin_greeting_text` 字段中
    register_setting( 'my_first_plugin_settings_group', 'my_first_plugin_greeting_text' );

// 在页面中添加一个设置区域
    add_settings_section(
        'my_first_plugin_section',
        '自定义问候语',
        null,
        'my-first-plugin'
    );

// 在设置区域中添加一个文本字段
    add_settings_field(
        'my_first_plugin_field',
        '问候语文本',
        'my_first_plugin_field_render',
        'my-first-plugin',
        'my_first_plugin_section'
    );
}
add_action( 'admin_init', 'my_first_plugin_settings_init' );

// 渲染文本输入框的函数
function my_first_plugin_field_render() {
    $option = get_option( 'my_first_plugin_greeting_text', '你好,欢迎来到我的网站!' );
    echo '<input type="text" name="my_first_plugin_greeting_text" value="' . esc_attr( $option ) . '" style="width: 300px;" />';
}

最後,我哋需要修改之前輸出問候語嘅函數,令佢從數據庫度讀取用戶保存嘅設定。

InterServer 共享主機
共享主機:每月1TB,只需£2.50;首月只需£0.10,使用優惠碼 tryinterserver。461個雲端應用程式腳本,一鍵安裝。
function my_first_plugin_display_greeting() {
    $greeting_text = get_option( 'my_first_plugin_greeting_text', '你好,欢迎来到我的网站!' );
    echo '<p style="position: fixed; bottom: 10px; left: 10px; background: #f1f1f1; padding: 10px; border-radius: 5px;">' . esc_html( $問候文字 ) . '</p>';
}

插件安全同最佳實踐

喺開發插件嗰陣,安全性係首要考慮嘅因素。唔安全嘅代碼可能導致網站俾人攻擊。以下係一啲核心嘅安全準則。

數據驗證同清理

無論幾時,當你從用戶輸入(例如 $_POST, $_GET)或者數據庫攞到數據嗰陣,都一定要假設佢係唔可信嘅。喺輸出到瀏覽器或者保存到數據庫之前,必須進行驗證同清理。

對於輸出到 HTML 頁面嘅內容,使用 esc_html()esc_attr()wp_kses_post() 等函數進行轉義,以防止跨站腳本攻擊。
對於用喺數據庫查詢嘅變數,應該用預編譯語句或者好似 $wpdb->prepare() 呢種方法。

喺我哋嘅例子入面,儲存設定嗰陣,WordPress 嘅 register_setting 函數會自動做一啲基本嘅清理。輸出嗰陣,我哋用咗 esc_html() 嚟確保問候語文本入面嘅 HTML 標籤安全噉轉義成普通文本。

用 nonce 同權限檢查

處理來自管理頁面嘅表單提交時,一定要驗證請求嘅合法性。呢度包括檢查用戶權限同驗證隨機數。

喺設置頁面嘅表單入面,settings_fields() 個函數已經自動包含咗非ce驗證。但如果你建立咗自訂嘅 AJAX 處理或者非標準表格,就必須手動驗證。通常用 current_user_can() 檢查權限,用 check_admin_referer()wp_verify_nonce() 驗證隨機數。

例如,喺自訂嘅提交處理函數入面:

function my_plugin_handle_form_submit() {
    // 检查权限
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( '权限不足' );
    }
    // 验证随机数
    if ( ! isset( $_POST['my_nonce_field'] ) || ! wp_verify_nonce( $_POST['my_nonce_field'], 'my_action' ) ) {
        wp_die( '安全校验失败' );
    }
    // ... 处理安全的数据 ...
}

摘要

透過呢個指南,你完成咗由一個簡單嘅 PHP 檔案到一個有後台管理功能嘅 WordPress 插件嘅完整開發流程。你學識咗插件嘅基本結構、點樣用動作鈎嚟注入功能、點樣利用 WordPress 設定 API 嚟建立可配置嘅選項頁面,同埋至關重要嘅安全實踐。記住,優秀嘅插件唔單止功能強大,更加需要代碼清晰、安全可靠、跟從 WordPress 編碼標準。由呢個小插件出發,你可以繼續探索短代碼、小工具、自定義文章類型等更高級嘅功能,逐步建立更複雜嘅擴展。

常見問題

點樣為插件添加多語言支援?

為插件添加國際化(i18n)支援,主要涉及用文本域同翻譯函數。首先,確保喺插件檔案頭度正確設定咗 Text Domain 同埋 Domain Path。喺代碼入面,將所有需要翻譯嘅字串用 __()_e() 用等函數包住。跟住,用 Poedit 等工具整 POT 模板檔案,同埋生成對應嘅 .mo 同 .po 翻譯檔案,擺喺插件指定嘅語言目錄下面。

例如:echo esc_html( __( ‘Hello, World!’, ‘my-first-plugin’ ) );當用戶切換到相應語言嗰陣,WordPress 會自動載入對應嘅翻譯檔案。

插件入面嘅函數名點樣避免同其他插件撞名?

避免函數名撞名嘅最佳做法係用命名空間(PHP 5.3+)或者幫所有函數、類、常量加個獨特嘅前綴。前綴應該夠獨特,通常用插件名嘅縮寫或者全名。

例如,唔好使用 display_greeting(),而應該使用 my_first_plugin_display_greeting()。如果使用 PHP 命名空間,你可以喺檔案頂部聲明 namespace MyFirstPlugin;,然後喺內部使用簡短嘅函數名,對外調用嘅時候就透過命名空間解析。

開發完成後點樣將插件發佈到官方目錄?

要將插件發佈到 WordPress.org 官方目錄,你需要先喺 WordPress.org 上開一個帳戶同提交插件。過程包括:確保代碼跟從 GPL 許可、通過 PHPCS 標準檢查、準備好 readme.txt 檔案(跟從特定格式)、提供清晰嘅截圖同文件。提交之後,會有審核員進行代碼審查,通過咗就可以發佈。發佈之後,用戶可以直接喺 WordPress 後台搜尋同安裝你嘅插件。

插件點樣向後兼容舊嘅 WordPress 版本?

為咗保持向後兼容性,喺開發時應該檢查目前嘅 WordPress 版本,並用條件語句包裝依賴新版本 API 嘅代碼。同時,要避免用已經廢棄嘅函數,如果一定要用,應該確保有後備嘅替代方案。喺插件嘅 readme.txt 檔案入面,明確聲明插件所需嘅最低 WordPress 版本,並對用戶俾出清晰嘅提示。定期測試插件喺舊版本環境下嘅運行情況係維持兼容性嘅關鍵。