零基础学习 WordPress 插件开发:构建你的第一个自定义功能

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

掌握 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 >= 5 && $hour < 12 ) {
        $greeting = '早上好';
    } elseif ( $hour >= 12 &amp;&amp; $hour &lt; 18 ) {
        $greeting = &#039;下午好&#039;;
    } else {
        $greeting = &#039;晚上好&#039;;
    }

echo &#039;<p>' . sprintf( esc_html__( '%s,%s!欢迎回来。', 'my-first-greeting' ), $greeting, esc_html( $user->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() 函式進行翻譯準備和輸出轉義,這是確保安全性和國際化的重要實踐。

啟用外掛後,重新整理儀表盤頁面,你就能看到“每日問候”小工具了。

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

外掛功能增強與安全實踐

一個基礎的外掛已經完成,但要使其更健壯、更專業,我們需要關注安全、可維護性和使用者配置。

新增外掛設定頁面

讓使用者能自定義問候語會更有用。我們將為外掛建立一個簡單的設定頁面。

首先,使用 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() {
    ?>
    <div class="wrap">
        <h1></h1>
        <form action="/zh-tw/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="zh-tw"/></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+5TB,价格为2.50美元。首月优惠价为1TB+5TB,价格为0.1美元。优惠码为"tryinterserver"。平台提供461个云应用脚本,一键安装便捷。
// 更新小工具内容函数,使用自定义消息
function mfgp_dashboard_widget_content() {
    $user = wp_get_current_user();
    $hour = date('G');
    $custom_msg = get_option( 'mfgp_custom_message', '祝您有愉快的一天,' );

if ( $hour >= 5 && $hour < 12 ) {
        $greeting = '早上好';
    } elseif ( $hour >= 12 &amp;&amp; $hour &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_post 或者 wp_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 端點等功能,開發出功能強大的專業外掛。

常见问题解答(FAQ)

外掛必須放在哪個目錄?

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 生態中外掛間協作的通用模式。