如何优化WooCommerce多语言字符串翻译代码并精简冗余代码?
代码优化方案
你原有代码的核心问题是重复逻辑过多,每新增一种语言就要重写一遍完整的判断和输出逻辑,维护成本很高。可以通过语言映射表的方式大幅缩短代码,同时提升可维护性:
优化思路
- 仅做一次金额阈值判断,避免重复的条件校验
- 用关联数组存储不同语言对应的提示文本,后续新增语言仅需在数组内新增条目即可
- 增加默认语言兜底逻辑,避免未匹配到语言代码时输出异常
优化后代码
<?php add_action( 'woocommerce_before_cart_table', 'cart_page_notice' ); function cart_page_notice() { $min_amount = 1000; // 免邮门槛,可根据需求修改 $current = WC()->cart->subtotal; if ( $current >= $min_amount ) { return; // 金额达标直接返回,无需输出提示 } // 语言映射表,新增语言只需要在这里加对应键值对即可 $lang_strings = [ 'ru' => [ 'notice' => 'Купите еще на %s для бесплатной доставки', 'button_text' => 'Продолжить покупки' ], 'en' => [ 'notice' => 'Buy %s worth products more to get free shipping', 'button_text' => 'Continue shopping' ], 'tr' => [ 'notice' => 'Ücretsiz kargo için %s daha satın alın', 'button_text' => 'Alışverişe devam' ] ]; $current_lang = ICL_LANGUAGE_CODE; // 兜底默认用英文,可根据需求修改 $strings = isset($lang_strings[$current_lang]) ? $lang_strings[$current_lang] : $lang_strings['en']; $diff_amount = wc_price( $min_amount - $current ); $return_to = wc_get_page_permalink( 'shop' ); // 统一输出模板 $notice = sprintf( '<div class="woocommerce-message"><strong>%s</strong><a class="button" href="%s">%s</a></div>', sprintf($strings['notice'], $diff_amount), esc_url($return_to), $strings['button_text'] ); echo $notice; }
更优的多语言方案
如果你的站点使用WordPress多语言插件(WPML/Polylang等),更推荐使用WordPress原生的翻译函数__()来处理字符串,不需要硬编码语言映射表:
- 所有需要翻译的字符串用
__('文本内容', '你的主题文本域')包裹 - 后续可以直接在多语言插件的后台字符串翻译界面添加不同语言的翻译,不需要修改代码,更适合非技术人员维护
内容的提问来源于stack exchange,提问作者Alex Gorokhov
相关产品推荐
相关产品推荐

