Skip to content

Instantly share code, notes, and snippets.

@ScottDeLuzio
Created October 28, 2015 21:59
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ScottDeLuzio/90fd7b11c8e0dba539a0 to your computer and use it in GitHub Desktop.
Save ScottDeLuzio/90fd7b11c8e0dba539a0 to your computer and use it in GitHub Desktop.
remove_filter( 'woocommerce_default_address_fields', 'get_default_address_fields', 10, 1 );
add_filter( 'woocommerce_default_address_fields', 'updated_get_default_address_fields', 10, 1 );
function updated_get_default_address_fields() {
global $woocommerce;
$fields = array(
'first_name' => array(
'label' => __( 'First Name', 'woocommerce' ),
'required' => true,
'class' => array( 'form-row-first' ),
),
'last_name' => array(
'label' => __( 'Last Name', 'woocommerce' ),
'required' => true,
'class' => array( 'form-row-last' ),
'clear' => true
),
'company' => array(
'label' => __( 'Company Name', 'woocommerce' ),
'class' => array( 'form-row-wide' ),
),
'country' => array(
'type' => 'country',
'label' => __( 'Country', 'woocommerce' ),
'required' => true,
'class' => array( 'form-row-wide', 'address-field', 'update_totals_on_change' ),
),
'address_1' => array(
'label' => __( 'Address', 'woocommerce' ),
'placeholder' => _x( 'Street address', 'placeholder', 'woocommerce' ),
'required' => true,
'class' => array( 'form-row-wide', 'address-field' )
),
'address_2' => array(
'placeholder' => _x( 'Apartment, suite, unit etc. (optional)', 'placeholder', 'woocommerce' ),
'class' => array( 'form-row-wide', 'address-field' ),
'required' => false
),
'city' => array(
'label' => __( 'Town / City', 'woocommerce' ),
'placeholder' => __( 'Town / City', 'woocommerce' ),
'required' => true,
'class' => array( 'form-row-wide', 'address-field' )
),
'state' => array(
'type' => 'state',
'label' => __( 'State / County', 'woocommerce' ),
'required' => true,
'class' => array( 'form-row-first', 'address-field' ),
'validate' => array( 'state' )
),
'postcode' => array(
'label' => __( 'Postcode / Zip', 'woocommerce' ),
'placeholder' => __( 'Postcode / Zip', 'woocommerce' ),
'required' => ($woocommerce->customer->get_country() == 'IE') ? false : true,
'class' => array( 'form-row-last', 'address-field' ),
'clear' => true,
'validate' => array( 'postcode' )
),
);
return $fields;
}
@pcaWeb
Copy link

pcaWeb commented Oct 29, 2015

Scott,

this works really well, but does not impact the shipping address fields. I have added another section for that plus a few other bits I cobbled from various sources. Any comments appreciated.

/**
 * Remove postcode requirement if billing or shipping country is Ireland
 * Add to your theme functions.php file or create an mu-plugin
 *
 * Tests for WooCommerce plugin in active state
 * Adds counties of Ireland
 * Renames 'Republic of Ireland' to 'Ireland'
 */

/**
 * Check if WooCommerce is active
*/

if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {

/**
 * Rename 'Republic of Ireland' to 'Ireland'
*/

    add_filter( 'woocommerce_countries', 'rename_ireland' );

    function rename_ireland( $countries ) {

        $countries['IE'] = 'Ireland';

    return $countries;

    }

/**
 * Add Irish counties
*/
    function  wc_irish_counties_add_counties( $states ) {

        $states['IE'] = array(
                                'AN'  => 'County Antrim',
                                'AR'  => 'County Armagh',
                                'CW'  => 'County Carlow',
                                'CN'  => 'County Cavan',
                                'CE'  => 'County Clare',
                                'CK'  => 'County Cork',
                                'LD'  => 'County Londonderry',
                                'DL'  => 'County Donegal',
                                'DW'  => 'County Down',
                                'DN'  => 'County Dublin',
                                'D1'  => 'Dublin 1',
                                'D2'  => 'Dublin 2',
                                'D3'  => 'Dublin 3',
                                'D4'  => 'Dublin 4',
                                'D5'  => 'Dublin 5',
                                'D6'  => 'Dublin 6',
                                'D7'  => 'Dublin 7',
                                'D8'  => 'Dublin 9',
                                'D9'  => 'Dublin 9',
                                'D10' => 'Dublin 10',
                                'D11' => 'Dublin 11',
                                'D12' => 'Dublin 12',
                                'D13' => 'Dublin 13',
                                'D14' => 'Dublin 14',
                                'D15' => 'Dublin 15',
                                'D16' => 'Dublin 16',
                                'D17' => 'Dublin 17',
                                'D18' => 'Dublin 18',
                                'D19' => 'Dublin 19',
                                'D20' => 'Dublin 20',
                                'D21' => 'Dublin 21',
                                'D22' => 'Dublin 22',
                                'D23' => 'Dublin 23',
                                'D24' => 'Dublin 24',
                                'FR'  => 'County Fermanagh',
                                'GY'  => 'County Galway',
                                'KY'  => 'County Kerry',
                                'KE'  => 'County Kildare',
                                'KK'  => 'County Kilkenny',
                                'LS'  => 'County Laois',
                                'LE'  => 'County Leitrim',
                                'LK'  => 'County Limerick',
                                'LG'  => 'County Longford',
                                'LH'  => 'County Louth',
                                'MO'  => 'County Mayo',
                                'MH'  => 'County Meath',
                                'MN'  => 'County Monaghan',
                                'OY'  => 'County Offaly',
                                'RS'  => 'County Roscommon',
                                'SO'  => 'County Sligo',
                                'TP'  => 'CountyTipperary',
                                'TN'  => 'County Tyrone',
                                'WT'  => 'County Waterford',
                                'WM'  => 'County Westmeath',
                                'WX'  => 'County Wexford',
                                'WW'  => 'County Wicklow'

                               );
        return $states;

    }

    add_filter( 'woocommerce_states', 'wc_irish_counties_add_counties' );



    remove_filter( 'woocommerce_default_address_fields', 'get_default_address_fields', 10, 1 );
    add_filter( 'woocommerce_default_address_fields', 'updated_get_default_address_fields', 10, 1 );
    function updated_get_default_address_fields() {
        global $woocommerce;
        $fields = array(
            'first_name' => array(
                'label'    => __( 'First Name', 'woocommerce' ),
                'required' => true,
                'class'    => array( 'form-row-first' ),
            ),
            'last_name' => array(
                'label'    => __( 'Last Name', 'woocommerce' ),
                'required' => true,
                'class'    => array( 'form-row-last' ),
                'clear'    => true
            ),
            'company' => array(
                'label' => __( 'Company Name', 'woocommerce' ),
                'placeholder' => _x( 'Name of company (if appropriate)', 'placeholder', 'woocommerce' ),
                'class' => array( 'form-row-wide' ),
            ),
            'country' => array(
                'type'     => 'country',
                'label'    => __( 'Country', 'woocommerce' ),
                'required' => true,
                'class'    => array( 'form-row-wide', 'address-field', 'update_totals_on_change' ),
            ),
            'address_1' => array(
                'label'       => __( 'Address', 'woocommerce' ),
                'placeholder' => _x( 'Street address', 'placeholder', 'woocommerce' ),
                'required'    => true,
                'class'       => array( 'form-row-wide', 'address-field' )
            ),
            'address_2' => array(
                'placeholder' => _x( 'Apartment, suite, unit etc. (optional)', 'placeholder', 'woocommerce' ),
                'class'       => array( 'form-row-wide', 'address-field' ),
                'required'    => false
            ),
            'city' => array(
                'label'       => __( 'Town / City', 'woocommerce' ),
                'placeholder' => __( 'Town / City', 'woocommerce' ),
                'required'    => true,
                'class'       => array( 'form-row-wide', 'address-field' )
            ),
            'state' => array(
                'type'        => 'state',
                'label'       => __( 'County / State', 'woocommerce' ),
                'placeholder' => __( 'County', 'woocommerce' ),
                'required'    => true,
                'class'       => array( 'form-row-first', 'address-field' ),
                'validate'    => array( 'state' )
            ),
            'postcode' => array(
                'label'       => __( 'Postcode / Zip', 'woocommerce' ),
                'placeholder' => __( 'Postcode / Zip', 'woocommerce' ),
                'required'    => ($woocommerce->customer->get_country() == 'IE') ? false : true,
                'class'       => array( 'form-row-last', 'address-field' ),
                'clear'       => true,
                'validate'    => array( 'postcode' )
            ),
        );

        return $fields;
    }

    remove_filter( 'woocommerce_shipping_fields', 'get_default_address_fields', 10, 1 );
    add_filter( 'woocommerce_shipping_fields', 'updated_get_default_shipping_fields', 10, 1 );
    function updated_get_default_shipping_fields() {
        global $woocommerce;
        $fields = array(
            'first_name' => array(
                'label'    => __( 'First Name', 'woocommerce' ),
                'required' => true,
                'class'    => array( 'form-row-first' ),
            ),
            'last_name' => array(
                'label'    => __( 'Last Name', 'woocommerce' ),
                'required' => true,
                'class'    => array( 'form-row-last' ),
                'clear'    => true
            ),
            'company' => array(
                'label' => __( 'Company Name', 'woocommerce' ),
                'placeholder' => _x( 'Name of company (if appropriate)', 'placeholder', 'woocommerce' ),
                'class' => array( 'form-row-wide' ),
            ),
            'country' => array(
                'type'     => 'country',
                'label'    => __( 'Country', 'woocommerce' ),
                'required' => true,
                'class'    => array( 'form-row-wide', 'address-field', 'update_totals_on_change' ),
            ),
            'address_1' => array(
                'label'       => __( 'Address', 'woocommerce' ),
                'placeholder' => _x( 'Street address', 'placeholder', 'woocommerce' ),
                'required'    => true,
                'class'       => array( 'form-row-wide', 'address-field' )
            ),
            'address_2' => array(
                'placeholder' => _x( 'Apartment, suite, unit etc. (optional)', 'placeholder', 'woocommerce' ),
                'class'       => array( 'form-row-wide', 'address-field' ),
                'required'    => false
            ),
            'city' => array(
                'label'       => __( 'Town / City', 'woocommerce' ),
                'placeholder' => __( 'Town / City', 'woocommerce' ),
                'required'    => true,
                'class'       => array( 'form-row-wide', 'address-field' )
            ),
            'state' => array(
                'type'        => 'state',
                'label'       => __( 'State / County', 'woocommerce' ),
                'placeholder' => __( 'County', 'woocommerce' ),
                'required'    => true,
                'class'       => array( 'form-row-first', 'address-field' ),
                'validate'    => array( 'state' )
            ),
            'postcode' => array(
                'label'       => __( 'Postcode', 'woocommerce' ),
                'placeholder' => __( 'Postcode', 'woocommerce' ),
                'required'    => ($woocommerce->customer->get_shipping_country() == 'IE') ? false : true,
                'class'       => array( 'form-row-last', 'address-field' ),
                'clear'       => true,
                'validate'    => array( 'postcode' )
            ),
        );

        return $fields;
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment