根据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 ); }
关键修正说明
- 引入全局
$product变量,确保在产品循环、单产品页面等场景下能获取当前产品对象 - 给
get_field()传入产品ID参数,精准获取对应产品的ACF字段值,避免上下文缺失导致的字段获取失败 - 修正if语句语法,使用
===做严格比较,避免赋值操作覆盖字段值 - 移除无效的switch语句,简化逻辑,直接根据字段值修改货币符号
额外注意事项
- 确认ACF字段
moneda的返回值确实为Currency1:如果是下拉框字段,需检查字段设置是返回“值”还是“标签”,确保与代码中的字符串完全匹配 - 若你的ACF字段是全局选项(而非产品字段),需将
get_field('moneda', $product->get_id())改为get_field('moneda', 'option')
内容的提问来源于stack exchange,提问作者Ñako
相关产品推荐
相关产品推荐

