一句话结论
写一个 WordPress 插件,最小成本就是「一个带插件头注释的 PHP 文件」:加一个 Plugin Name 头、用 add_shortcode() 暴露一个短代码、用 register_activation_hook() 处理启用时的初始化,就能在后台「插件」里出现并运行。本文带你从零捏出第一个能用的插件,并讲清钩子(hooks)与短代码的正确写法。
一、插件的基本形态
WordPress 插件本质上是一个带特定头注释的 PHP 文件。推荐做法是建一个以插件命名的文件夹,里面放主文件,避免和别的插件撞名:
wp-content/plugins/my-first-plugin/my-first-plugin.php
主文件顶部必须有插件头(只在一个文件里写):
/**
* Plugin Name: My First Plugin
* Description: 我的第一个 WordPress 插件
* Version: 1.0.0
* Author: jin
* License: GPL-2.0-or-later
*/
保存后,后台「插件」列表就会多出这一项。仅此而已,一个插件就「存在」了。
二、用短代码输出内容
短代码(shortcode)是最快的「把动态内容塞进文章/页面」的方式。注册一个 [wporg] 标签:
add_action( 'init', 'myplugin_register_shortcodes' );
function myplugin_register_shortcodes() {
add_shortcode( 'greet', 'myplugin_greet_shortcode' );
}
function myplugin_greet_shortcode( $atts = [], $content = null ) {
$atts = shortcode_atts( array( 'name' => '访客' ), $atts, 'greet' );
return '你好,' . esc_html( $atts['name'] ) . '!';
}
短代码回调只能 return 字符串,不能直接 echo。直接输出会导致内容跑到页面错误位置。这是新手最常踩的坑。
三、钩子:插件与 WordPress 对话的方式
WordPress 靠「钩子」在固定时机让你插入逻辑,分两类:
- Action(动作):在某一时刻「做一件事」,如
init、wp_head。 - Filter(过滤器):把一段内容「改完再还给系统」,如
the_content。
三个最基础的插件生命周期钩子:
register_activation_hook( __FILE__, 'myplugin_activate' );
register_deactivation_hook( __FILE__, 'myplugin_deactivate' );
register_uninstall_hook( __FILE__, 'myplugin_uninstall' );
分别在启用、停用、删除时触发,用来建默认选项、清临时数据、删干净自己留下的痕迹。
激活钩子里为什么不能直接 add_action?
注册激活钩子要在插件被包含之前完成,因此不能把它写进
plugins_loaded 或 init 内部;用 __FILE__ 作为第一参数是官方推荐写法,能正确拼出 activate_<插件路径> 这个动作名。四、从零到上线的步骤
- 在 wp-content/plugins 下建文件夹 my-first-plugin,新建同名 PHP 主文件。
- 写入插件头注释(Plugin Name 必填),保存后到后台启用。
- 用 add_action(‘init’) 注册一个短代码,回调里 return 内容。
- 用 register_activation_hook 在启用时写入默认选项(如 update_option)。
- 在文章里写 [greet name=”小明”] 验证输出,确认无 PHP 报错。
相关阅读
官方文档:Plugin Basics插件一定要放在自己的文件夹里吗?
单个 PHP 文件可以直接放 plugins 根目录(如 Hello Dolly),但多文件插件务必建文件夹,避免和其他插件文件名冲突、也方便管理。
短代码名字会被别的插件抢走吗?
会。标签名全局唯一,重复时「后加载的覆盖先加载的」。务必用带前缀的标签(如 myplugin_greet)降低冲突概率。
启用钩子能放数据库初始化吗?
可以,常见做法是启用时写入默认选项;但要结合 uninstall 钩子在删除时清理,否则会留下脏数据。
插件和主题里的 functions.php 有什么区别?
主题负责「展示」,插件负责「功能」。把功能写进插件,换主题时功能不丢——这是官方推荐的实践。









评论 (0)