I’m building a webshop using WooCommerce. My address setup is like this:
1. billing address
2. checkbox: create account(when not signed in)
3. checkbox: ship to different address
So when the customer checks the box for ‘create account’, they have to fill in a password. I want to use the billing address information for both the billing and the shipping address(as default). However, when a customer now checks the box for ‘create account’ and leaves the ‘ship to different address’ unchecked, the form gives an error saying that the customer needs to fill in the shipping address fields as well. A piece of my checkout code below(billing address fields & create account checkbox; comment for more code please).
I hope someone has a solution. Thanks.
<div class="woocommerce-billing-fields">
<?php if ( WC()->cart->ship_to_billing_address_only() && WC()->cart->needs_shipping() ) : ?>
<h2><?php _e( 'Billing & Shipping', 'woocommerce' ); ?></h2>
<?php else : ?>
<?php endif; ?>
<?php do_action( 'woocommerce_before_checkout_billing_form', $checkout ); ?>
<?php foreach ( $checkout->checkout_fields['billing'] as $key => $field ) : ?>
<?php woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); ?>
<?php endforeach; ?>
<?php do_action('woocommerce_after_checkout_billing_form', $checkout ); ?>
<?php if ( ! is_user_logged_in() && $checkout->enable_signup ) : ?>
<div class="create-account-wrapper">
<?php if ( $checkout->enable_guest_checkout ) : ?>
<p class="form-row form-row-wide create-account-title walsheim checkbox-wrapper">
<input class="input-checkbox" id="createaccount" <?php checked( ( true === $checkout->get_value( 'createaccount' ) || ( true === apply_filters( 'woocommerce_create_account_default_checked', false ) ) ), true) ?> type="checkbox" name="createaccount" value="1" /> <label for="createaccount" class="checkbox"><?php _e( 'create an account', 'woocommerce' ); ?></label>
</p>
<?php endif; ?>
<?php do_action( 'woocommerce_before_checkout_registration_form', $checkout ); ?>
<?php if ( ! empty( $checkout->checkout_fields['account'] ) ) : ?>
<div class="create-account create-account-content">
<p><?php _e( 'Create an account by entering the information below. If you are a returning customer please login at the top of the page.', 'woocommerce' ); ?></p>
<?php foreach ( $checkout->checkout_fields['account'] as $key => $field ) : ?>
<?php woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); ?>
<?php endforeach; ?>
<div class="clear"></div>
</div>
<?php endif; ?>
<?php do_action( 'woocommerce_after_checkout_registration_form', $checkout ); ?>
</div>
<?php endif; ?>
</div>
There is an option in the
woocoomerce
settings page undershipping
tab labeledShipping Destination
. Try choosing theDefault to billing address
options.