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

如何在Generateblocks中转换ACF动态数字字段为欧洲格式

解决Generateblocks中ACF数字字段欧洲格式不生效的问题

问题原因

Bricks主题默认会调用ACF的acf/format_value过滤器处理字段输出,但Generateblocks渲染动态ACF内容时,可能直接获取原始存储值,跳过了ACF的格式化钩子,导致原有代码无法生效。

解决方案

方案1:使用Generateblocks动态内容专属过滤器

将以下代码添加到主题functions.php或代码片段插件中,专门针对Generateblocks的ACF数字字段做格式化:

function gb_format_european_acf_number($content, $attributes, $block) {
    // 检查是否为ACF字段的动态内容
    if (!empty($attributes['dynamicContent']) && strpos($attributes['dynamicContent'], 'acf/') === 0) {
        $field_name = str_replace('acf/', '', $attributes['dynamicContent']);
        $post_id = get_the_ID();
        $field_obj = get_field_object($field_name, $post_id);
        
        // 仅处理数字类型字段
        if ($field_obj && $field_obj['type'] === 'number') {
            $raw_value = get_field($field_name, $post_id, false); // 获取未格式化的原始值
            if (is_numeric($raw_value)) {
                $rounded_val = round($raw_value, 2);
                // 根据是否有小数位选择格式化方式
                if (floor($rounded_val) == $rounded_val) {
                    return number_format($rounded_val, 0, ',', '.');
                } else {
                    return number_format($rounded_val, 2, ',', '.');
                }
            }
        }
    }
    return $content;
}
add_filter('generateblocks_dynamic_content_output', 'gb_format_european_acf_number', 10, 3);

方案2:自定义短代码(更灵活)

如果方案1无效,可创建自定义短代码,直接在Generateblocks动态内容中调用:

function euro_formatted_acf_num($atts) {
    $args = shortcode_atts([
        'field' => '', // ACF字段名称
    ], $atts);

    if (empty($args['field'])) return '';

    $post_id = get_the_ID();
    $field_obj = get_field_object($args['field'], $post_id);

    if (!$field_obj || $field_obj['type'] !== 'number') return '';

    $raw_value = get_field($args['field'], $post_id, false);
    if (!is_numeric($raw_value)) return $raw_value;

    $rounded_val = round($raw_value, 2);
    if (floor($rounded_val) == $rounded_val) {
        return number_format($rounded_val, 0, ',', '.');
    } else {
        return number_format($rounded_val, 2, ',', '.');
    }
}
add_shortcode('euro_acf_num', 'euro_formatted_acf_num');

使用方法:在Generateblocks动态内容输入框中,输入[euro_acf_num field="你的ACF字段名称"]即可。

方案3:检查Generateblocks设置

进入Generateblocks动态内容配置面板,确认是否勾选了「原始值」选项。如果勾选,取消后再测试原有ACF过滤器是否生效(部分场景下GB会强制使用原始值,跳过ACF格式化)。

注意事项

  • 确保ACF字段类型为数字,且存储的值为有效数字(非字符串格式的数字)
  • 代码添加后,清除WordPress缓存和浏览器缓存再测试

内容的提问来源于stack exchange,提问作者neoset

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:49:51