WordPress 插件开发教程:从零开始创建你的第一个插件
第一部分:基础概念
在开始编码之前,我们需要了解一些核心概念。

什么是 WordPress 插件?
WordPress 插件是用 PHP 编写的脚本,它们可以扩展 WordPress 的核心功能,你可以通过插件添加新的功能(如表单、滑块、商城)、修改现有功能(如修改默认邮件内容)或集成外部服务(如接入社交媒体 API)。
插件的优势:
- 模块化: 不修改 WordPress 核心文件,升级 WordPress 时不会丢失你的功能。
- 可重用: 可以在不同网站上使用。
- 易于分享: 可以打包发布到 WordPress.org 官方插件库。
插件的工作原理
WordPress 通过一个叫做 “钩子”(Hooks) 的机制来管理插件,钩子就像是 WordPress 系统预留的“接口”,让你的代码可以在特定的时间点“挂载”上去,从而影响 WordPress 的行为。
- 动作钩子: 允许你在特定事件发生时执行一段代码,在文章发布前、在页脚加载后等。
- 常用函数:
add_action()
- 常用函数:
- 过滤器钩子: 允许你修改 WordPress 传递给它的数据,修改文章的标题、修改文章的摘要内容等。
- 常用函数:
add_filter()
- 常用函数:
开发环境准备
你需要一个本地的 WordPress 开发环境,强烈推荐使用 Local (由 WP Engine 开发,免费且易用) 或 XAMPP/MAMP + WordPress 的组合。

第二部分:创建你的第一个插件
我们将创建一个名为 "Hello World" 的简单插件,它会在 WordPress 管理员后台的头部显示一条欢迎信息。
步骤 1:创建插件文件夹和文件
- 在你的 WordPress 网站的
wp-content/plugins/目录下,创建一个新的文件夹,我们将其命名为my-first-plugin。 - 在
my-first-plugin文件夹中,创建一个新的 PHP 文件,我们将它命名为my-first-plugin.php。
你的文件结构应该是这样的:
your-website/
└── wp-content/
└── plugins/
└── my-first-plugin/
└── my-first-plugin.php
步骤 2:编写插件头部信息
打开 my-first-plugin.php 文件,并添加以下代码,这是 WordPress 识别插件所必需的“头部注释”。
<?php /** * Plugin Name: My First Plugin * Plugin URI: https://example.com/ * Description: A simple plugin that adds a custom welcome message to the admin dashboard. * Version: 1.0.0 * Requires at least: 5.2 * Requires PHP: 7.2 * Author: Your Name * Author URI: https://your-website.com/ * License: GPL v2 or later * License URI: https://www.gnu.org/licenses/gpl-2.0.html * Text Domain: my-first-plugin * Domain Path: /languages */
说明:

Plugin Name: 插件的名称,这是必须的。Description: 插件的简短描述。Version: 插件的版本号。- 其他信息是可选的,但建议填写完整,这会让你的插件看起来更专业。
步骤 3:激活插件
登录你的 WordPress 后台,进入 插件 -> 已安装插件 页面,你应该能在列表中看到 "My First Plugin"。
点击 “现在激活”。
步骤 4:使用动作钩子添加功能
我们的目标是让插件在管理员后台的头部显示一条消息,我们可以使用 admin_head 这个动作钩子,它会在管理员后台的 <head> 标签被加载时触发。
在 my-first-plugin.php 文件中,头部注释下方添加以下代码:
<?php
/**
* ... (上面的头部注释) ...
*/
// 激活插件时执行的功能
function my_first_plugin_activate() {
// 可以在这里做一些初始化操作,比如添加默认设置
}
register_activation_hook( __FILE__, 'my_first_plugin_activate' );
// 停用插件时执行的功能
function my_first_plugin_deactivate() {
// 可以在这里做一些清理操作
}
register_deactivation_hook( __FILE__, 'my_first_plugin_deactivate' );
// 添加欢迎消息到管理后台头部
function my_custom_admin_message() {
echo '<style>
.my-admin-notice {
background: #f0f8ff;
border-left: 4px solid #2ea3f2;
padding: 15px;
margin: 15px 0;
}
</style>';
echo '<div class="my-admin-notice">';
echo '<h4>你好,管理员!</h4>';
echo '<p>感谢你激活 "My First Plugin" 插件!这是一个来自插件的欢迎消息。</p>';
echo '</div>';
}
// 使用 add_action 函数将 my_custom_admin_message 函数挂载到 admin_head 钩子上
add_action( 'admin_head', 'my_custom_admin_message' );
代码解释:
register_activation_hook()和register_deactivation_hook():这两个函数分别定义了插件激活和停用时应该执行的函数,是插件开发中的良好实践。my_custom_admin_message():我们自定义的函数,它使用echo输出 HTML 代码。add_action( 'admin_head', 'my_custom_admin_message' );:这是核心!它告诉 WordPress:“嘿,请在执行admin_head这个动作时,顺便也执行一下我写的my_custom_admin_message函数。”
步骤 5:查看效果
刷新你的 WordPress 后台页面(任何页面都可以),你应该会在页面顶部看到你添加的蓝色欢迎框!
恭喜!你已经成功创建了你的第一个 WordPress 插件!
第三部分:进阶示例 - 创建一个简单的“文章点赞”插件
让我们再做一个更复杂的插件,它允许读者为文章点赞,并在文章中显示点赞数。
步骤 1:创建插件结构
在 wp-content/plugins/ 下创建一个名为 post-liker 的文件夹,并在其中创建 post-liker.php 文件。
步骤 2:编写插件头部和基础代码
<?php
/**
* Plugin Name: Post Liker
* Plugin URI: https://example.com/
* Description: A simple plugin that allows users to like posts.
* Version: 1.0.0
* Author: Your Name
*/
// 防止直接访问此文件
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// 定义常量,方便后续调用
define( 'POST_LIKER_VERSION', '1.0.0' );
步骤 3:创建点赞功能
我们需要:
- 一个函数来处理点赞请求(AJAX)。
- 一个函数来在文章中显示点赞按钮和数量。
A. 处理点赞请求
// 处理点赞的 AJAX 请求
function post_liker_handle_like() {
// 1. 验证 nonce,防止 CSRF 攻击
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'post_liker_nonce' ) ) {
wp_die( '安全检查失败' );
}
// 2. 获取文章 ID
$post_id = isset( $_POST['post_id'] ) ? intval( $_POST['post_id'] ) : 0;
// 3. 检查文章 ID 是否有效
if ( $post_id <= 0 ) {
wp_die( '无效的文章 ID' );
}
// 4. 获取当前文章的点赞数(存储在 post_meta 中)
$likes = get_post_meta( $post_id, '_post_likes', true );
$likes = empty( $likes ) ? 0 : intval( $likes );
// 5. 增加点赞数
$new_likes = $likes + 1;
update_post_meta( $post_id, '_post_likes', $new_likes );
// 6. 返回新的点赞数(JSON 格式)
wp_send_json_success( array( 'likes' => $new_likes ) );
}
// 使用 wp_ajax_ 和 wp_ajax_nopriv_ 钩子来处理登录和非登录用户的请求
add_action( 'wp_ajax_post_liker_handle_like', 'post_liker_handle_like' );
add_action( 'wp_ajax_nopriv_post_liker_handle_like', 'post_liker_handle_like' );
B. 在文章中显示点赞按钮
// 在文章内容末尾添加点赞按钮
function post_liker_add_like_button( $content ) {
// 只在文章页面显示
if ( is_single() ) {
$post_id = get_the_ID();
$likes = get_post_meta( $post_id, '_post_likes', true );
$likes = empty( $likes ) ? 0 : intval( $likes );
// 生成 nonce
$nonce = wp_create_nonce( 'post_liker_nonce' );
// 构建按钮 HTML
$button_html = '
<div class="post-liker-container" style="margin-top: 20px; text-align: center;">
<button class="post-liker-button" data-post-id="' . esc_attr( $post_id ) . '" data-nonce="' . esc_attr( $nonce ) . '">
👍 点赞
</button>
<span class="post-liker-count">点赞数: ' . esc_html( $likes ) . '</span>
</div>';
// 将按钮附加到文章内容
$content .= $button_html;
}
return $content;
}
add_filter( 'the_content', 'post_liker_add_like_button' );
C. 添加前端 JavaScript
我们需要一段 JavaScript 来发送 AJAX 请求并更新页面。
// 注册并加载前端 JavaScript
function post_liker_enqueue_scripts() {
// 只在文章页面加载脚本
if ( is_single() ) {
wp_enqueue_script(
'post-liker-script', // 脚本唯一标识符
plugin_dir_url( __FILE__ ) . 'js/post-liker.js', // 脚本路径
array( 'jquery' ), // 依赖 jQuery
POST_LIKER_VERSION, // 版本号
true // 在 footer 加载
);
}
}
add_action( 'wp_enqueue_scripts', 'post_liker_enqueue_scripts' );
步骤 4:创建 JavaScript 文件
在 post-liker 文件夹中创建一个 js 文件夹,并在其中创建 post-liker.js 文件。
// post-liker.js
jQuery(document).ready(function($) {
$('.post-liker-button').on('click', function(e) {
e.preventDefault(); // 阻止按钮的默认行为
var $button = $(this);
var $countSpan = $button.siblings('.post-liker-count');
var postId = $button.data('post-id');
var nonce = $button.data('nonce');
// 禁用按钮,防止重复点击
$button.prop('disabled', true);
$button.text('点赞中...');
// 发送 AJAX 请求
$.ajax({
type: 'POST',
url: ajaxurl, // WordPress 定义的 AJAX URL
data: {
action: 'post_liker_handle_like', // 对应 PHP 中的 action
post_id: postId,
nonce: nonce
},
success: function(response) {
if (response.success) {
// 更新点赞数
$countSpan.text('点赞数: ' + response.data.likes);
$button.text('已点赞');
} else {
alert('点赞失败,请重试。');
$button.prop('disabled', false);
$button.text('👍 点赞');
}
},
error: function() {
alert('网络错误,请检查连接后重试。');
$button.prop('disabled', false);
$button.text('👍 点赞');
}
});
});
});
步骤 5:激活并测试
- 激活 "Post Liker" 插件。
- 打开任意一篇文章,你应该会看到文章末尾有一个“点赞”按钮和当前的点赞数(0)。
- 点击按钮,按钮会变成“已点赞”,点赞数会变成 1,刷新页面,点赞数依然保留(因为我们用
post_meta存储了它)。
第四部分:最佳实践和资源
最佳实践
- 安全第一:
- Always validate and sanitize all user input. (始终验证和清理所有用户输入),使用
intval(),sanitize_text_field(),esc_attr()等函数。 - Use Nonce for all forms and AJAX requests. (为所有表单和 AJAX 请求使用 Nonce),这是防止 CSRF 攻击的关键。
- Always validate and sanitize all user input. (始终验证和清理所有用户输入),使用
- 国际化:
- 使用
__(),_e(),_x()等函数包裹所有要显示给用户的文本,然后使用.pot文件进行翻译。
- 使用
- 代码风格:
遵循 WordPress 编码标准(与 PHP-FIG PSR-2 类似),保持代码整洁和一致。
- 性能:
- 避免在循环中执行数据库查询。
- 合理使用缓存,
wp_cache_get()和wp_cache_set()。
- 版本控制:
使用 Git 等版本控制系统管理你的插件代码。
推荐资源
- 官方文档 (必看):
- Plugin Handbook: WordPress 插件开发最权威、最全面的指南。
- Plugin API / Hooks: 钩子(动作和过滤器)的详细列表和用法。
- 学习网站:
- 社区:
- WordPress.org Support Forums: 寻求帮助的好地方。
- WordPress Stack Exchange: 类似 Stack Overflow 的问答社区,问题质量很高。
希望这份教程能帮助你开启 WordPress 插件开发之旅!从简单的开始,逐步尝试更复杂的功能,多读官方文档,多看优秀插件的源码,你很快就能成为一名熟练的 WordPress 插件开发者。
