如何防止 WP All Export 将 XML 节点包装在 CDATA 中?

问题描述 投票:0回答:1

我在 WordPress 网站上使用 WP All Export 插件来导出自定义 XML 数据,特别是图像 URL 列表,每个数据都位于单独的 XML 节点内。然而,WP All Export 不断将整个输出包装在 CDATA 中,这破坏了我需要的 XML 结构。

电流输出

这是我当前在导出文件中得到的内容:

<photos>
    <![CDATA[
        <image_1>https://example.com/image1.jpg</image_1>
        <image_2>https://example.com/image2.jpg</image_2>
        <image_3>https://example.com/image3.jpg</image_3>
        ...
    ]]>
</photos>

预期输出

我想要没有 CDATA 包装器的输出,如下所示:

<photos>
    <image_1>https://example.com/image1.jpg</image_1>
    <image_2>https://example.com/image2.jpg</image_2>
    <image_3>https://example.com/image3.jpg</image_3>
    ...
</photos>

我尝试过的代码

这是我用来生成 XML 节点的 PHP 代码。我已经尝试过 SimpleXMLElement 和 DOMDocument,但 WP All Export 仍然将结果包装在 CDATA 中:

function export_images_as_nodes($images) {
    if (is_string($images)) {
        $images = explode('|', $images);
    }

    if (empty($images) || !is_array($images)) {
        return '';
    }
    $xml_output = "<photos>\n";
    foreach ($images as $index => $url) {
        $url = trim($url);
        if (!empty($url)) { 
            $node_name = "image_" . ($index + 1);
            $xml_output .= "\t<{$node_name}>{$url}</{$node_name}>\n";
        }
    }
    $xml_output .= "\n";
    return $xml_output;
}

images

我尝试过的事情

•   SimpleXMLElement: Also results in CDATA wrapping.
•   DOMDocument: As shown in the code above, but still no success.
•   Setting WP All Export to Raw Output: I’ve checked all field options in WP All Export to ensure it’s set to output as raw XML, but it still wraps in CDATA.

问题

如何防止 WP All Export 将我的自定义 XML 输出包装在 CDATA 中?在这种情况下,是否有设置或解决方法来强制执行纯 XML 输出?

补充说明:

  • WP All Export 似乎没有提供对 CDATA 的直接控制 自定义字段。
  • 我的导出结构要求每个图像 URL 是 作为 XML 节点而不是在单个 CDATA 块中输出。
php xml wordpress
1个回答
0
投票

可以完全或选择性地对某些节点禁用 CDATA 包装。

完全禁用 CDATA 标签包装

编辑模板页面上,展开位于字段框正下方的高级选项部分,然后选择

Never wrap data in CDATA tags
。然后检查预览或保存模板并重新运行导出。

WP All Export: Option to Completely Disable CDATA Tag Wrapping

但是,不建议使用此选项,因为它可能会生成无效的 XML 文件。

从 CDATA 标签包装中排除特定节点

使用函数编辑器(或

wp_all_export_is_wrap_value_into_cdata
)中的functions.php
过滤器。此过滤器接受 
$element_name
参数并返回一个布尔值,该值确定是否换行该元素的内容。

function do_not_wrap_images_on_export( $is_wrap_into_cdata, $value, $element_name ) {
    if ( $element_name == 'photos' ) {
        return false;
    }
    return $is_wrap_into_cdata;
}
add_filter( 'wp_all_export_is_wrap_value_into_cdata', 'do_not_wrap_images_on_export', 10, 3 );

保存代码和模板后,检查预览并执行实际导出。

© www.soinside.com 2019 - 2024. All rights reserved.