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

Magento:如何将结账页折扣码选项移至订单摘要区域后?

搞定Magento结账折扣码位置迁移问题!

嘿,我知道你之前改了核心文件里的afterMethods配置没生效,这大概率是因为没找对正确的布局容器,而且直接改vendor文件也不是Magento推荐的做法,容易被升级覆盖或者因优先级问题导致不生效。下面给你一套靠谱的解决方案:

第一步:别碰核心文件!用自定义布局重写

不管你是用自定义主题还是模块,都在view/frontend/layout目录下新建或者修改checkout_index_index.xml文件,把下面的代码放进去:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="checkout.root">
            <arguments>
                <argument name="jsLayout" xsi:type="array">
                    <item name="components" xsi:type="array">
                        <item name="checkout" xsi:type="array">
                            <item name="children" xsi:type="array">
                                <item name="steps" xsi:type="array">
                                    <!-- 先把原来 shipping 步骤里的折扣码组件禁用掉 -->
                                    <item name="shipping-step" xsi:type="array">
                                        <item name="children" xsi:type="array">
                                            <item name="shipping" xsi:type="array">
                                                <item name="children" xsi:type="array">
                                                    <item name="afterMethods" xsi:type="array">
                                                        <item name="children" xsi:type="array">
                                                            <item name="discount" xsi:type="array">
                                                                <item name="config" xsi:type="array">
                                                                    <item name="componentDisabled" xsi:type="boolean">true</item>
                                                                </item>
                                                            </item>
                                                        </item>
                                                    </item>
                                                </item>
                                            </item>
                                        </item>
                                    </item>

                                    <!-- 把折扣码组件加到支付步骤的订单摘要后面 -->
                                    <item name="payment-step" xsi:type="array">
                                        <item name="children" xsi:type="array">
                                            <item name="payment" xsi:type="array">
                                                <item name="children" xsi:type="array">
                                                    <item name="after-order-summary" xsi:type="array">
                                                        <item name="children" xsi:type="array">
                                                            <item name="discount" xsi:type="array">
                                                                <item name="component" xsi:type="string">Magento_SalesRule/js/view/payment/discount</item>
                                                                <item name="children" xsi:type="array">
                                                                    <item name="errors" xsi:type="array">
                                                                        <item name="sortOrder" xsi:type="string">0</item>
                                                                        <item name="component" xsi:type="string">Magento_SalesRule/js/view/payment/discount-messages</item>
                                                                        <item name="displayArea" xsi:type="string">messages</item>
                                                                    </item>
                                                                </item>
                                                                <item name="sortOrder" xsi:type="string">10</item>
                                                            </item>
                                                        </item>
                                                    </item>
                                                </item>
                                            </item>
                                        </item>
                                    </item>
                                </item>
                            </item>
                        </item>
                    </item>
                </argument>
            </arguments>
        </referenceBlock>
    </body>
</page>

为什么你之前的修改没生效?

  • 直接改vendor文件:Magento的布局合并规则是自定义主题/模块的布局优先级更高,你改核心文件的内容很容易被覆盖,而且下次升级Magento后修改就丢失了。
  • 没处理原组件:你只想着往新位置加组件,但原来shipping步骤里的折扣码还会显示,而且你没找对支付步骤里正确的目标容器after-order-summary——这才是订单摘要后方的专属区域。

最后验证一下

做完上面的操作后,别忘了:

  • 清理缓存:执行命令 bin/magento cache:clean 和 bin/magento cache:flush
  • 生产模式下要部署静态资源:bin/magento setup:static-content:deploy -f
  • 刷新结账页面,切换到支付步骤,就能看到「应用折扣码」乖乖出现在订单摘要后面啦!

对了,要是你用的是Magento 2.4.x版本,记得测试下折扣码的应用、取消功能,确保金额计算没问题哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:21:32