如何在PHP的ACF过滤函数中为价格和货币添加span类
ACF字段格式化:给数值和货币/符号添加独立样式标签
原来的代码无法实现需求,核心问题有两个:一是直接拼接数值与符号,未给两者套上带自定义CSS类的<span>标签;二是变量赋值、判断逻辑存在错误,导致代码运行异常。以下是修正后的完整代码:
价格字段处理代码
add_filter('acf/format_value/name=price', 'acf_number_comma_decimal_for_currency_field', 20, 3); function acf_number_comma_decimal_for_currency_field($value, $post_id, $field) { if(empty($value)) { return '<span class="price-contact">Price: Contact US</span>'; } // 单独获取全局设置中的货币符号 $currency = get_field('currency', 'option'); // 格式化数值后,分别用带类名的span包裹数值与货币符号 $formatted_num = number_format(floatval($value), 0); return '<span class="price-amount">' . $formatted_num . '</span><span class="price-currency">' . $currency . '</span>'; }
面积字段处理代码
add_filter('acf/format_value/name=surface', 'acf_number_comma_decimal_for_surface_field', 20, 3); function acf_number_comma_decimal_for_surface_field($value, $post_id, $field) { // 修正判断逻辑:检查字段值是否非空 if (!empty($value)) { $symbol = get_field('symbol', 'option'); $formatted_num = number_format(floatval($value), 0); return '<span class="surface-amount">' . $formatted_num . '</span><span class="surface-symbol">' . $symbol . '</span>'; } // 字段为空时返回空字符串,避免输出无效内容 return ''; }
核心修改说明
- 移除了原代码中错误的链式赋值写法(
$value = ... . $variable = ...),改为单独获取货币/符号变量,逻辑更清晰且避免运行bug - 给数值和符号分别套上
<span>标签并自定义CSS类(如price-amount、price-currency),后续可直接通过CSS单独设置两者的样式(字号、颜色等) - 修正了面积字段的判断条件:原代码
get_field('$value')为错误写法,改为直接判断$value是否非空 - 空值状态的返回内容也添加了标签,保持页面样式统一(若不需要可去掉标签直接返回文本)
内容的提问来源于stack exchange,提问作者neosan
相关产品推荐
相关产品推荐

