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

如何在WPML中获取任意语言版本对应原始文章/商品的ID

解决方法

使用WPML内置的wpml_original_element_id过滤器即可动态获取任意内容的原始录入版本ID,无需硬编码源语言代码,适配所有初始录入语言的商品。

单场景调用代码

直接替换你现有的临时修复代码即可:

// 获取当前商品的原始录入版本ID
$original_product_id = apply_filters( 'wpml_original_element_id', null, get_the_ID(), 'post_product' );
// 从原始版本读取ACF图片字段
$preview_img_id = get_field( 'preview_image', $original_product_id );

参数说明

第三个参数格式为post_{自定义文章类型别名}:

  • 普通文章传post_post
  • 页面传post_page
  • 其他自定义内容类型对应替换别名即可

低版本WPML兼容方案

如果使用的WPML版本较低不支持上述过滤器,可以用以下兼容写法:

// 获取当前商品的语言详情
$lang_details = apply_filters( 'wpml_element_language_details', null, [
    'element_id' => get_the_ID(),
    'element_type' => 'product'
] );
// 获取原始录入语言代码
$source_lang = $lang_details->source_language_code;
// 转成原始版本ID
$original_product_id = apply_filters( 'wpml_object_id', get_the_ID(), 'product', false, $source_lang );
$preview_img_id = get_field( 'preview_image', $original_product_id );

全局适配方案(可选)

如果需要所有商品的ACF字段默认统一从原始版本读取,不用逐个修改调用代码,可以添加全局过滤器:

add_filter( 'acf/load_value', function( $value, $post_id, $field ) {
    // 仅处理商品类型,可自行调整条件适配其他内容类型
    if ( get_post_type( $post_id ) !== 'product' ) {
        return $value;
    }
    $original_id = apply_filters( 'wpml_original_element_id', null, $post_id, 'post_product' );
    if ( $original_id && $original_id !== $post_id ) {
        $value = get_field( $field['name'], $original_id );
    }
    return $value;
}, 10, 3 );

添加后直接调用get_field('preview_image')就会自动返回原始商品对应的字段值。

内容的提问来源于stack exchange,提问作者jstneti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:06:04