全面指南:如何开发WordPress插件——从零到一,构建你的首个功能性插件

3 分钟阅读时间
2026-03-18
2026-06-03
2,514
通过下方链接进行购物时,您无需支付额外费用,我就能获得佣金。.

準備工作與環境配置

在開始編寫程式碼之前,你需要一個合適的開發環境。這包括一個本地的 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() {
    ?>
    <div class="wrap">
        <h1></h1>
        <p>欢迎来到我的第一个插件的设置页面!</p>
    </div>
    &lt;?php
}

過濾器鉤子則允許你修改資料。它們接收一個值,經過你的函式處理後,必須返回一個修改後的值。例如,修改文章標題(the_title)、修改文章內容(the_content)或修改摘錄長度(excerpt_length)。使用 add_filter() 函式來掛載你的函式到過濾器鉤子上。

hostng.com 共享主机
高效能,配备 AMD EPYC CPU、NVMe SSD 存储和 LiteSpeed,全天候 24 小时专业内部支持,先进的安全措施包括 SSL、暴力破解、恶意软件和 DDoS 防护,节省高达 731 TB/月的带宽成本。

使用過濾器修改文章內容

讓我們建立一個簡單的功能:在每篇文章內容的末尾自動新增一段版權宣告。

// 在文章内容后添加自定义文本
function mfp_add_copyright_to_content( $content ) {
    // 仅对网站前端的主循环中的文章生效
    if ( is_single() && in_the_loop() && 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' => '访客',
        ),
        $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>%s,%s!</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+5TB,价格为2.50美元。首月优惠价为1TB+5TB,价格为0.1美元。优惠码为"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', '这是默认的欢迎信息。' );
    ?>
    <div class="wrap">
        <h1></h1>
        <form method="post" action="" data-trp-original-action="">
            
            <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="zh-tw"/></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)以及前端指令碼和樣式的規範引入,來構建更加複雜和強大的外掛。

常见问题解答(FAQ)

一個外掛只能有一個主檔案嗎?

並非如此。一個外掛可以包含多個 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 工具將程式碼提交到指定的程式碼倉庫。