Shopware 6订单导出配置:如何获取支付方式及配送地址国别?
Shopware 6 订单导出关联字段缺失及地址翻译问题解决方法
一、交易与支付方式字段为空/无提示问题
你之前修改的CategoryCriteriaSubscriber.php是分类导入导出的专属订阅器,和订单导出完全无关,这就是修改无效的原因。正确的操作如下:
- 找到订单导出对应的订阅器文件:
vendor/shopware/core/Content/ImportExport/Event/Subscriber/OrderCriteriaSubscriber.php - 在该文件的
prepareCriteria方法中,添加交易及支付方式的关联代码:// 添加交易与支付方式的关联 $criteria->addAssociation('transactions.paymentMethod'); // 如果需要支付方式的多语言名称,追加以下代码 $criteria->addAssociation('transactions.paymentMethod.translations'); - 执行缓存清除命令后重新测试导出,此时
transactions.paymentMethod字段会正常获取值,导出配置的字段提示也会出现transactions相关选项。
二、配送地址国别翻译无法获取问题
账单地址的关联默认已配置,但配送地址的国别关联需要手动添加,同样在OrderCriteriaSubscriber.php的prepareCriteria方法中补充:
// 添加配送地址及国别翻译的关联 $criteria->addAssociation('deliveries.shippingOrderAddress.country'); $criteria->addAssociation('deliveries.shippingOrderAddress.country.translations');
导出时使用类似deliveries.shippingOrderAddress.country.translations.zh-CN.name的字段路径,即可获取对应语言的配送地址国别名称。
最佳实践:避免修改核心文件
直接修改vendor目录下的核心文件会在版本更新时被覆盖,建议通过自定义插件实现无侵入式扩展:
- 创建自定义插件,注册
ImportExportBeforeImportExportEvent事件订阅器 - 在订阅器中判断当前导出实体为订单时,动态添加所需关联:
use Shopware\Core\Content\ImportExport\Event\ImportExportBeforeImportExportEvent; use Shopware\Core\Content\Order\OrderDefinition; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class OrderExportCriteriaSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ ImportExportBeforeImportExportEvent::class => 'onBeforeImportExport', ]; } public function onBeforeImportExport(ImportExportBeforeImportExportEvent $event): void { $definition = $event->getDefinition(); if ($definition->getEntityName() !== OrderDefinition::ENTITY_NAME) { return; } $criteria = $event->getCriteria(); $criteria->addAssociation('transactions.paymentMethod.translations'); $criteria->addAssociation('deliveries.shippingOrderAddress.country.translations'); } } - 注册订阅器后,安装插件并清除缓存即可生效。
内容的提问来源于stack exchange,提问作者RobinW
相关产品推荐
相关产品推荐

