EP125. “后台设置页面与用 PHP 类避免命名冲突”
🔒 登录后可标记已读把上一讲的测试插件改造成真正的「字数统计」插件骨架:先用 add_options_page() 在后台 Settings 菜单下建一个新的设置页面,输出简单占位 HTML 确认链路通了;再引入 PHP 类 把原本零散的函数收进一个类里,解决「每个函数名都要全局唯一」这个麻烦——类的属性/方法名不需要跟别的插件或 WordPress 核心比拼唯一性,只有类名本身需要唯一。
涉及文件
wp-content/plugins/our-first-unique-plugin/our-first-unique-plugin.php(改写)
代码实现
our-first-unique-plugin.php(完整文件,改用类组织代码):
<?php
/*
Plugin Name: Our Test Plugin
Description: A truly amazing plugin.
Version: 1.0
Author: Brad
Author URI: https://www.udemy.com/user/bradschiff/
*/
class WordCountAndTimePlugin {
function __construct() {
add_action('admin_menu', array($this, 'adminPage'));
}
function adminPage() {
add_options_page('Word Count Settings', 'Word Count', 'manage_options', 'word-count-settings-page', array($this, 'ourHTML'));
}
function ourHTML() { ?>
<div class="wrap">
<h1>Word Count Settings</h1>
</div>
<?php }
}
$wordCountAndTimePlugin = new WordCountAndTimePlugin();
关键改动点:
add_options_page($page_title, $menu_title, $capability, $menu_slug, $callback)是在后台 Settings 子菜单下新增一个页面的标准函数,五个参数依次是:浏览器标签页标题、菜单里显示的短文字、需要的权限能力(manage_options表示只有能管理选项设置的角色——通常是管理员——才能看到这个页面)、页面 URL 用的 slug、负责输出页面内容的回调函数- 类的写法:
class WordCountAndTimePlugin { ... }没有小括号;__construct()是 PHP 类的魔术方法,每次new出一个实例时会自动执行,是放「初始化时要做的事」(比如注册各种add_action/add_filter)的标准位置 $wordCountAndTimePlugin = new WordCountAndTimePlugin();:习惯上把新建的实例存进一个变量(变量名跟类名一致、只是首字母小写),这样如果以后别的插件想要移除这个插件注册的某个 action/filter,可以通过这个变量拿到实例来操作,而不是完全没有入口- 关键技巧——在类的方法之间互相引用要用 PHP 的「callable 数组」语法:
array($this, '方法名')代替普通函数场景下直接传函数名字符串。$this指向当前类实例,第二个元素是方法名字符串——这样add_action/add_options_page才能正确找到并调用类里的方法 - 用类组织代码后,类内部的方法名可以随便取得很短很直白(例子里改成了
adminPage、ourHTML),不用再费心思拼类似our_plugin_settings_link这种冗长又要保证全局唯一的名字——因为方法名的作用域被限制在类内部,不会跟其他插件或 WordPress 核心的全局函数冲突 ourHTML()方法体用「跳出 PHP、写纯 HTML、再跳回 PHP」的写法(function ourHTML() { ?> ... <?php }),比在字符串里拼 HTML 更适合输出大段带格式的标签;class="wrap"是 WordPress 后台页面的标准包裹容器 class,用了它就能自动获得后台统一的间距、字体样式,不需要自己写 CSS
[截图:wp-admin Settings 菜单下新出现的 Word Count 设置页面]
Hook / Function 速查
| 名称 | 类型 | 用途 |
|---|---|---|
admin_menu | WP hook | 后台菜单构建时触发,是添加自定义后台页面的标准挂载点 |
add_options_page(...) | WP 内建 function | 在后台 Settings 子菜单下新增一个设置页面 |
__construct() | PHP 魔术方法 | 类被实例化(new)时自动执行,常用来放初始化逻辑 |
array($this, '方法名') | PHP callable 语法 | 在需要「函数引用」的场景(如 add_action)里指向类的某个方法 |
常见坑
- 类内部方法互相引用时直接传方法名字符串(就像普通函数那样)——类的方法不是全局函数,必须用
array($this, '方法名')这种 callable 数组语法才能被add_action/add_filter等函数正确调用到 - 类名本身没有保证唯一——虽然类内部的方法名不用担心冲突,但类名本身依然是全局作用域的,跟别的插件重名同样会报错,起类名时还是要选一个独特的名字
延伸 / 后续讲座会用到
下一讲要在这个设置页面里加一个跟 WordPress 默认设置页样式一致的表单(两栏布局 + 蓝色 Save Changes 按钮),让网站主可以勾选想显示哪些统计项。
Sources
Udemy:
- Become a WordPress Developer: Unlocking Power With Code — Section 23, EP125