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

使用WPML翻译分类术语后,如何获取正确的自定义分类链接?

解决WPML多语言下自定义分类术语链接错误的问题

WPML会为每种语言创建独立的术语条目,直接用原生get_term_link()调用默认语言的术语ID,自然只会返回默认语言的链接。要获取当前语言对应的正确链接,你需要借助WPML提供的专属过滤器先拿到翻译后的术语对象,再生成链接。

下面是两种实用的解决方案:

方案一:转换已有术语ID到当前语言

如果你已经持有默认语言的术语对象(比如你的代码中的$category),可以通过wpml_object_id过滤器获取当前语言对应的术语ID,再生成链接:

// 获取当前语言下的翻译术语ID
$translated_term_id = apply_filters( 'wpml_object_id', $category->term_id, 'galerija-taxonomy', true );

// 获取翻译后的完整术语对象
$translated_term = get_term( $translated_term_id, 'galerija-taxonomy' );

// 生成并输出安全的链接
if ( $translated_term && ! is_wp_error( $translated_term ) ) {
    $term_link = get_term_link( $translated_term );
    echo '<a href="' . esc_url( $term_link ) . '">' . esc_html( $translated_term->name ) . '</a>';
}

参数说明:

  • wpml_object_id的第三个参数true表示:如果当前语言没有该术语的翻译,就返回原术语ID(如果希望没有翻译时不显示内容,可以改成false);
  • 务必使用esc_url()和esc_html()做安全处理,避免XSS漏洞。

方案二:直接获取当前语言的术语列表

如果需要遍历术语列表,直接用WPML的wpml_object_filter过滤器过滤get_terms()的结果,确保拿到的是当前语言的术语集合:

// 获取当前语言下的所有自定义分类术语
$terms = apply_filters( 'wpml_object_filter', get_terms( array(
    'taxonomy' => 'galerija-taxonomy',
    'hide_empty' => false, // 根据业务需求调整是否隐藏空术语
) ), 'galerija-taxonomy' );

// 遍历输出每个术语的链接
foreach ( $terms as $term ) {
    $term_link = get_term_link( $term );
    if ( ! is_wp_error( $term_link ) ) {
        echo '<a href="' . esc_url( $term_link ) . '">' . esc_html( $term->name ) . '</a>';
    }
}

额外技巧:获取特定语言的术语链接

如果需要获取非当前语言的术语链接(比如强制获取法语版本的链接),可以在wpml_object_id里添加第四个参数指定目标语言代码:

// 获取法语翻译的术语ID
$translated_term_id = apply_filters( 'wpml_object_id', $category->term_id, 'galerija-taxonomy', true, 'fr' );

关键注意事项:

  • 确保你已经在WPML后台完成了该自定义分类术语的翻译配置,每个术语都有对应语言的翻译条目;
  • 测试时切换不同语言,验证链接是否正确跳转到对应语言的术语归档页面。

内容的提问来源于stack exchange,提问作者Ivan Topić

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:25:21