WordPress插件開發完整指南:從零到一建立你嘅第一個功能插件

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

準備工作同環境配置

喺開始寫程式碼之前,你需要一個合適嘅開發環境。呢個包括一個本地嘅 WordPress 安裝、一個程式碼編輯器同埋一啲基礎知識嘅準備。

首先,確保你有一個本地伺服器環境。你可以用 XAMPP、MAMP、Local by Flywheel 或者 Docker 呢啲工具快速搭建。安裝同配置好 WordPress 之後,你就有一個安全嘅沙盒環境,可以喺度做測試而唔使擔心影響線上網站。

其次,你需要一個就手嘅程式碼編輯器。Visual Studio Code、PhpStorm 或者 Sublime Text 都係唔錯嘅選擇,佢哋對 PHP、HTML、JavaScript 同 CSS 都有良好嘅支援,同埋有程式碼高亮、自動補全同除錯功能。

推薦閱讀 從零到一:WordPress插件開發入門與最佳實踐指南

最後,理解 WordPress 插件嘅基本結構好緊要。一個插件本質上係一個或者多個 PHP 檔案,存放喺 WordPress 安裝目錄下面 /wp-content/plugins/ 喺文件夾入面。每個插件都必須有一個主文件,裏面包含特定嘅插件頭部信息,用嚟向 WordPress 系統聲明自己。

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

插件主文件嘅創建同聲明

創建插件嘅第一步係建立主文件同加入正確嘅頭部註釋。呢個文件通常會以插件嘅功能嚟命名,例如 my-first-plugin.php。請喺你本地環境嘅 /wp-content/plugins/ 目錄下開個新資料夾,改名叫 my-first-plugin,然後喺呢個資料夾入面整返個主檔案。

插件頭係插件元資料嘅集合,佢會話俾WordPress知個插件叫咩名、有咩描述、係咩版本、邊個作者整等等。呢度有個最基本嘅插件頭示例:

<?php
/**
 * Plugin Name:       我的第一个功能插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个学习 WordPress 插件开发的示例插件,用于展示基础功能。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

儲存咗呢個檔案之後,登入你嘅WordPress後台,去「插件」頁面,你應該會見到一個叫「我嘅第一個功能插件」嘅新插件出現喺插件列表度。呢個時候你就可以啟動佢,雖然佢暫時仲未有任何實際功能。

核心架構:動作同過濾器掛鉤

WordPress 強大嘅擴展能力核心在於佢嘅掛鉤(Hooks)系統,呢個系統容許開發者喺特定時間點或者數據被使用前/後,插入自己嘅代碼。掛鉤分為兩種:動作(Actions)同過濾器(Filters)。

推薦閱讀 WordPress主題開發入門指南:由零開始打造你嘅專屬網站模板

動作掛鉤容許你喺特定嘅 WordPress 事件發生嗰陣執行自訂函數。例如,當文章發佈嗰陣(publish_post)、喺管理後台加載菜單嗰陣(admin_menu) 或者喺網頁頭部加載腳本嗰陣時(wp_enqueue_scripts)。用 add_action() 函數嚟掛載你嘅函數到動作鈎上。

用動作鈎加後台選單

假設我哋要為插件加個設定頁面到 WordPress 後台。我哋將會用 admin_menu 呢個動作鈎。將以下代碼加到你嘅主文件入面,插件頭信息之後:

// 在管理后台添加菜单
function mfp_add_admin_menu() {
    add_menu_page(
        '我的插件设置',          // 页面标题
        '我的插件',             // 菜单标题
        'manage_options',       // 所需权限
        'my-first-plugin',      // 菜单 slug
        'mfp_settings_page',    // 用于显示页面内容的回调函数
        'dashicons-admin-generic', // 图标(可选)
        80                     // 菜单位置(可选)
    );
}
add_action( 'admin_menu', 'mfp_add_admin_menu' );

// 设置页面的回调函数
function mfp_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
        <p>歡迎嚟到我第一個插件嘅設定頁面!</p>
    </div>
    &lt;?php
}

過濾器鈎就容許你修改數據。佢哋會接收一個值,經過你嘅函數處理之後,必須要返一個修改過嘅值。例如,修改文章標題(the_title)、修改文章內容(the_content)或者修改摘錄長度(excerpt_length)。用 add_filter() 將你嘅函數掛載到過濾器掛鉤上嘅函數。

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

使用過濾器修改文章內容

等我哋創建一個簡單功能:喺每篇文章內容嘅末尾自動加一段版權聲明。

// 在文章内容后添加自定义文本
function mfp_add_copyright_to_content( $content ) {
    // 仅对网站前端的主循环中的文章生效
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<p><em>版權聲明:本文內容歸本站所有,轉載請註明出處。</em></p>';
        $content .= $custom_text;
    }
    return $content;
}
add_filter( 'the_content', 'mfp_add_copyright_to_content' );

實現具體功能:簡碼同短代碼

簡碼(Shortcode)係 WordPress 提供嘅一種強大功能,容許用戶透過喺文章或者頁面度插入一個簡單標籤(例如 [my_shortcode])嚟輸出複雜嘅動態內容或者執行特定功能。咁樣為內容創作者提供咗極大嘅靈活性。

建立同註冊一個簡單嘅簡碼

建立一個簡碼需要兩個步驟:定義簡碼處理函數,然後用 add_shortcode() 函數將其註冊到 WordPress。等我哋建立一個顯示當前日期同問候語嘅簡碼。

推薦閱讀 從容上手到精通:WordPress 插件開發完整指南與實戰教程

// 定义简码的处理函数
function mfp_show_greeting_shortcode( $atts ) {
    // 使用 shortcode_atts 定义默认参数,并合并用户传入的参数
    $atts = shortcode_atts(
        array(
            'name' =&gt; '访客',
        ),
        $atts,
        'greeting'
    );

// 获取当前时间
    $current_time = current_time( 'mysql' );
    $hour = date( 'H', strtotime( $current_time ) );

// 根据时间生成问候语
    if ( $hour &lt; 12 ) {
        $greeting = &#039;上午好&#039;;
    } elseif ( $hour &lt; 18 ) {
        $greeting = &#039;下午好&#039;;
    } else {
        $greeting = &#039;晚上好&#039;;
    }

// 构建输出
    $output = &#039;<div class="mfp-greeting">';
    $output .= sprintf( '<p>一對二,一對二!</p>', esc_html( $atts['name'] ), esc_html( $greeting ) );
    $output .= sprintf( '<p>而家時間係:%s</p>', esc_html( $current_time ) );
    $output .= '</div>';

return $output;
}
// 注册简码,第一个参数是用户使用的标签名
add_shortcode( 'greeting', 'mfp_show_greeting_shortcode' );

而家,用戶可以喺文章編輯器度用 [greeting name="张三"],頁面就會顯示:「張三,下晝好!而家時間係:2026-...」。如果唔帶參數,咁就預設用「訪客」。

進階實踐:建立資料庫表同選項頁

再複雜啲嘅插件可能需要儲存自己嘅數據。WordPress 提供咗兩種主要方法:用 WordPress 選項 API 儲存簡單嘅鍵值對數據,或者建立自訂資料庫表嚟儲存結構化數據。

InterServer 共享主機
共享主機:每月1TB,只需£2.50;首月只需£0.10,使用優惠碼 tryinterserver。461個雲端應用程式腳本,一鍵安裝。

使用選項 API 儲存設定

選項 API 非常適合儲存外掛程式嘅配置資訊。我哋會完善之前建立嘅後台設定頁面,等佢可以儲存同讀取簡單嘅設定。

首先,我哋需要建立一個表單。喺 mfp_settings_page() 函數中,加入一個簡單嘅表單嚟處理設定:

function mfp_settings_page() {
    // 检查用户是否提交了表单
    if ( isset( $_POST['mfp_submit_settings'] ) ) {
        // 安全检查:验证 nonce
        if ( ! isset( $_POST['mfp_settings_nonce'] ) || ! wp_verify_nonce( $_POST['mfp_settings_nonce'], 'mfp_save_settings' ) ) {
            wp_die( '安全验证失败!' );
        }
        // 权限检查
        if ( ! current_user_can( 'manage_options' ) ) {
            wp_die( '权限不足!' );
        }
        // 清理并保存选项
        $custom_message = sanitize_textarea_field( $_POST['custom_message'] );
        update_option( 'mfp_custom_message', $custom_message );
        echo '<div class="notice notice-success is-dismissible"><p>設定已儲存!</p></div>';
    }

// 从数据库读取现有值
    $saved_message = get_option( 'mfp_custom_message', '这是默认的欢迎信息。' );
    ?&gt;
    <div class="wrap">
        <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
        <form method="post" action="" data-trp-original-action="">
            <?php wp_nonce_field( 'mfp_save_settings', 'mfp_settings_nonce' ); ?>
            <table class="form-table">
                <tr>
                    <th scope="row"><label for="custom_message">自訂訊息:</label></th>
                    <td>
                        <textarea name="custom_message" id="custom_message" rows="5" cols="50" class="large-text"><?php echo esc_textarea( $saved_message ); ?></textarea>
                        <p class="description">呢段文字會喺用 [show_message] 短碼嗰陣顯示。</p>
                    </td>
                </tr>
            </table>
            <?php submit_button( '保存更改', 'primary', 'mfp_submit_settings' ); ?>
        <input type="hidden" name="trp-form-language" value="yue"/></form>
    </div>
    &lt;?php
}

然後,我哋創建一個新嘅短碼嚟顯示呢個保存嘅訊息:

function mfp_show_message_shortcode() {
    $message = get_option( 'mfp_custom_message', '这是默认的欢迎信息。' );
    return '<div class="mfp-custom-message">' . wp_kses_post( wpautop( $message ) ) . '</div>';
}
add_shortcode( 'show_message', 'mfp_show_message_shortcode' );

而家,管理員可以喺插件設定頁面自訂訊息,而作者只需要喺文章入面用 [show_message] 短碼就可以輸出呢個訊息。

插件啟動嗰陣創建自訂表

對於需要儲存訂單、日誌等複雜關係型數據嘅插件,可能需要建立自己嘅數據庫表。呢個通常喺插件啟動時執行。WordPress 提供咗 register_activation_hook 嚟定義啟動時執行嘅函數。

注意: 以下代碼只係示例,實際開發中需要更嚴謹嘅錯誤處理同數據庫抽象層(例如 $wpdb)嘅使用。

// 插件激活时运行的函数
function mfp_create_custom_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'mfp_plugin_logs'; // 确保表名唯一
    $charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        log_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
        user_id bigint(20) DEFAULT 0,
        action varchar(255) NOT NULL,
        details text,
        PRIMARY KEY  (id)
    ) $charset_collate;";

// 引入 WordPress 升级 API,用于执行 dbDelta 函数
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}
// 注册激活钩子
register_activation_hook( __FILE__, 'mfp_create_custom_table' );

摘要

透過呢份指南,你已經經歷咗 WordPress 插件開發嘅核心流程。由搭建環境、編寫插件頭開始,你學識咗利用動作同過濾器鉤子嚟擴展 WordPress 功能,透過簡碼為用戶提供靈活嘅內容嵌入方式,並實現咗使用選項 API 儲存設定同創建自定義數據庫表嘅基礎方法。呢啲都係構建一個功能插件嘅基石。記住,良好嘅代碼結構、安全性(例如 nonce 驗證同權限檢查)以及國際化準備係專業插件開發中不可或缺嘅部分。下一步,你可以探索 WordPress REST API、自定義文章類型、元數據(Meta Boxes)以及前端腳本同樣式嘅規範引入,嚟構建更加複雜同強大嘅插件。

常見問題

一個插件係咪只能有一個主檔案?

並非如此。一個插件可以包含多個 PHP 檔案。但必須有一個主檔案,其中包含插件頭資訊,佢係 WordPress 識別插件嘅入口。複雜嘅插件通常會將唔同功能嘅代碼組織喺多個檔案中,透過主檔案引入,以實現更好嘅代碼管理同模組化。

點樣安全噉處理用戶喺前端表單提交嘅數據?

處理用戶提交嘅數據時,必須進行嚴格嘅驗證、清理同轉義。對於輸入,使用 sanitize_text_field()sanitize_email()sanitize_textarea_field() 等函數進行清理。對於輸出到 HTML 頁面嘅數據,使用 esc_html()esc_attr()wp_kses_post() 進行轉義。同時,務必使用 WordPress 嘅 nonce 機制嚟防止跨站請求偽造,並使用 current_user_can() 檢查用戶權限。

我嘅插件點樣避免同其他插件發生函數名衝突?

最佳實踐係使用命名空間(PHP 5.3+)或者將所有函數、類、常量擺喺一個獨特嘅前綴下面。例如,呢本指南入面所有函數都以「mfp_」(My First Plugin 嘅縮寫)開頭。如果你用物件導向編程,將程式碼封裝喺類裏面都係解決命名衝突嘅有效方法。

開發完成之後,點樣將插件分發或者上架到官方目錄?

要將插件提交到 WordPress.org 官方插件目錄,你需要建立一個符合目錄規範嘅插件包,呢個通常包括標準化嘅檔案結構(例如 README.txt)、詳盡嘅翻譯支援、兼容性聲明,同埋確保程式碼跟從 WordPress 編碼標準。你需要喺 WordPress.org 上面申請一個開發者帳號,然後用 SVN 工具將程式碼提交到指定嘅程式碼倉庫。