You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP的render_callback函数中识别Block Variation?

在Block的render_callback中识别Block Variation

目前WordPress没有直接提供在PHP的render_callback中获取Block Variation名称的原生函数——因为Block Variation主要是在客户端(JS)层面注册和选择的,默认不会把变体名称同步到服务器端的块属性里。

可行的解决方案

结合你已经用JS注册变体的情况,可以通过两种方式让PHP端拿到变体信息:

  1. 给变体添加自定义同步属性
    在注册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变体对应的渲染逻辑
    }
    // 默认渲染逻辑
}
  1. 基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:35:23