由零開始學WordPress插件開發:整到你第一個自訂功能

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

掌握 WordPress 插件開發係擴展網站功能、實現個人化需求嘅核心技能。同修改主題 functions.php 檔案相比,使用插件可以確保功能獨立於主題,方便搬遷、管理同維護。本文將會引導你由零開始,創建一個結構完整、符合 WordPress 編碼標準嘅插件。

準備工作同環境搭建

喺編寫第一行程式碼之前,你需要一個合適嘅開發環境同對 WordPress 架構有基本嘅理解。

開發環境設定

一個標準嘅本地開發環境係高效開發嘅基石。推薦使用 XAMPP、MAMP 或者 Local by Flywheel 等工具,佢哋可以一鍵安裝 Apache、MySQL/Nginx、PHP 同 WordPress。另外,確保你嘅文字編輯器或者 IDE(例如 VS Code、PhpStorm)支援 PHP 語法高亮同程式碼提示,呢樣會大大提升開發效率。

推薦閱讀 深入解析 WordPress 插件開發:從零入門到高效自訂

理解 WordPress 插件架構

WordPress 插件本質上係一個或多個 PHP 檔案,存放喺 wp-content/plugins/ 目錄入面。佢嘅核心原理係「掛鉤」機制。插件透過「動作掛鉤」喺特定時間點執行代碼,或者透過「過濾器掛鉤」修改其他函式輸出嘅數據。理解 add_action 同埋 add_filter 呢兩個函式係插件開發嘅入門鑰匙。

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

創建你第一個插件:問候小工具

我哋會創建一個叫做「每日問候」嘅簡單插件。佢會喺網站嘅管理後台儀表板顯示一個自訂嘅歡迎小工具。

建立插件主檔案

首先,喺 wp-content/plugins/ 目錄下開個新資料夾,改名叫 my-first-greeting-plugin。喺呢個文件夾入面,創建主插件文件 my-first-greeting-plugin.php

每個插件都必須以標準嘅插件頭部註釋開始,呢個係WordPress識別插件資訊嘅標識。打開主檔案,輸入以下代碼:

<?php
/**
 * Plugin Name: 每日问候
 * Plugin URI:  https://www.yourwebsite.com/my-first-greeting-plugin
 * Description: 这是一个示例插件,用于在仪表盘显示个性化问候。
 * Version:     1.0.0
 * Author:      Your Name
 * Author URI:  https://www.yourwebsite.com
 * License:     GPL v2 or later
 * Text Domain: my-first-greeting
 */

保存檔案之後,入去 WordPress 後台嘅「插件」頁面,你應該會睇到「每日問候」插件出現喺列表度,而且可以啟動佢。目前佢仲未有任何功能。

推薦閱讀 WordPress插件開發終極指南:從零開始打造你的第一個插件

為儀表板加小工具

跟住落嚟,我哋會用 WordPress 嘅 wp_dashboard_setup 動作掛鈎嚟加一個自訂嘅儀表板小工具。喺主檔案嘅頭部註解下面,繼續加以下嘅代碼:

// 添加仪表盘小工具
function mfgp_add_dashboard_widget() {
    wp_add_dashboard_widget(
        'mfgp_dashboard_widget',          // 小工具唯一ID
        '每日问候',                       // 小工具标题
        'mfgp_dashboard_widget_content'  // 显示内容的回调函数
    );
}
add_action( 'wp_dashboard_setup', 'mfgp_add_dashboard_widget' );

// 定义小工具内容
function mfgp_dashboard_widget_content() {
    $user = wp_get_current_user();
    $hour = date('G'); // 获取当前小时(24小时制)

if ( $hour &gt;= 5 &amp;&amp; $hour < 12 ) {
        $greeting = '早上好';
    } elseif ( $hour >= 12 &amp;&amp; $小時 &lt; 18 ) {
        $greeting = &#039;下午好&#039;;
    } else {
        $greeting = &#039;晚上好&#039;;
    }

echo &#039;<p>' . sprintf( esc_html__( '%s,%s!欢迎回来。', 'my-first-greeting' ), $greeting, esc_html( $user-&gt;display_name ) ) . '</p>';
    echo '<p>' . esc_html__( '这是你的第一个插件创建的问候小工具。', 'my-first-greeting' ) . '</p>';
}

呢段程式碼做咗兩件事:首先,佢定義咗一個函數 mfgp_add_dashboard_widget,使用 wp_add_dashboard_widget 函數註冊一個小工具。跟住,定義咗 mfgp_dashboard_widget_content 函數嚟產生小工具嘅內容,佢會根據一日中唔同時間顯示唔同嘅問候語,同埋稱呼當前登入嘅用戶名。注意我哋用咗 esc_html__() 同埋 esc_html() 函數進行翻譯準備同輸出轉義,呢個係確保安全性同國際化嘅重要實踐。

激活咗插件之後,重新整理儀表板頁面,你就會睇到「每日問候」小工具喇。

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

插件功能增強同安全實踐

一個基本嘅插件已經完成,但係要令佢更加穩陣、更加專業,我哋需要關注安全、可維護性同用戶設定。

添加插件設定頁面

讓用戶可以自訂問候語會更加有用。我哋會為插件創建一個簡單嘅設定頁面。

首先,用 admin_menu 動作掛鈎加一個子選單頁:

推薦閱讀 WordPress插件開發入門指南:從零開始構建你嘅第一個自定義插件

// 添加设置菜单
function mfgp_add_admin_menu() {
    add_options_page(
        '每日问候设置',                // 页面标题
        '每日问候',                    // 菜单标题
        'manage_options',             // 所需权限
        'my-first-greeting-plugin',   // 菜单slug
        'mfgp_settings_page_content' // 回调函数
    );
}
add_action( 'admin_menu', 'mfgp_add_admin_menu' );

然後,創建設置頁面嘅內容、註冊設定選項同處理表單儲存:

// 设置页面内容
function mfgp_settings_page_content() {
    ?&gt;
    <div class="wrap">
        <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
        <form action="/yue/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            settings_fields( 'mfgp_settings_group' ); // 输出安全字段
            do_settings_sections( 'my-first-greeting-plugin' ); // 输出设置区块
            submit_button(); // 输出提交按钮
            ?>
        <input type="hidden" name="trp-form-language" value="yue"/></form>
    </div>
    <?php
}

// 初始化设置
function mfgp_settings_init() {
    register_setting(
        'mfgp_settings_group', // 选项组名
        'mfgp_custom_message', // 选项名
        array( 'sanitize_callback' => 'sanitize_text_field' ) // 清理回调
    );

add_settings_section(
        'mfgp_section', // 区块ID
        '自定义问候设置', // 区块标题
        null, // 区块描述回调(无)
        'my-first-greeting-plugin' // 所属页面
    );

add_settings_field(
        'mfgp_field',
        '自定义问候语前缀',
        'mfgp_field_callback', // 输出字段HTML的回调
        'my-first-greeting-plugin',
        'mfgp_section'
    );
}
add_action( 'admin_init', 'mfgp_settings_init' );

// 设置字段的回调函数
function mfgp_field_callback() {
    $value = get_option( 'mfgp_custom_message', '祝您有愉快的一天,' );
    echo '<input type="text" name="mfgp_custom_message" value="' . esc_attr( $value ) . '" class="regular-text" />';
    echo '<p class="description">呢段文字會加喺問候語前面。</p>';
}

最後,修改小工具內容函數,令用戶嘅自訂設定生效:

InterServer 共享主機
共享主機:每月1TB,只需£2.50;首月只需£0.10,使用優惠碼 tryinterserver。461個雲端應用程式腳本,一鍵安裝。
// 更新小工具内容函数,使用自定义消息
function mfgp_dashboard_widget_content() {
    $user = wp_get_current_user();
    $hour = date('G');
    $custom_msg = get_option( 'mfgp_custom_message', '祝您有愉快的一天,' );

if ( $hour &gt;= 5 &amp;&amp; $hour < 12 ) {
        $greeting = '早上好';
    } elseif ( $hour >= 12 &amp;&amp; $小時 &lt; 18 ) {
        $greeting = &#039;下午好&#039;;
    } else {
        $greeting = &#039;晚上好&#039;;
    }

echo &#039;<p>' . esc_html( $custom_msg ) . sprintf( esc_html__( '%s,%s!', 'my-first-greeting' ), $greeting, esc_html( $user-&gt;display_name ) ) . '</p>';
}

而家,喺 WordPress 後台嘅「設定」選單下會出現「每日問候」選項頁,管理員可以儲存一段自訂嘅問候前綴。

遵循安全同編碼標準

喺開發過程入面,必須要跟從 WordPress 安全實踐:對所有嚟自用戶或者數據庫嘅、即將輸出嘅數據使用適當嘅轉義函數(如 esc_html, esc_attr, esc_url);對所有用戶輸入進行驗證同埋清理(例如使用 sanitize_text_field);使用 wp_kses_postwp_kses 嚟容許安全嘅 HTML。同時,建議跟從 WordPress 官方 PHP 編碼標準,以確保代碼清晰同一致。

插件國際化同發佈準備

為咗你個插件可以俾全球用戶用,國際化係必不可少嘅步驟。同時,為咗準備發布到官方目錄,亦都需要跟從一啲規範。

實現插件國際化

我哋已經喺代碼度用咗 esc_html__() 去包裝需要翻譯嘅字串。要完成國際化,你就要喺插件目錄度建立一個 languages 資料夾。然後,喺主檔案開頭註解之後加以下呢段代碼,載入文字域:

// 加载文本域以实现国际化
function mfgp_load_textdomain() {
    load_plugin_textdomain( 'my-first-greeting', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action( 'plugins_loaded', 'mfgp_load_textdomain' );

之後,你可以用好似 Poedit 咁嘅工具,掃描插件代碼入面嘅翻譯字串,生成 .pot 模板檔案,並為唔同語言(例如中文 zh_CN)建立 .po 同埋編譯好嘅 .mo 檔案,放入 languages 資料夾。

準備發佈到官方目錄

如果你打算將外掛提交到 WordPress.org 外掛目錄,需要確保程式碼質素,並包含必要嘅元數據檔案。例如,建立一個 readme.txt 檔案,其格式必須符合 WordPress 嘅特定規範,包含插件名稱、描述、安裝步驟、常見問題、更新日誌等。另外,考慮加一個卸載鈎子,用嚟喺用家刪除插件嗰陣清理數據庫入面嘅選項:

// 插件卸载时清理选项
function mfgp_uninstall_hook() {
    delete_option( 'mfgp_custom_message' );
}
register_uninstall_hook( __FILE__, 'mfgp_uninstall_hook' );

摘要

透過構建呢個「每日問候」插件,我哋完整行過咗 WordPress 插件開發嘅核心流程:由建立基礎檔案結構、利用動作鈎子添加功能,到創建管理介面、實現安全規範同國際化準備。關鍵在於理解同熟練運用 WordPress 嘅鈎子系統,並始終將安全性同代碼標準擺喺首位。呢個簡單嘅例子係你插件開發之旅嘅起點,你可以喺呢個基礎上探索更複雜嘅短代碼、自訂文章類型、REST API 端點等功能,開發出功能強大嘅專業插件。

常見問題

插件必須放喺邊個目錄?

WordPress 插件必須擺喺網站嘅 wp-content/plugins/ 目錄下。每個插件可以係一個獨立嘅 PHP 檔案,但更常見係一個以插件命名嘅資料夾,裏面包含主檔案同其他資源。

點解我嘅插件喺後台列表中唔顯示?

請檢查主插件檔案嘅頭部註釋(Plugin Name, Description 等)格式係咪正確同完整。確保檔案位於正確嘅目錄,同埋 WordPress 有權限讀取該檔案。另外,檢查 PHP 代碼開頭係咪冇多餘嘅空格或字符。

點樣調試插件中嘅 PHP 錯誤?

wp-config.php 檔案入面,將 WP_DEBUG 常數設定為 true。呢個設定會容許 WordPress 喺頁面上顯示 PHP 錯誤、警告同通知。請注意,呢個功能只係喺開發環境先好啟用,上線之前一定要閂返佢。

插件同主題嘅 functions.php 檔案有咩分別?

喺主題嘅 functions.php 入面加嘅功能會同個主題綁埋一齊。當你轉主題嗰陣,呢啲功能可能會用唔到。而插件提供嘅功能就唔受主題影響,無論你用緊邊個主題,只要插件係啟用狀態,功能就會一直用到。對於一啲通用嘅功能,開發插件會係更好嘅選擇。

點樣可以令其他開發者擴展我嘅插件?

你可以透過提供自訂嘅「動作掛鉤」同「過濾器掛鉤」嚟俾其他開發者擴展你嘅插件。用 do_action() 建立動作掛鉤,喺佢哋需要注入代碼嘅地方「做動作」。用 apply_filters() 建立過濾器掛鉤,容許佢哋修改你插件入面嘅某啲數據值。呢個係 WordPress 生態系統入面插件之間協作嘅通用模式。