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

如何在WooCommerce Product Feed Pro中添加嵌套产品属性

如何在WooCommerce Product Feed Pro中添加自定义嵌套产品属性(适配Marktplaats Feed)

问题背景

我用WooCommerce的Product Feed Pro插件生成Marktplaats产品Feed,插件自带的Marktplaats模板缺了必要的嵌套属性,需要生成如下结构的XML节点:

<admarkt:shippingOptions>
    <admarkt:shippingOption>
        <admarkt:shippingType>PICKUP</admarkt:shippingType>
        <admarkt:location>1097DN</admarkt:location>
    </admarkt:shippingOption>
    <admarkt:shippingOption>
        <admarkt:shippingType>SHIP</admarkt:shippingType>
        <admarkt:cost>695</admarkt:cost>
        <admarkt:time>2d-5d</admarkt:time>
    </admarkt:shippingOption>
</admarkt:shippingOptions>

我已经通过Advanced Custom Fields(ACF)给产品加了对应的自定义字段组,子字段能在Product Feed Pro里正常显示,但不知道怎么把这些字段映射成上面的嵌套XML结构。

已尝试的方案

  • 编辑PHP文件想启用shippingOptions这类组的嵌套功能,没成功
  • 试过插件里所有可视化配置选项,没找到可行方法

关键参考:插件内置嵌套组逻辑

插件本身支持内置嵌套组(比如budget),不用手动选父字段就能生成正确的XML结构,示例如下:

<admarkt:budget>
    <admarkt:totalBudget>20</admarkt:totalBudget>
    <admarkt:dailyBudget>5</admarkt:dailyBudget>
    <admarkt:cpc>0.09</admarkt:cpc>
</admarkt:budget>

解决方案:可视化配置实现(无需改代码)

既然插件本身有处理嵌套组的逻辑,直接用可视化配置就能搞定:

步骤1:确认ACF字段结构

先确保你的ACF字段组是按嵌套逻辑建的:

  • 建一个重复字段组(比如命名为shipping_options)
  • 每组里包含shipping_type、location/cost/time这些子字段(对应XML里的子节点)

步骤2:添加顶级XML容器节点

  1. 打开Feed编辑页面,找到「自定义字段」或「XML元素」配置区
  2. 添加一个顶级XML节点,命名为admarkt:shippingOptions,类型选「容器」(对应父节点)

步骤3:映射重复字段到嵌套子节点

  1. 给每个shippingOption建子容器:
    • 在admarkt:shippingOptions下面加子节点admarkt:shippingOption,同样设为「容器」类型
    • 依次添加admarkt:shippingType、admarkt:location(或cost/time)这些子节点,分别映射到对应的ACF子字段
  2. 开启循环:在admarkt:shippingOption节点的设置里,关联你建的ACF重复字段组,让插件自动循环生成多个shippingOption节点

步骤4:验证Feed输出

生成测试Feed,检查XML结构是否和目标示例一致,确认所有嵌套节点都正确关联了字段值

备选方案:用代码钩子实现

如果可视化配置满足不了需求,就用插件提供的钩子动态生成嵌套XML:

add_filter('woo_feed_item_value', 'custom_shipping_options_xml', 10, 3);
function custom_shipping_options_xml($value, $product, $field_name) {
    if ($field_name === 'shipping_options') {
        $shipping_options = get_field('shipping_options', $product->get_id());
        $xml = '<admarkt:shippingOptions>';
        foreach ($shipping_options as $option) {
            $xml .= '<admarkt:shippingOption>';
            $xml .= '<admarkt:shippingType>' . esc_xml($option['shipping_type']) . '</admarkt:shippingType>';
            if (!empty($option['location'])) {
                $xml .= '<admarkt:location>' . esc_xml($option['location']) . '</admarkt:location>';
            }
            if (!empty($option['cost'])) {
                $xml .= '<admarkt:cost>' . esc_xml($option['cost']) . '</admarkt:cost>';
            }
            if (!empty($option['time'])) {
                $xml .= '<admarkt:time>' . esc_xml($option['time']) . '</admarkt:time>';
            }
            $xml .= '</admarkt:shippingOption>';
        }
        $xml .= '</admarkt:shippingOptions>';
        return $xml;
    }
    return $value;
}

把这段代码加到主题的functions.php或者自定义插件里,然后在Feed配置里加一个自定义字段,字段名设为shipping_options,就能输出需要的嵌套XML结构了。

内容的提问来源于stack exchange,提问作者VictorNorbart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:00:04