如何在PHP的render_callback函数中识别Block Variation?
在Block的render_callback中识别Block Variation
目前WordPress没有直接提供在PHP的render_callback中获取Block Variation名称的原生函数——因为Block Variation主要是在客户端(JS)层面注册和选择的,默认不会把变体名称同步到服务器端的块属性里。
可行的解决方案
结合你已经用JS注册变体的情况,可以通过两种方式让PHP端拿到变体信息:
- 给变体添加自定义同步属性
在注册Block Variation时,新增一个可同步到服务器的自定义属性,比如variationName:
registerBlockVariation('my/solaredge', { name: 'CO2', title: 'SolarEdge CO2', attributes: { variationName: { type: 'string', default: 'CO2', source: 'attribute', attribute: 'data-variation' } }, isActive: (blockAttributes) => blockAttributes.variationName === 'CO2' });
用户选择该变体后,variationName属性会被保存到块数据中,在PHP的render_callback里就能直接读取判断:
function my_solaredge_render($attributes) { if (isset($attributes['variationName']) && $attributes['variationName'] === 'CO2') { // 执行CO2变体对应的渲染逻辑 } // 默认渲染逻辑 }
- 基于Block Style的类名识别(你当前的思路优化)
如果更倾向用register_block_style的体系,可以把变体和样式绑定,通过类名判断:
先在PHP中注册对应样式:
register_block_style('my/solaredge', [ 'name' => 'co2-variation', 'label' => 'SolarEdge CO2' ]);
然后在JS注册变体时,将样式类添加到块的className属性:
registerBlockVariation('my/solaredge', { name: 'CO2', title: 'SolarEdge CO2', attributes: { className: 'is-style-co2-variation' } });
最后在render_callback里通过类名识别:
function my_solaredge_render($attributes) { $wrapper_attrs = get_block_wrapper_attributes(); if (str_contains($wrapper_attrs, 'is-style-co2-variation')) { // 执行CO2变体对应的渲染逻辑 } // 默认渲染逻辑 }
方案对比
- 自定义属性的方式更直接,属性值明确,适合需要精准判断变体的场景;
- Block Style的方式贴合WordPress样式体系,适合需要和样式调整结合的场景。
内容的提问来源于stack exchange,提问作者Frizzant
相关产品推荐
相关产品推荐

