SuperAPI AI 工具集

wordpress-plugin-fundamentals

编程与开发

查看项目

更新于 10-15 14:17

技能介绍

用途

本技能面向 WordPress 插件开发,讲解如何使用现代 PHP 8.3+ 实践、面向对象架构、Composer 自动加载以及 WordPress 6.7+ API 来构建安全、可维护的插件。内容围绕插件的结构组织、钩子集成、数据库管理与设置页面展开。

当前标准

  • WordPress:6.7+(全站编辑稳定)
  • PHP:推荐 8.3(最低 7.4)
  • 架构:面向对象,采用 PSR-4 自动加载
  • 安全:三层模型(清理、验证、转义)
  • 测试:PHPUnit + WPCS 合规

安装

composer require --dev wp-coding-standards/wpcs:"^3.0"
composer require --dev phpunit/phpunit:"^9.6"

插件架构

目录结构

采用 Composer 自动加载的现代插件组织方式:

my-plugin/
├── my-plugin.php              # 主插件文件(元数据头)
├── composer.json               # 依赖管理(必需)
├── includes/                   # 核心业务逻辑(PSR-4 自动加载)
│   ├── Core.php               # 插件引导/加载类
│   ├── Admin/                 # 管理端功能
│   │   ├── Settings.php
│   │   └── MetaBoxes.php
│   ├── Frontend/              # 面向公众的功能
│   │   └── Shortcodes.php
│   └── API/                   # REST API 端点
│       └── CustomEndpoint.php
├── assets/                     # CSS、JS、图片
│   ├── css/
│   ├── js/
│   └── images/
├── languages/                  # 翻译文件
├── tests/                      # PHPUnit 测试
│   ├── unit/
│   ├── integration/
│   └── bootstrap.php
├── .phpcs.xml.dist            # PHP_CodeSniffer 配置(WPCS)
└── README.md

主插件文件

主插件文件包含插件元数据头、安全防护(阻止直接访问)、插件常量定义、Composer 自动加载引入,以及激活/停用钩子。示例中通过 plugins_loaded 钩子初始化核心类,并在激活与停用时调用相应处理类并刷新重写规则。

核心插件类(单例模式)

includes/Core.php 使用单例模式确保插件只有一个实例。构造函数中依次加载依赖、定义钩子、加载文本域。define_hooks() 注册 init、admin_menu、admin_enqueue_scripts、wp_enqueue_scripts、rest_api_init 等钩子。类中还包含注册自定义文章类型(如 book)、自定义分类法(如 genre)、注册管理菜单、渲染设置页面、按需加载管理端与前端资源、注册 REST 路由等方法。

Composer 配置

composer.json 声明插件类型为 wordpress-plugin,要求 PHP >=8.1,开发依赖包括 WPCS、PHPUnit 与 yoast/phpunit-polyfills,并配置 PSR-4 自动加载映射 MyPlugin\ 到 includes/,同时提供 phpcs、phpcbf、test 脚本。

钩子系统

动作与过滤器对比

  • 动作(Actions):在特定点执行代码,无返回值,使用 do_action() / add_action(),例如发送邮件、记录事件、注册自定义文章类型。
  • 过滤器(Filters):在使用/输出前修改数据,必须返回值,使用 apply_filters() / add_filter(),例如修改文章内容、过滤查询。

常见动作

  • init:注册文章类型、分类法、重写规则。
  • plugins_loaded:在所有插件加载后初始化插件。
  • wp_enqueue_scripts:加载前端 CSS/JS。
  • admin_enqueue_scripts:加载管理端 CSS/JS,可按页面钩子限定加载范围。
  • save_post:文章保存/更新时运行,示例中包含 nonce 验证、自动保存检查、权限检查与元数据保存。

常见过滤器

  • the_content:输出前修改文章内容,示例添加预计阅读时间,并强调必须返回内容。
  • pre_get_posts:执行前修改 WP_Query,示例调整归档页每页数量与排序。
  • excerpt_length:修改摘要字数。

钩子优先级与执行顺序

优先级范围 1-999,默认 10,数字越小越早执行。可通过 remove_action / remove_filter 移除钩子。

创建自定义钩子

  • 自定义动作:通过 do_action( 'my_plugin_order_processed', $order_id, $order_data ) 暴露扩展点,其他开发者可用 add_action 挂接。
  • 自定义过滤器:通过 apply_filters( 'my_plugin_product_price', $price, $product_id ) 允许修改价格,示例中通过过滤器实现会员折扣。

数据库交互

使用全局 $wpdb 对象,并通过 $wpdb->prepare() 编写预处理语句以防止 SQL 注入。示例涵盖 get_results、get_row、get_var 等查询方法,均配合占位符(如 %d、%s)使用。

适用场景

适合需要按现代标准开发 WordPress 插件的开发者,尤其是希望采用面向对象架构、Composer 自动加载、规范钩子集成与安全数据库访问的项目。

限制

资料未提供关于收费、价格、平台支持范围、实际效果或具体使用步骤的更多信息,相关内容暂未提供。