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

如何阻止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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 09:08:02