WooCommerce启用Gutenberg后ACF Blocks产品复制HTML字符转义异常求助
解决WooCommerce启用Gutenberg后复制产品时ACF字段HTML转义问题
问题根源
启用产品的Gutenberg支持后,产品复制流程(原生或第三方插件)中,ACF字段的HTML转义字符会被二次编码,导致原<b>这类实体字符被转换成u003cbu003e形式的Unicode转义序列,本质是复制过程中ACF数据的序列化/反序列化处理异常。
解决方案
方案1:通过WooCommerce复制钩子修正字段编码
在主题functions.php或自定义插件中添加以下代码,拦截产品复制动作,对目标ACF字段进行解码后重新保存:
add_action('woocommerce_product_duplicate', 'fix_acf_html_escaping_on_duplicate', 10, 2); function fix_acf_html_escaping_on_duplicate($new_product, $original_product) { $acf_fields = get_fields($original_product->get_id()); if (!$acf_fields) return; foreach ($acf_fields as $key => $value) { $field_type = get_field_object($key, $original_product->get_id())['type']; // 针对文本、文本域、WYSIWYG字段处理,可根据实际字段类型调整 if (in_array($field_type, ['text', 'textarea', 'wysiwyg'])) { // 解码Unicode转义序列 $decoded_value = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function($matches) { return mb_convert_encoding(pack('H*', $matches[1]), 'UTF-8', 'UCS-2BE'); }, $value); // 重新保存修正后的值到新产品 update_field($key, $decoded_value, $new_product->get_id()); } } }
方案2:调整ACF字段保存过滤逻辑
如果方案1无效,可修改ACF字段的保存行为,避免复制时触发额外转义:
add_filter('acf/update_value', 'prevent_acf_double_escaping', 10, 3); function prevent_acf_double_escaping($value, $post_id, $field) { // 仅在复制产品动作中生效 if (!isset($_POST['action']) || $_POST['action'] !== 'duplicate_post') { return $value; } if (in_array($field['type'], ['text', 'textarea', 'wysiwyg'])) { // 反转义HTML实体,避免二次编码 $value = htmlspecialchars_decode($value, ENT_QUOTES); } return $value; }
方案3:禁用Gutenberg对产品的自动转义(谨慎使用)
若前两种方案无效,可尝试关闭Gutenberg对产品内容的自动转义处理,但可能影响其他功能,需充分测试:
add_filter('block_editor_settings_all', 'disable_gutenberg_auto_escaping_for_products', 10, 2); function disable_gutenberg_auto_escaping_for_products($settings, $context) { if ($context->post_type === 'product') { $settings['autop'] = false; $settings['remove_linebreaks'] = false; } return $settings; }
注意事项
- 操作前备份网站数据,避免数据损坏。
- 根据实际使用的ACF字段类型,调整代码中的字段类型数组。
- 若使用第三方复制插件,可替换为对应插件的复制完成钩子(比如Duplicate Post插件的
dp_duplicate_post)。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

