WordPress 7.0 引入 PHP-Only 块注册:不用 React 也能写块
CSS-Tricks 文章(作者 Fränk Klein,2026 年 8 月 24 日)介绍 WordPress 7.0 引入的 PHP-only 块注册方式:不用学 React、不用构建管线、不用 NPM 包,只用 PHP 就能注册一个完整的自定义块。这是块编辑器(Block Editor)进入 Core 七年半后,WordPress 首次提供免 JavaScript 的块开发路径。本文基于该文章,解读用法与限制。
传统块开发的双重注册
传统 WordPress 块需要注册两次:一次在 PHP、一次在 JavaScript。开发一个像样的块通常意味着引入 React、Webpack/Vite 构建管线、NPM 依赖——对只想写个自定义块的 PHP 开发者门槛很高。
PHP-only 注册:autoRegister
WordPress 7.0 新增 autoRegister 标志,只需 PHP 注册即可:
function css_tricks_hello_world_block() {
register_block_type(
'css-tricks/hello-world',
[
'title' => 'Hello World',
'render_callback' => function () {
return sprintf(
'<div %s>Hello World!</div>',
get_block_wrapper_attributes()
);
},
'supports' => [
'autoRegister' => true,
],
]
);
}
add_action('init', 'css_tricks_hello_world_block');
关键在 supports 里的 'autoRegister' => true:设置后,WordPress 会基于 PHP 注册信息自动生成块所需的 JavaScript——包括客户端注册和编辑器预览。
添加属性也一样简单:注册时定义 attributes(如字符串类型的 greeting 加默认值),WordPress 自动在编辑器设置侧栏生成对应的输入控件。
重要限制
作者明确指出:PHP-only 方案有架构性限制,且未来不会改变。
- 无法在块预览内交互:编辑器把 render_callback 返回的 HTML 通过 REST API 端点异步渲染;块不在编辑器单页 JavaScript 应用里,所以块预览内不能加任何控件,只能依赖设置侧栏的自动生成控件。目前也不支持图片上传和多行文本控件。
- 无法给块预览附加 JavaScript:预览的 markup 每次重渲染都会被异步替换,DOM 事件监听会在重渲染时断开。前端渲染可以正常配合 JS 库,但编辑器内的创作体验不行——比如"拉取五篇相关文章并渲染成轮播"这种需求,在 PHP-only 模式下编辑器内无法工作。
- 无法访问实时数据:编辑器初始加载把数据库中的文章数据载入客户端 store,PHP-only 块的渲染走的是 REST 请求,和客户端状态不同步。
总结
PHP-only 块注册的价值很明确:为大量 WordPress 站点(PHP 开发者生态巨大)打开了低门槛的自定义块开发路径——适合"静态展示型"块(标题、引用、展示类内容),不用碰 Node 工具链。但它不是全替代:需要块内编辑、自定义控件、图片上传或前端库交互的块,仍然必须走传统 JavaScript 块开发。作者的判断是:是否值得等七年?对简单块值得,对复杂块仍需 JS——先想清楚你的块属于哪种。
来源:https://css-tricks.com/wordpress-php-block-registration/