关于 wp-interactivity-api
为处理 WordPress Interactivity API 开发与调试任务设计的技能,面向构建区块、主题和插件的开发者。它涵盖服务端渲染、指令、状态管理及常见水合故障。
主要功能
- 01识别现有 API 用法与集成方式
- 02检查 store 状态、操作和事件处理器
- 03指导服务端渲染及状态初始化
- 04安全修改指令并对齐构建配置
- 05排查水合、加载和交互故障
适用场景
- 01诊断页面指令未触发的问题
- 02为交互区块设置初始服务端 HTML
- 03调整主题或插件中的交互逻辑
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ wordpress/ agent-skills --skill wp-interactivity-api安装后在 Claude Code 中输入/wp-interactivity-api确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/debugging.mddirectives-quickref.mdserver-side-rendering.md详细介绍
WP Interactivity API
适用场景
当用户提到以下内容时使用此技能:
- Interactivity API、
@wordpress/interactivity, data-wp-interactive、data-wp-on--*、data-wp-bind--*、data-wp-context,- 区块
viewScriptModule/ 基于模块的视图脚本, - 水合问题或“指令不触发”。
所需输入
- 仓库根目录和分诊输出(
wp-project-triage)。 - 受影响的区块/主题/插件界面(前端、编辑器或两者)。
- 任何限制:WP 版本、构建中是否支持模块。
流程
1) 检测现有用法和集成方式
搜索:
data-wp-interactive@wordpress/interactivityviewScriptModule
判断:
- 这是通过
block.json视图脚本模块提供交互功能的区块吗? - 这是主题级交互功能吗?
- 这是插件侧“增强现有标记”的用法吗?
如果要创建新的交互式区块(而不只是调试),优先使用官方脚手架模板:
@wordpress/create-block-interactive-template(通过@wordpress/create-block)
2) 确认 store
定位 store 定义并确认:
- 状态结构,
- 操作(修改状态),
data-wp-on--*使用的回调/事件处理程序。
3) 服务端渲染(最佳实践)
在服务器上预渲染 HTML,以确保:
- JavaScript 加载前,HTML 中就包含正确的初始状态(避免布局偏移)。
- 获得 SEO 优势,并缩短感知加载时间。
- 客户端 JavaScript 接管时实现无缝水合。
启用服务端指令处理
对于使用 block.json 的组件,添加 supports.interactivity:
{
"supports": {
"interactivity": true
}
}
对于不使用 block.json 的主题/插件,使用 wp_interactivity_process_directives() 处理指令。
在 PHP 中初始化状态/上下文
使用 wp_interactivity_state() 定义初始全局状态:
wp_interactivity_state( 'myPlugin', array(
'items' => array( 'Apple', 'Banana', 'Cherry' ),
'hasItems' => true,
));
对于本地上下文,使用 wp_interactivity_data_wp_context():
<?php
$context = array( 'isOpen' => false );
?>
<div <?php echo wp_interactivity_data_wp_context( $context ); ?>>
...
</div>
在 PHP 中定义派生状态
如果派生状态会影响初始 HTML 渲染,请在 PHP 中复现相关逻辑:
wp_interactivity_state( 'myPlugin', array(
'items' => array( 'Apple', 'Banana' ),
'hasItems' => function() {
$state = wp_interactivity_state();
return count( $state['items'] ) > 0;
}
));
这样可以确保 data-wp-bind--hidden="!state.hasItems" 之类的指令在首次加载时正确渲染。
详细示例和模式请参阅 references/server-side-rendering.md。
4) 安全地实现或修改指令
修改标记指令时:
- 尽量减少指令的使用,并限定其作用范围,
- 优先使用能清晰映射到 store 状态的稳定数据属性,
- 确保服务端渲染的标记与客户端水合保持一致。
WordPress 6.9 的变更:
data-wp-ignore已弃用,并将在未来版本中移除。它会破坏上下文继承,并导致客户端导航出现问题。请避免使用。- 唯一指令 ID:现在可以在同一元素上使用
---分隔符来添加多个相同类型的指令(例如,data-wp-on--click---plugin-a="..."和data-wp-on--click---plugin-b="...")。 - 新的 TypeScript 类型:
AsyncAction<ReturnType>和TypeYield<T>有助于异步操作的类型标注。
指令速查请参阅 references/directives-quickref.md。
5) 对齐构建/工具链
验证仓库是否支持所需的模块构建方式:
- 如果使用
@wordpress/scripts,优先遵循其惯例。 - 如果使用自定义打包,确认支持模块输出。
6) 调试常见故障
如果交互“没有任何反应”:
- 确认
viewScriptModule已加入队列/加载, - 确认 DOM 元素包含
data-wp-interactive, - 确认 store 命名空间与指令的值一致,
- 确认水合前没有 JavaScript 错误。
请参阅 references/debugging.md。
验证
- 修改后(如适用),
wp-project-triage显示signals.usesInteractivityApi: true。 - 手动冒烟测试:指令能按预期触发,状态也能按预期更新。
- 如果存在测试:为相关交互流程添加/扩展 Playwright E2E 测试。
故障模式/调试
- 存在指令但未生效:
- 视图脚本未加载、模块入口点错误,或缺少
data-wp-interactive。
- 视图脚本未加载、模块入口点错误,或缺少
- 水合不匹配/闪烁:
- 服务端标记与客户端预期不同;简化或对齐初始状态。
- 未在 PHP 中定义派生状态:使用带闭包的
wp_interactivity_state()。
- 初始内容缺失或错误:
- 未在
block.json中设置supports.interactivity(适用于区块)。 - 未调用
wp_interactivity_process_directives()(适用于主题/插件)。 - 渲染前未在 PHP 中初始化状态/上下文。
- 未在
- 加载时布局偏移:
- 服务端缺少
state.hasItems等派生状态,导致缺少hidden属性。
- 服务端缺少
- 性能回退:
- 交互根范围过大;将交互范围限定到更小的子树。
- 客户端导航问题(WordPress 6.9):
getServerState()和getServerContext()现在会在页面转换之间重置,确保代码不会假定过期值仍会保留。- 路由器区域现在支持使用
attachTo动态渲染覆盖层(模态框、弹出窗口)。
升级处理
- 如果仓库构建限制不明确,请询问:“这是使用
@wordpress/scripts,还是自定义打包工具(webpack/vite)?” - 参考:
references/server-side-rendering.mdreferences/directives-quickref.mdreferences/debugging.md
评论
支持 Markdown