用途
本技能用于指导开发者构建安全的 WordPress 插件,覆盖钩子(hooks)、数据库交互、Settings API、自定义文章类型(custom post types)与 REST API 等核心开发内容,并强调安全基础与常见陷阱的预防。
主要能力
- 架构模式选择:提供 Simple(仅函数,少于 5 个函数)、OOP(中型插件)、PSR-4(现代/大型插件,2025 年后推荐)三种架构模式。
- 插件头部声明:仅 Plugin Name 为必填,示例包含 Version、Requires at least、Requires PHP、Text Domain 等字段。
- 安全基础五要素:唯一前缀、ABSPATH 检查、Nonce、输入清理与输出转义、预处理语句。
- 安全三一原则:输入清理(sanitize_)、逻辑验证、输出转义(esc_)。
- Nonce 与 CSRF 防护:表单使用 wp_nonce_field() 与 wp_verify_nonce(),AJAX 使用 check_ajax_referer() 与 wp_localize_script()。
- 数据库安全:使用 $wpdb->prepare() 配合占位符(%s 字符串、%d 整数、%f 浮点数),LIKE 查询使用 $wpdb->esc_like()。
- 权限校验:使用 current_user_can() 而非仅 is_admin(),常见能力包括 manage_options、edit_posts、read。
- 29 个已知问题预防:涵盖 SQL 注入、XSS、CSRF、权限缺失、直接文件访问、前缀冲突、重写规则刷新、瞬态清理、脚本全局加载、保存时未清理、LIKE 查询错误、extract() 使用、REST API 权限回调缺失、卸载钩子重复注册、停用时删除数据、弃用函数、文本域不匹配、依赖缺失、自动保存触发元数据保存、admin-ajax 性能、区块编辑器 show_in_rest 缺失等。
使用方式
- 每个 PHP 文件顶部添加
if ( ! defined( 'ABSPATH' ) ) exit;。 - 所有全局代码(函数、类、常量、选项、瞬态、元键)使用 4-5 字符唯一前缀,避免使用 wp_、__、_。
- 表单与 AJAX 请求必须验证 Nonce。
- 所有含用户输入的数据库查询使用 $wpdb->prepare()。
- 保存前使用 sanitize_() 清理,显示前使用 esc_() 转义。
- 注册自定义文章类型时,仅在激活/停用钩子中刷新重写规则,切勿在每次页面加载时刷新。
- 使用 uninstall.php 进行永久清理,而非停用钩子。
- 遵循 WordPress 编码标准(制表符缩进、Yoda 条件)。
- 新项目推荐使用 REST API 替代 admin-ajax.php(性能约快 10 倍)。
- 为 REST API 端点添加 permission_callback,敏感端点设置 show_in_index => false。
适用场景
- 开发 WordPress 插件,尤其是需要处理用户输入、数据库操作、表单提交、AJAX 或 REST API 的场景。
- 需要遵循安全最佳实践、避免常见漏洞的插件项目。
- 从简单函数式插件向 OOP 或 PSR-4 架构迁移的项目。
- 需要注册自定义文章类型、设置页面或区块编辑器支持的插件。
限制
- 依赖 WordPress 5.9+、PHP 7.4+(最低),推荐 PHP 8.0+,兼容 PHP 8.5。
- 最新版本信息:WordPress 6.9+(2025 年 12 月 2 日),最后更新 2026-01-21。
- 无其他依赖。
- 资料中未提供收费、价格、平台或效果保证等信息。