Magento 2.4.3订单确认邮件商品不显示问题咨询
Magento2 订单确认邮件不展示商品排查方案
第一步:校验邮件模板变量有效性
- 先确认订单确认邮件发送时
$order_id变量是否正常传入模板:
可以在邮件模板中临时加入调试代码{{var $order_id}},触发订单邮件后查看是否输出了合法的数字订单ID,如果为空,说明邮件发送逻辑层未传入变量,需要检查Magento\Sales\Model\Order\Email\Sender\OrderSender类的模板变量赋值逻辑,排查是否有自定义插件篡改了传入的模板参数。 - 如果变量存在,下一步校验
sales_email_order_items布局句柄是否正常加载:
检查是否有第三方模块/自定义模块覆写了该布局,排查路径:app/code/[Vendor]/[Module]/view/frontend/layout/sales_email_order_items.xml
或主题层面的覆写路径:app/design/frontend/[Vendor]/[Theme]/Magento_Sales/layout/sales_email_order_items.xml
重点看该布局文件是否移除了items块,或者块的template属性被修改为不存在的模板路径。
第二步:排查商品渲染逻辑异常
- 确认
sales_email_order_items对应的块类是否被篡改:默认块类为Magento\Sales\Block\Order\Email\Items,全局搜索是否有preference或者插件修改了该类的_toHtml()方法,或是修改了商品集合的获取逻辑。 - 临时调试验证:可以在邮件模板中直接调用原始订单商品数据输出,验证商品数据本身是否正常:
如果上述代码可以正常输出商品信息,说明问题出在{{depend $order}} {{foreach $order.getItemsCollection() as $item}} 商品名称:{{var $item.getName()}} SKU:{{var $item.getSku()}}<br> {{/foreach}} {{/depend}}{{layout handle="sales_email_order_items" order_id=$order_id area="frontend"}}对应的布局渲染链路,而非订单数据本身。
第三步:排查版本升级遗留问题
- 你提到从2.4.1升级到2.4.3前就存在该问题,优先排查旧版本自定义修改未兼容的情况:
- 运行
php bin/magento setup:di:compile确认不存在类编译错误 - 执行
php bin/magento cache:clean layout block_html full_page清理所有布局相关缓存 - 切换到默认Luma主题+禁用所有第三方自定义模块后重新测试邮件发送,如果恢复正常,逐一启用模块排查冲突即可。
- 运行
- 多店模式额外校验:确认当前店铺对应的邮件模板确实是包含你提到的layout代码片段的模板,避免错用了店铺级别配置的其他邮件模板。
内容的提问来源于stack exchange,提问作者Nicolai Kamphenkel
相关产品推荐
相关产品推荐

