如何阻止WP All Export将自定义XML节点包裹在CDATA中
如何阻止WP All Export将自定义XML节点包裹在CDATA中
嘿,我太懂你的困扰了——WP All Export这套默认的CDATA包裹逻辑,本来是怕带标签的内容破坏XML结构,结果刚好打乱了你想要的节点布局。我给你几个亲测有效的解决办法:
方法一:用过滤器强制跳过CDATA包裹
WP All Export自带了一个wp_all_export_xml_element过滤器,能精准控制单个XML元素的输出方式。把下面这段代码加到主题的functions.php或者自定义插件里就行:
// 阻止<photos>元素被CDATA包裹 add_filter('wp_all_export_xml_element', 'prevent_cdata_for_photos', 10, 3); function prevent_cdata_for_photos($element_output, $element_data, $export_id) { // 匹配你要处理的目标字段名(这里是"photos") if ($element_data['name'] === 'photos') { // 直接返回你生成的XML内容,跳过CDATA包裹逻辑 return $element_data['value']; } // 其他元素保持插件默认处理 return $element_output; }
记得同时在WP All Export的字段设置里,把这个自定义字段的输出类型改成Raw(别选Plain Text),确保插件尊重你返回的内容格式。
方法二:用自定义XML模板直接生成节点(推荐)
如果你用的是WP All Export高级版,直接用自定义XML模板写循环会更稳妥,完全绕开CDATA的问题。模板里这么写:
<photos> [foreach({你的图片字段名}, |)] <image_{{@index+1}}>[+{@value}+]</image_{{@index+1}}> [/foreach] </photos>
把{你的图片字段名}替换成你存储图片URL的字段(就是你之前用explode('|', $images)处理的那个字段),插件会自动循环生成每个<image_n>节点,不会套CDATA——因为这是模板里的原生XML结构,插件会直接解析生成。
为什么之前的方法没用?
不管你用SimpleXMLElement还是DOMDocument,最终返回的都是带XML标签的字符串,WP All Export的安全机制会自动把这类字符串塞进CDATA,防止意外破坏整个XML文档的结构。上面的过滤器就是明确告诉插件:“这个字符串是合法的XML片段,直接插进去就行,不用额外处理”。
备注:内容来源于stack exchange,提问作者Tejas Gajjar
相关产品推荐
相关产品推荐

