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

根据ACF字段值切换WooCommerce产品的货币符号

修复WooCommerce根据ACF字段切换货币符号的问题

你的代码存在几处关键问题,导致无法生效,具体问题及修正方案如下:

代码中的错误点

  • 语法错误:if $currencyfield = ('Currency1') 缺少括号包裹条件,且使用了赋值运算符=而非比较运算符==/===,导致逻辑完全错误
  • ACF字段获取失效:get_field('moneda')未指定产品ID,在woocommerce_currency_symbol全局钩子中,无法自动关联当前产品的字段值
  • Switch语句无效:没有定义case分支,该语句完全起不到逻辑判断作用

修正后的代码

if ( ! function_exists( 'cambiar_currency_symbol' ) ) {
    function cambiar_currency_symbol( $currency_symbol, $currency ) {
        // 获取当前产品对象
        global $product;
        
        // 确保产品上下文存在,再获取对应产品的ACF字段
        if ( $product instanceof WC_Product ) {
            $currencyfield = get_field('moneda', $product->get_id());
            
            // 严格匹配ACF字段值,切换货币符号
            if ( $currencyfield === 'Currency1' ) {
                $currency_symbol = 'US$';
            }
        }
        
        return $currency_symbol;
    }
    add_filter( 'woocommerce_currency_symbol', 'cambiar_currency_symbol', 10, 2 );
}

关键修正说明

  1. 引入全局$product变量,确保在产品循环、单产品页面等场景下能获取当前产品对象
  2. 给get_field()传入产品ID参数,精准获取对应产品的ACF字段值,避免上下文缺失导致的字段获取失败
  3. 修正if语句语法,使用===做严格比较,避免赋值操作覆盖字段值
  4. 移除无效的switch语句,简化逻辑,直接根据字段值修改货币符号

额外注意事项

  • 确认ACF字段moneda的返回值确实为Currency1:如果是下拉框字段,需检查字段设置是返回“值”还是“标签”,确保与代码中的字符串完全匹配
  • 若你的ACF字段是全局选项(而非产品字段),需将get_field('moneda', $product->get_id())改为get_field('moneda', 'option')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:42:36