WordPress插件开发入门指南:从零到一,搭建你的第一个功能扩展

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

準備工作與環境搭建

在開始編寫代碼之前,你需要一個合適的開發環境。這包括一個本地的 WordPress 安裝和一個代碼編輯器。推薦使用 XAMPP、MAMP、Local by Flywheel 或 Laragon 等工具來快速搭建本地服務器環境。確保你的環境運行着較新版本的 PHP(建議 7.4 及以上)和 MySQL/MariaDB。

接下來,你需要了解 WordPress 插件的基本結構。一個插件最核心的文件是一個主 PHP 文件,其文件名和目錄名可以自定義,但必須包含一個特定的插件頭註釋,用於向 WordPress 聲明你的插件。你可以在 WordPress 安裝目錄的 wp-content/plugins 文件夾下創建一個新文件夾,例如 my-first-plugin

在這個文件夾內,創建你的主插件文件,例如命名為 my-first-plugin.php。這個文件的開頭必須包含標準的插件信息註釋。

推荐阅读 入门级 WordPress 插件开发指南:从零开始构建你的第一个自定义功能扩展程序

创建你的第一个插件文件

現在,讓我們動手創建插件的基礎骨架。在你的插件目錄中,打開主 PHP 文件,並寫入以下標準的插件頭信息。

UltaHost WordPress 主機
30天退款保證,無限帶寬與數據庫,免費的 DDoS 防護,購買3年優惠50%
<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于学习的 WordPress 插件示例。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

這段註釋是 WordPress 識別插件的關鍵。其中,Plugin Name 是必填項,其他均為可選。保存文件後,你可以在 WordPress 後台的“插件”頁面中看到這個新插件,並可以激活它。目前它還沒有任何功能。

為插件添加一個簡單功能

一個最簡單的功能是在網站的管理後台添加一個自定義的管理菜單。我們將使用 add_action 函數掛載到 admin_menu 這個動作鈎子上。

在主插件文件中,註釋塊之後,添加以下代碼:

// 在管理菜单中添加一个顶级菜单
function mfp_add_admin_menu() {
    add_menu_page(
        '我的第一个插件设置', // 页面标题
        '我的插件',           // 菜单标题
        'manage_options',     // 权限要求
        'my-first-plugin',    // 菜单 slug
        'mfp_settings_page',  // 回调函数,用于输出页面内容
        'dashicons-admin-generic', // 图标(可选)
        6                     // 菜单位置(可选)
    );
}
add_action('admin_menu', 'mfp_add_admin_menu');

// 定义设置页面的回调函数
function mfp_settings_page() {
    ?>
    <div class="wrap">
        <h1></h1>
        <p>欢迎来到我的第一个插件的设置页面!</p>
        <form method="post" action="/zh-hk/options.php/" data-trp-original-action="options.php">
            <?php
            // 后续可以在这里添加设置字段
            ?>
            <p class="submit">
                <input type="submit" name="submit" id="submit" class="button button-primary" value="保存更改">
            </p>
        <input type="hidden" name="trp-form-language" value="zh-hk"/></form>
    </div>
    &lt;?php
}

這段代碼創建了一個新的頂級菜單“我的插件”,點擊後會進入一個簡單的設置頁面。這裏使用了 add_menu_page 函數來註冊菜單,並定義了一個回調函數 mfp_settings_page 來渲染頁面內容。

推荐阅读 WordPress插件开发入门指南:从零到一构建你的第一个功能插件

使用鈎子與過濾器擴展功能

WordPress 的核心強大之處在於其插件架構,這主要通過動作鈎子和過濾器鈎子實現。動作鈎子允許你在特定時刻執行自定義代碼,而過濾器鈎子允許你修改數據。

利用動作鈎子添加頁面腳註

假設我們想在網站的所有文章末尾自動添加一段自定義文本。這可以通過掛載到 the_content 這個過濾器鈎子來實現。注意,雖然名字是“過濾器”,但 the_content 通常用於修改文章內容輸出。

// 在文章内容末尾添加自定义文本
function mfp_append_text_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_append_text_to_content');

這個函數 mfp_append_text_to_content 接收原始的文章內容 $content,在檢查了上下文條件(確保是單獨的文章頁面)後,將一段自定義文本附加到內容末尾,最後返回修改後的內容。通過 add_filter 將其註冊到 the_content 鈎子。

hosting.com 共享主机
高性能配置,搭载 AMD EPYC CPU、NVMe SSD 存储和 LiteSpeed 技术,提供全天候 24 小时专业内部支持,具备 SSL、暴力破解、恶意软件及 DDoS 防护等高级安全措施,节省成本高达 73%。

創建可配置的插件選項

一個實用的插件通常需要一些可由用户配置的選項。WordPress 提供了設置 API 來安全地處理和管理選項。我們將為之前的設置頁面添加一個簡單的文本字段。

首先,我們需要註冊一個設置,並將其添加到已有的菜單頁面中。

// 初始化插件设置
function mfp_settings_init() {
    // 注册一个新的设置到 “reading” 组(或自定义组)
    register_setting('mfp_plugin_settings', 'mfp_custom_message');

// 在现有页面内添加一个设置区域
    add_settings_section(
        'mfp_section_id',
        '自定义消息设置',
        'mfp_section_callback',
        'my-first-plugin'
    );

// 向该区域添加一个字段
    add_settings_field(
        'mfp_field_id',
        '页脚消息',
        'mfp_field_callback',
        'my-first-plugin',
        'mfp_section_id'
    );
}
add_action('admin_init', 'mfp_settings_init');

// 区域描述回调函数
function mfp_section_callback() {
    echo '<p>在这里配置插件在文章末尾显示的消息。</p>';
}

// 字段输出回调函数
function mfp_field_callback() {
    // 从数据库中获取已保存的选项值
    $message = get_option('mfp_custom_message', '本文由“我的第一个插件”为您呈现。');
    echo '<input type="text" name="mfp_custom_message" value="' . esc_attr($message) . '" class="regular-text">';
    echo '<p class="description">输入你想在每篇文章末尾显示的消息。</p>';
}

然後,需要修改之前定義的 mfp_settings_page 函數,在表單中輸出設置字段。

推荐阅读 轻松上手到精通:WordPress插件开发全面指南及实战教程

// 更新后的设置页面回调函数
function mfp_settings_page() {
    ?>
    <div class="wrap">
        <h1></h1>
        <form method="post" action="/zh-hk/options.php/" data-trp-original-action="options.php">
            <?php
            // 输出设置字段、安全随机数和设置组
            settings_fields('mfp_plugin_settings');
            do_settings_sections('my-first-plugin');
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="zh-hk"/></form>
    </div>
    &lt;?php
}

最後,更新之前附加文本的函數,使其使用可配置的選項。

function mfp_append_text_to_content($content) {
    if (is_single() && in_the_loop() && is_main_query()) {
        // 从选项中获取自定义消息,如果不存在则使用默认值
        $custom_text = get_option('mfp_custom_message', '本文由“我的第一个插件”为您呈现。');
        if (!empty($custom_text)) {
            $content .= '<p><em>' . wp_kses_post($custom_text) . '</em></p>';
        }
    }
    return $content;
}

插件國際化與發佈準備

為了讓插件能被全世界的用户使用,國際化是重要的一步。這涉及到使用文本域和翻譯函數包裝所有用户可見的字符串。

InterServer 共享主机
虚拟主机每月价格为 1TB + 5TB,费用为 2.50 美元,首月优惠价为 1TB + 5TB,价格为 0.1 美元。优惠码为 "tryinterserver",支持一键安装 461 款云应用脚本。

使用翻譯函數包裝文本

你需要將所有在插件中輸出的字符串(如 echo 或 `` 返回的文本)用特定的翻譯函數包裹。最常用的是 () 用於翻譯並返回字符串,以及 esc_html__() 用於翻譯並轉義HTML。

修改之前的代碼示例:

// 在管理菜单中添加一个顶级菜单(国际化版本)
function mfp_add_admin_menu() {
    add_menu_page(
        __('我的第一个插件设置', 'my-first-plugin'), // 页面标题
        __('我的插件', 'my-first-plugin'),           // 菜单标题
        'manage_options',
        'my-first-plugin',
        'mfp_settings_page',
        'dashicons-admin-generic',
        6
    );
}
add_action('admin_menu', 'mfp_add_admin_menu');

// 区域描述回调函数(国际化版本)
function mfp_section_callback() {
    echo '<p>' . esc_html__('在这里配置插件在文章末尾显示的消息。', 'my-first-plugin') . '</p>';
}

同時,需要加載文本域。在插件主文件的註釋塊後,添加加載翻譯文件的代碼:

// 加载插件文本域
function mfp_load_textdomain() {
    load_plugin_textdomain('my-first-plugin', false, dirname(plugin_basename(__FILE__)) . '/languages/');
}
add_action('plugins_loaded', 'mfp_load_textdomain');

準備插件壓縮包

在發佈或分享插件之前,你需要創建一個乾淨的發佈包。確保你的插件目錄包含所有必要的文件,並排除像 .git 文件夾、日誌文件或 IDE 配置文件等無關內容。通常,一個最小的插件發佈包應包含:
1. 主插件 PHP 文件。
2. 一個可選的 readme.txt 文件,遵循 WordPress.org 的格式標準,用於在插件目錄中展示。
3. 一個包含翻譯文件的 /languages 文件夾(如果有的話)。
4. 其他必需的 JavaScript、CSS 或圖片資源文件夾。

將整個插件文件夾壓縮成 ZIP 文件,這個文件就可以通過 WordPress 後台的“上傳插件”功能進行安裝,或者提交到 WordPress 官方插件目錄。

总结

通過本篇指南,我們走完了 WordPress 插件開發的核心流程:從環境準備、創建帶有標準插件頭的主文件,到利用動作和過濾器鈎子添加功能,再到使用設置 API 創建可配置的選項頁面,最後介紹了國際化的基礎知識。這為你構建更復雜、更實用的插件奠定了堅實的基礎。記住,良好的代碼結構、遵循 WordPress 編碼標準以及深入理解其鈎子系統,是成為一名優秀插件開發者的關鍵。

常见问题解答(FAQ)

開發 WordPress 插件需要什麼編程基礎?

你需要具備 PHP 編程的基礎知識,因為 WordPress 核心及其插件主要是用 PHP 編寫的。同時,對 HTML、CSS 和 JavaScript 有基本瞭解也會非常有幫助,特別是當你需要自定義管理界面或前端交互時。理解 WordPress 的基本概念,如文章、頁面、分類法和鈎子,也是必不可少的。

插件的主文件必須叫什麼名字?

沒有強制要求。主文件可以是任何有效的 PHP 文件名,但通常建議使用與插件目錄名一致的名稱,例如若目錄名為 my-super-plugin,則主文件可以命名為 my-super-plugin.php。關鍵在於文件頂部的插件頭註釋,WordPress 通過註釋中的 Plugin Name: 來識別插件。

怎样调试我的插件代码?

有多種方法可以調試插件。首先,確保在你的 wp-config.php 文件中開啓 WordPress 調試模式,將 WP_DEBUG 常量被设置为: true。這將在頁面上顯示 PHP 錯誤、警告和通知。此外,可以使用 error_log() 函數將調試信息寫入服務器的錯誤日誌,或者使用更高級的調試工具如 Query Monitor 插件,它可以提供數據庫查詢、鈎子、PHP 錯誤等詳細信息。

我開發的插件如何發佈到 WordPress 官方目錄?

要將插件發佈到 WordPress.org 官方插件目錄,你需要先在 WordPress.org 上註冊一個賬號,然後提交你的插件進行審查。你的插件代碼必須遵循 GNU GPL 許可證,並且包含一個格式正確的 readme.txt 文件。審查團隊會檢查代碼質量、安全性和是否符合目錄指南。通過審查後,你就可以獲得一個 SVN 倉庫,用於管理和更新你的插件版本。