切到英文站,商品标题已经是英文,左侧分类筛选还是户外用品、配件,URL 和面包屑里夹着中文,客户截图来问是不是没做完。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

$term_id = apply_filters('wpml_object_id', $term->term_id, 'product_cat', true, 'en');
$term = get_term($term_id, 'product_cat');

商品是 post 类型,走 WPML 的文章翻译流程,分类是 taxonomy term,只翻译了 term 名没同步 slug。主题输出分类名时直接用了 get_term 拿到的原始对象。这一点先确认清楚,后面就不用反复试。

「多语言目录分类未译」这类改动最怕改一半,回滚脚本先准备好,再动生产。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

具体做法是,在 Taxonomy Translation 里把分类 term 逐条翻译,slug 一起改;主题里用 wpml_object_id 过滤器拿当前语言对应的 term;清一次语言缓存,再用英文 URL 重新抓页面。

改完照着核一遍,英文目录页的分类名、面包屑、筛选选项都是英文,URL 里不再出现中文 slug。

作者 9823189