WP DEVELOP

EP125. “后台设置页面与用 PHP 类避免命名冲突”

首页 WordPress 开发课程 插件开发 CH1:PHP 基础 · EP125
约 8 分钟· #EP125#插件开发 CH1: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 才能正确找到并调用类里的方法
  • 用类组织代码后,类内部的方法名可以随便取得很短很直白(例子里改成了 adminPageourHTML),不用再费心思拼类似 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_menuWP 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