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

Polylang v3.3.3与ACF兼容Bug:翻译文章时ACF图片丢失

解决Polylang v3.3.3与ACF图片跨语言复用问题

问题背景

升级Polylang至v3.3.3后,ACF图片字段在翻译文章中无法正常显示,开启Media Automatically duplicate media in all languages when uploading a new file选项虽能解决,但会导致图片重复存储,希望保留Polylang v2的单图复用效果。


解决方案

方法1:通过ACF钩子同步原文章图片至翻译文章

利用acf/save_post钩子,在保存翻译文章时直接同步原文章的ACF图片字段值,绕开Polylang的语言关联限制:

add_action('acf/save_post', 'sync_acf_image_to_translated_post', 20);
function sync_acf_image_to_translated_post($post_id) {
    // 仅处理翻译文章
    if (!function_exists('pll_get_post_language') || !pll_is_translated_post($post_id)) {
        return;
    }

    // 获取原语言文章ID
    $original_post_id = pll_get_post($post_id, pll_default_language());
    if (!$original_post_id) {
        return;
    }

    // 替换为你的ACF图片字段名,例如'product_gallery'
    $image_field_name = 'your_image_field_name';
    $original_image_id = get_field($image_field_name, $original_post_id);

    if ($original_image_id) {
        // 强制给翻译文章设置相同图片ID
        update_field($image_field_name, $original_image_id, $post_id);
    }
}

将代码添加至主题functions.php或自定义插件中,替换your_image_field_name为实际字段名称即可。

方法2:修改Polylang媒体语言检测逻辑

让未指定语言的媒体允许被所有语言访问,通过pll_get_post_language钩子调整检测规则:

add_filter('pll_get_post_language', 'allow_unlang_media_across_languages', 10, 2);
function allow_unlang_media_across_languages($lang, $post_id) {
    // 仅处理媒体附件
    if (get_post_type($post_id) !== 'attachment') {
        return $lang;
    }

    // 若媒体无语言标识,返回当前请求语言(允许跨语言访问)
    if (empty($lang)) {
        return pll_current_language();
    }

    return $lang;
}

方法3:模板层直接获取原文章图片

在模板输出时,跳过Polylang的过滤,直接读取原语言文章的ACF图片字段:

$current_post_id = get_the_ID();
// 获取原语言文章ID
$original_post_id = pll_get_post($current_post_id, pll_default_language());
// 优先取原文章图片, fallback到当前文章
$image_id = get_field('your_image_field_name', $original_post_id) ?: get_field('your_image_field_name', $current_post_id);

if ($image_id) {
    $image_data = wp_get_attachment_image_src($image_id, 'full');
    $image_alt = get_post_meta($image_id, '_wp_attachment_image_alt', true);
    echo '<img src="' . esc_url($image_data[0]) . '" alt="' . esc_attr($image_alt) . '">';
}

注意事项

  • 操作前备份主题文件与数据库,避免代码冲突导致异常
  • 测试时确保Polylang与ACF版本兼容,无其他插件干扰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:37:31