如何在多语言WordPress站点统一销售徽章文本为Sale?
解决WPML多语言站点统一WooCommerce销售徽章为“Sale”的问题
你的代码未生效大概率是因为WPML或主题的代码优先级更高,覆盖了你的自定义输出。可以通过以下两种方法解决:
方法一:提高钩子优先级
将钩子的优先级设为更高的值(比如999),确保你的代码在WPML及其他修改该钩子的代码之后执行:
add_filter('woocommerce_sale_flash', 'ds_force_global_sale_text', 999); function ds_force_global_sale_text() { return '<span class="onsale">Sale</span>'; }
方法二:拦截WPML的翻译请求
如果方法一仍无效,直接阻止WPML对销售文本的翻译操作:
add_filter('woocommerce_sale_flash', 'ds_force_global_sale_text', 999); add_filter('wpml_translate_single_string', 'ds_prevent_sale_text_translation', 10, 4); function ds_force_global_sale_text() { return '<span class="onsale">Sale</span>'; } function ds_prevent_sale_text_translation($translation, $text, $domain, $lang) { if ($domain === 'woocommerce' && $text === 'Sale') { return 'Sale'; } return $translation; }
注意事项
- 将代码添加到当前主题的
functions.php文件,或使用代码片段插件(如Code Snippets)保存,避免主题更新导致代码丢失。 - 若使用自定义主题,需确认主题是否也修改了
woocommerce_sale_flash钩子,必要时进一步提高优先级数值。 - 修改后清除网站缓存及WPML的翻译缓存,确保新代码生效。
内容的提问来源于stack exchange,提问作者Glendi Xhela
相关产品推荐
相关产品推荐

