使用@wordpress/server-side-render时attributes未传递到后端如何解决
问题诱因
- 核心原因是你在PHP端调用
register_block_type注册区块时,没有声明与前端匹配的attributes属性schema。WordPress出于安全考虑,会自动过滤所有未在注册时显式声明的区块属性,即使前端通过ServerSideRender传入了对应参数,也会被丢弃,最终导致$block_attributes为空。 - 次要诱因可能是前后端声明的
attributes类型不匹配,例如前端定义了数值类型的属性,后端却声明为字符串类型,校验不通过的属性也会被过滤。
解决方案
- 首先在PHP端的区块注册代码中,补全与前端区块注册时完全一致的
attributes声明,属性名、属性类型、默认值都要严格对应。
修改后的PHP注册代码示例如下:
register_block_type( 'test/employee-block', array( 'title' => 'Test Block', 'description' => 'test', 'category' => 'widgets', 'icon' => 'admin-users', 'api_version' => 2, 'editor_script' => 'employees_dynamic_block_script', // 新增与前端匹配的attributes声明,以下为示例,请替换为你实际用到的属性 'attributes' => array( 'employeeName' => array( 'type' => 'string', 'default' => '' ), 'employeeId' => array( 'type' => 'number', 'default' => 0 ), 'showAvatar' => array( 'type' => 'boolean', 'default' => true ) ), 'render_callback' => function ($block_attributes, $content) { // 此时$block_attributes就可以正常获取到传入的参数了 return '<h1>'.esc_html($block_attributes['employeeName']).'</h1>'; } ) );
- 核对前端区块注册时的
attributes定义,确保和PHP端声明的字段、类型完全一致,没有遗漏字段。 - 可临时在前端打印
props.attributes确认参数是否正常传出,在后端render_callback中打印$block_attributes验证参数接收情况,排查是否有其他类型匹配问题。
内容的提问来源于stack exchange,提问作者Alper Bulut
相关产品推荐
相关产品推荐

