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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:54:04