Magento 1: How to remove billing section from checkout page?

Table of Contents

I have recently completed a magento project that customer asked to remove billing section from checkout page. Magento checkout process is quite complex so I decide to just hide that one from magento template.

I suppose you are using RWD default theme and it loads this one page checkout javascript:

skin/frontend/rwd/default/js/opcheckout_rwd.js

I appended  these lines to that one:

$j(document).ready(function(){
    console.log(accordion);
    if(accordion.currentSection == 'opc-billing') {
        billing.save();
    }
    $j("#opc-billing").hide();
    $j("#opc-shipping .step-title").css('border-top', 'none');
    $j("span.number").each(function(){
        var n = parseInt($j(this).text());
        $j(this).text(n-1);
    });
});

And the file source code looks like:

/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE_AFL.txt.
 * It is also available through the world-wide-web at this URL:
 * https://opensource.org/licenses/afl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magento.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to https://www.magento.com for more information.
 *
 * @category    design
 * @package     rwd_default
 * @copyright   Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (https://www.magento.com)
 * @license     https://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 */

Checkout.prototype.gotoSection = function (section, reloadProgressBlock) {
    // Adds class so that the page can be styled to only show the "Checkout Method" step
    if ((this.currentStep == 'login' || this.currentStep == 'billing') && section == 'billing') {
        $j('body').addClass('opc-has-progressed-from-login');
    }

    if (reloadProgressBlock) {
        this.reloadProgressBlock(this.currentStep);
    }
    this.currentStep = section;
    var sectionElement = $('opc-' + section);
    sectionElement.addClassName('allow');
    this.accordion.openSection('opc-' + section);

    // Scroll viewport to top of checkout steps for smaller viewports
    if (Modernizr.mq('(max-width: ' + bp.xsmall + 'px)')) {
        $j('html,body').animate({scrollTop: $j('#checkoutSteps').offset().top}, 800);
    }

    if (!reloadProgressBlock) {
        this.resetPreviousSteps();
    }
}

$j(document).ready(function(){
    console.log(accordion);
    if(accordion.currentSection == 'opc-billing') {
        billing.save();
    }
    $j("#opc-billing").hide();
    $j("#opc-shipping .step-title").css('border-top', 'none');
    $j("span.number").each(function(){
        var n = parseInt($j(this).text());
        $j(this).text(n-1);
    });
});

You should remember to remove checkout progress from the right column to make it consistent by doing these steps:

Copy base app/design/frontend/base/default/template/checkout/onepage/progress/billing.phtml default template to

app/design/frontend/rwd/default/template/checkout/onepage/progress/billing.phtml
<?php
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE_AFL.txt.
 * It is also available through the world-wide-web at this URL:
 * https://opensource.org/licenses/afl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magento.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to https://www.magento.com for more information.
 *
 * @category    design
 * @package     base_default
 * @copyright   Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (https://www.magento.com)
 * @license     https://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 */
?>
<?php if ($this->getCheckout()->getStepData('billing', 'complete')): ?>
<dt class="complete">
    <?php echo $this->__('Billing Address') ?><span class="changelink"> <span class="separator">|</span> <a
        href="#billing"
        onclick="checkout.changeSection('opc-billing'); return false;"><?php echo $this->__('Change') ?></a></span>
</dt>
<dd class="complete">
    <address><?php echo $this->getBilling()->format('html') ?></address>
</dd>
<?php else: ?>
<dt>
    <?php echo $this->__('Billing Address') ?>
</dt>
<?php endif; ?>

after that removing all source code from this file

<?php
//nothing to show

I had to write a simple magento extension to update billing address for all registered customers.

app/code/local/Beehexa/Customerbilling/etc/config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Beehexa_Customerbilling>
            <version>0.1.0</version>
        </Beehexa_Customerbilling>
    </modules>	
    <global>	
        <customerbilling>
                <class>Beehexa_Customerbilling_Model</class>
        </customerbilling>	
        <events>
            <customer_save_before>
                <observers>
                    <Beehexa_Customerbilling>
                        <type>singleton</type>
                        <class>Beehexa_Customerbilling_Model_Observer</class>
                        <method>updateCustomerBilling</method>
                    </Beehexa_Customerbilling>
                </observers>
            </customer_save_before>
            
            <customer_register_success>
                <observers>
                    <Beehexa_Customerbilling>
                        <type>singleton</type>
                        <class>Beehexa_Customerbilling_Model_Observer</class>
                        <method>updateCustomerBilling</method>
                    </Beehexa_Customerbilling>
                </observers>
            </customer_register_success>            
            
        </events>	
    </global>	
</config>
app/code/local/Beehexa/Customerbilling/Model/Observer.php
<?php

class Beehexa_Customerbilling_Model_Observer {

    public function updateCustomerBilling($event) {
        $customer = $event->getCustomer();
        if($customer->getId())
        {
            $address = $customer->getPrimaryBillingAddress();
        } else {
            return;
        }
        
        if ($address)
            return;
        
        $data = [
            'street' => 'default street',
            'company' => 'company',
            'postcode' => '55555',
            'region' => 'Georgia',
            'region_id' => '19',
            'city' => 'Atlanta',
            'firstname' => $customer->getFirstname(),
            'lastname' => $customer->getLastname(),
            'telephone' => '000000000',
            'country_id' => 'US'
        ];
        try {
            $address = Mage::getModel('customer/address');
            $address->setCustomer($customer);
            $address->addData($data);
            $address->save();
            $customer->addAddress($address)
                    ->setDefaultBilling($address->getId())
                    ->save();
        } catch (Exception $ex) {
            Mage::logException($ex);
        }
    }

}

I hope this post can save you time for hiding billing section from magento checkout page.