27

I want to get rid of the "Estimate Shipping costs and Tax" block in the cart. The devdocs tell Disabling a component is the way to go, so I tried the following:

<body>
    <referenceBlock name="checkout.cart.shipping">
        <arguments>
            <argument name="jsLayout" xsi:type="array">
                <item name="components" xsi:type="array">
                    <item name="block-summary" xsi:type="array">

                        <!-- My custom part: -->
                        <item name="config" xsi:type="array">
                            <item name="componentDisabled" xsi:type="boolean">true</item>
                        </item>

                    </item>
                </item>
            </argument>
        </arguments>
    </referenceBlock>
</body>

No effect. Also tried:

<referenceBlock name="checkout.cart.shipping" remove="true"/>

This way, my totals block is totally empty.

Does anyone have suggestions?

72

I think you messed up some closing / opening tags and amount of them this code works:

<referenceBlock name="checkout.cart.shipping">
    <arguments>
        <argument name="jsLayout" xsi:type="array">
            <item name="components" xsi:type="array">
                <item name="block-summary" xsi:type="array">

                    <!-- My custom part: -->
                    <item name="config" xsi:type="array">
                        <item name="componentDisabled" xsi:type="boolean">true</item>
                    </item>

                </item>
            </item>
        </argument>
    </arguments>
</referenceBlock>

To remove the heading as well, override the template checkout/cart/shipping.phtml and comment/remove the following:

<div class="title" data-role="title">
    <strong id="block-shipping-heading" role="heading" aria-level="2">
        <?php /* @escapeNotVerified */ echo $block->getQuote()->isVirtual() ? __('Estimate Tax') : __('Estimate Shipping and Tax') ?>
    </strong>
</div>
9
  • Indeed, I kind of messed up the double <arguments> nodes. The heading still shows up though, the contents of the dropdown are empty now.. Any suggestions to completely remove it? – Timon de Groot Apr 29 '16 at 9:45
  • The heading is specified in the cart shipping template: /vendor/magento/module-checkout/view/frontend/templates/cart/shipping.phtml You can move that into your own template and remove the text from there. – Corefix Apr 29 '16 at 10:25
  • 1
    @TimondeGroot You can just only remove the title part from the template file, without create the layout xml file. In this way you can preserve the shipping calculation in the summary block, but hide the "Estimate Shipping costs and Tax" form. – Andrea Aug 13 '16 at 16:25
  • 1
    The funny thing is that it does not remove the HTML. There is just a "display:none" added. The real proper solution is to rewrite the shipping-estimation.html in Magento_Checkout/js , and even better, rewrite shipping-estimation.js , to remove all that not useful used CPU time. – Pol Ravalitera Aug 29 '17 at 14:37
  • 2
    Even if you remove this block, it will still show order subtotal with shipping price included – Slimshadddyyy Mar 19 '18 at 11:54
8

I also needed to get rid of the "Estimate Shipping costs and Tax" because of a conflict with a payment module.

If your only objective is to not show the block, why not use CSS? This worked for me:

.cart-container .cart-summary #block-shipping {
    display: none;
}

(Version: Magento 2.2.1)

Edit: I tested the above on 2.3.3 and it also removed the carts sub-total and totals. The below CSS will hide just the estimate shipping and tax. For Version 2.3.3:

.checkout-cart-index #block-shipping { display: none; }

3
  • Where to wite this css ?? – Manish Jun 15 '18 at 7:59
  • The best way is to use a custom CSS-file that overrides the css-code but doesn't require you to change the original code. There are many guides out there on how to do that. – storepeinture Jun 16 '18 at 8:38
  • 3
    The best and optimal solution would be the layout way. If you apply a display:none the block still will be loading the js (using resources) – Beto Castillo Aug 3 '18 at 22:32
3

You can just add the following to checkout_cart_index.xml (in your custom theme, not core of course)

<referenceBlock name="checkout.cart.shipping" display="false"/>
2
0

Wanted to share my solution as I felt the other answers weren't very clear.

Magento ver. 2.3.4-p2

I don't want to just hide it (CSS trick above would suffice if I wanted to) but rather remove it to reduce resources on the browser and server.

I overrode the Magento_Checkout::view/shipping.phtml file in a module and removed the 2 blocks of code that render this section.

Here are the 2 blocks of code that need to be removed from view/shipping.phtml

Heading

    <div class="title" data-role="title">
        <strong id="block-shipping-heading" role="heading" aria-level="2">
            <?= $block->getQuote()->isVirtual()
                ? $block->escapeHtml(__('Estimate Tax'))
                : $block->escapeHtml(__('Estimate Shipping and Tax'))
            ?>
        </strong>
    </div>

Content

<!-- ko template: getTemplate() --><!-- /ko -->

This is the full solution:

Override the template via a modules layout xml file (could also be done via your theme if wanted):

app/code/Your/Module/view/frontend/layout/checkout_cart_index.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="checkout.cart.shipping">
            <action method="setTemplate">
                <argument name="template" xsi:type="string">Your_Module::cart/shipping.phtml</argument>
            </action>
        </referenceBlock>
    </body>
</page>

Then add the modified template file: app/code/Your/Module/view/frontend/templates/cart/shipping.phtml

<?php /** @var $block \Magento\Checkout\Block\Cart\Shipping */ ?>

<div id="block-shipping"
     class="block shipping"
     data-mage-init='{"collapsible":{"openedState": "active", "saveState": true}}'
>
    <div id="block-summary"
         data-bind="scope:'block-summary'"
         class="content"
         data-role="content"
         aria-labelledby="block-shipping-heading"
    >
        <script type="text/x-magento-init">
            {
                "#block-summary": {
                    "Magento_Ui/js/core/app": <?= /* @noEscape */ $block->getJsLayout() ?>
                }
            }
        </script>
        <script>
            window.checkoutConfig = <?= /* @noEscape */ $block->getSerializedCheckoutConfig() ?>;
            window.customerData = window.checkoutConfig.customerData;
            window.isCustomerLoggedIn = window.checkoutConfig.isCustomerLoggedIn;
            require([
                'mage/url',
                'Magento_Ui/js/block-loader'
            ], function(url, blockLoader) {
                blockLoader(
                    "<?= $block->escapeJs($block->escapeUrl($block->getViewFileUrl('images/loader-1.gif'))) ?>"
                );
                return url.setBaseUrl('<?= $block->escapeJs($block->escapeUrl($block->getBaseUrl())) ?>');
            })
        </script>
 </div>
</div>

0

To override using your custom theme File: app/design/frontend/Local/custom_theme/Magento_Checkout/layout/checkout_cart_index.xml

Content:

    <?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.cart.shipping" remove="true"/>
    </body>
</page>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.