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
相关产品推荐
相关产品推荐

