Add sort parameter to checkout fields to aid with sorting per locale.

This commit is contained in:
Mike Jolley 2016-12-12 15:23:28 +00:00
parent 1e80db6021
commit 74f3972e26
6 changed files with 162 additions and 85 deletions

View File

@ -42,20 +42,6 @@ jQuery( function( $ ) {
$statefield.attr( 'data-o_class', $statefield.attr( 'class' ) ); $statefield.attr( 'data-o_class', $statefield.attr( 'class' ) );
} }
// Re-order postcode/city
if ( thislocale.postcode_before_city ) {
$postcodefield.add( $cityfield ).add( $statefield ).removeClass( 'form-row-first form-row-last' ).addClass( 'form-row-first' );
$cityfield.removeClass( 'form-row-wide form-row-first' ).addClass( 'form-row-last' );
$postcodefield.insertBefore( $cityfield );
} else {
// Default
$postcodefield.attr( 'class', $postcodefield.attr( 'data-o_class' ) );
$cityfield.attr( 'class', $cityfield.attr( 'data-o_class' ) );
$statefield.attr( 'class', $statefield.attr( 'data-o_class' ) );
$postcodefield.insertAfter( $statefield );
}
// Handle locale fields
var locale_fields = $.parseJSON( wc_address_i18n_params.locale_fields ); var locale_fields = $.parseJSON( wc_address_i18n_params.locale_fields );
$.each( locale_fields, function( key, value ) { $.each( locale_fields, function( key, value ) {
@ -88,6 +74,12 @@ jQuery( function( $ ) {
} }
} }
if ( thislocale[ key ].sort ) {
field.data( 'sort', thislocale[ key ].sort );
} else if ( locale['default'][ key ].sort ) {
field.data( 'sort', locale['default'][ key ].sort );
}
} else if ( locale['default'][ key ] ) { } else if ( locale['default'][ key ] ) {
if ( 'state' !== key ) { if ( 'state' !== key ) {
@ -113,9 +105,37 @@ jQuery( function( $ ) {
field_is_required( field, true ); field_is_required( field, true );
} }
} }
if ( locale['default'][ key ].sort ) {
field.data( 'sort', locale['default'][ key ].sort );
}
} }
}); });
var fieldsets = $('.woocommerce-billing-fields, .woocommerce-shipping-fields, .woocommerce-address-fields');
fieldsets.each( function( index, fieldset ) {
var rows = $( fieldset ).find('.form-row');
rows.sort(function( a, b ){
var asort = $(a).data('sort'),
bsort = $(b).data('sort');
if ( ! asort || ! bsort ) {
return 0;
}
if ( asort > bsort ) {
return 1;
}
if ( asort < bsort ) {
return -1;
}
return 0;
}); });
rows.detach().prependTo( fieldset );
} );
});
}); });

View File

@ -1 +1 @@
jQuery(function(a){function b(a,b){b?(a.find("label").append(' <abbr class="required" title="'+wc_address_i18n_params.i18n_required_text+'">*</abbr>'),a.addClass("validate-required")):(a.find("label abbr").remove(),a.removeClass("validate-required"))}if("undefined"==typeof wc_address_i18n_params)return!1;var c=wc_address_i18n_params.locale.replace(/&quot;/g,'"'),d=a.parseJSON(c);a(document.body).bind("country_to_state_changing",function(c,e,f){var g,h=f;g="undefined"!=typeof d[e]?d[e]:d["default"];var i=h.find("#billing_postcode_field, #shipping_postcode_field"),j=h.find("#billing_city_field, #shipping_city_field"),k=h.find("#billing_state_field, #shipping_state_field");i.attr("data-o_class")||(i.attr("data-o_class",i.attr("class")),j.attr("data-o_class",j.attr("class")),k.attr("data-o_class",k.attr("class"))),g.postcode_before_city?(i.add(j).add(k).removeClass("form-row-first form-row-last").addClass("form-row-first"),j.removeClass("form-row-wide form-row-first").addClass("form-row-last"),i.insertBefore(j)):(i.attr("class",i.attr("data-o_class")),j.attr("class",j.attr("data-o_class")),k.attr("class",k.attr("data-o_class")),i.insertAfter(k));var l=a.parseJSON(wc_address_i18n_params.locale_fields);a.each(l,function(a,c){var e=h.find(c);g[a]?(g[a].label&&e.find("label").html(g[a].label),g[a].placeholder&&e.find("input").attr("placeholder",g[a].placeholder),b(e,!1),"undefined"==typeof g[a].required&&d["default"][a].required===!0?b(e,!0):g[a].required===!0&&b(e,!0),"state"!==a&&(g[a].hidden===!0?e.hide().find("input").val(""):e.show())):d["default"][a]&&("state"!==a&&("undefined"==typeof d["default"][a].hidden||d["default"][a].hidden===!1?e.show():d["default"][a].hidden===!0&&e.hide().find("input").val("")),"postcode"!==a&&"city"!==a&&"state"!==a||(d["default"][a].label&&e.find("label").html(d["default"][a].label),d["default"][a].placeholder&&e.find("input").attr("placeholder",d["default"][a].placeholder)),d["default"][a].required===!0&&0===e.find("label abbr").length&&b(e,!0))})})}); jQuery(function(a){function b(a,b){b?(a.find("label").append(' <abbr class="required" title="'+wc_address_i18n_params.i18n_required_text+'">*</abbr>'),a.addClass("validate-required")):(a.find("label abbr").remove(),a.removeClass("validate-required"))}if("undefined"==typeof wc_address_i18n_params)return!1;var c=wc_address_i18n_params.locale.replace(/&quot;/g,'"'),d=a.parseJSON(c);a(document.body).bind("country_to_state_changing",function(c,e,f){var g,h=f;g="undefined"!=typeof d[e]?d[e]:d["default"];var i=h.find("#billing_postcode_field, #shipping_postcode_field"),j=h.find("#billing_city_field, #shipping_city_field"),k=h.find("#billing_state_field, #shipping_state_field");i.attr("data-o_class")||(i.attr("data-o_class",i.attr("class")),j.attr("data-o_class",j.attr("class")),k.attr("data-o_class",k.attr("class")));var l=a.parseJSON(wc_address_i18n_params.locale_fields);a.each(l,function(a,c){var e=h.find(c);g[a]?(g[a].label&&e.find("label").html(g[a].label),g[a].placeholder&&e.find("input").attr("placeholder",g[a].placeholder),b(e,!1),"undefined"==typeof g[a].required&&d["default"][a].required===!0?b(e,!0):g[a].required===!0&&b(e,!0),"state"!==a&&(g[a].hidden===!0?e.hide().find("input").val(""):e.show()),g[a].sort?e.data("sort",g[a].sort):d["default"][a].sort&&e.data("sort",d["default"][a].sort)):d["default"][a]&&("state"!==a&&("undefined"==typeof d["default"][a].hidden||d["default"][a].hidden===!1?e.show():d["default"][a].hidden===!0&&e.hide().find("input").val("")),"postcode"!==a&&"city"!==a&&"state"!==a||(d["default"][a].label&&e.find("label").html(d["default"][a].label),d["default"][a].placeholder&&e.find("input").attr("placeholder",d["default"][a].placeholder)),d["default"][a].required===!0&&0===e.find("label abbr").length&&b(e,!0),d["default"][a].sort&&e.data("sort",d["default"][a].sort))});var m=a(".woocommerce-billing-fields, .woocommerce-shipping-fields, .woocommerce-address-fields");m.each(function(b,c){var d=a(c).find(".form-row");d.sort(function(b,c){var d=a(b).data("sort"),e=a(c).data("sort");return d&&e?d>e?1:d<e?-1:0:0}),d.detach().prependTo(c)})})});

View File

@ -403,53 +403,50 @@ class WC_Countries {
/** /**
* Get country address formats. * Get country address formats.
*
* These define how addresses are formatted for display in various countries.
*
* @return array * @return array
*/ */
public function get_address_formats() { public function get_address_formats() {
if ( empty( $this->address_formats ) ) { if ( empty( $this->address_formats ) ) {
// Common formats
$postcode_before_city = "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}";
// Define address formats
$this->address_formats = apply_filters( 'woocommerce_localisation_address_formats', array( $this->address_formats = apply_filters( 'woocommerce_localisation_address_formats', array(
'default' => "{name}\n{company}\n{address_1}\n{address_2}\n{city}\n{state}\n{postcode}\n{country}", 'default' => "{name}\n{company}\n{address_1}\n{address_2}\n{city}\n{state}\n{postcode}\n{country}",
'AU' => "{name}\n{company}\n{address_1}\n{address_2}\n{city} {state} {postcode}\n{country}", 'AU' => "{name}\n{company}\n{address_1}\n{address_2}\n{city} {state} {postcode}\n{country}",
'AT' => $postcode_before_city, 'AT' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'BE' => $postcode_before_city, 'BE' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'CA' => "{company}\n{name}\n{address_1}\n{address_2}\n{city} {state} {postcode}\n{country}", 'CA' => "{company}\n{name}\n{address_1}\n{address_2}\n{city} {state} {postcode}\n{country}",
'CH' => $postcode_before_city, 'CH' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'CL' => "{company}\n{name}\n{address_1}\n{address_2}\n{state}\n{postcode} {city}\n{country}", 'CL' => "{company}\n{name}\n{address_1}\n{address_2}\n{state}\n{postcode} {city}\n{country}",
'CN' => "{country} {postcode}\n{state}, {city}, {address_2}, {address_1}\n{company}\n{name}", 'CN' => "{country} {postcode}\n{state}, {city}, {address_2}, {address_1}\n{company}\n{name}",
'CZ' => $postcode_before_city, 'CZ' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'DE' => $postcode_before_city, 'DE' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'EE' => $postcode_before_city, 'EE' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'FI' => $postcode_before_city, 'FI' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'DK' => $postcode_before_city, 'DK' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'FR' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city_upper}\n{country}", 'FR' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city_upper}\n{country}",
'HK' => "{company}\n{first_name} {last_name_upper}\n{address_1}\n{address_2}\n{city_upper}\n{state_upper}\n{country}", 'HK' => "{company}\n{first_name} {last_name_upper}\n{address_1}\n{address_2}\n{city_upper}\n{state_upper}\n{country}",
'HU' => "{name}\n{company}\n{city}\n{address_1}\n{address_2}\n{postcode}\n{country}", 'HU' => "{name}\n{company}\n{city}\n{address_1}\n{address_2}\n{postcode}\n{country}",
'IN' => "{company}\n{name}\n{address_1}\n{address_2}\n{city} - {postcode}\n{state}, {country}", 'IN' => "{company}\n{name}\n{address_1}\n{address_2}\n{city} - {postcode}\n{state}, {country}",
'IS' => $postcode_before_city, 'IS' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'IT' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode}\n{city}\n{state_upper}\n{country}", 'IT' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode}\n{city}\n{state_upper}\n{country}",
'JP' => "{postcode}\n{state}{city}{address_1}\n{address_2}\n{company}\n{last_name} {first_name}\n{country}", 'JP' => "{postcode}\n{state}{city}{address_1}\n{address_2}\n{company}\n{last_name} {first_name}\n{country}",
'TW' => "{company}\n{last_name} {first_name}\n{address_1}\n{address_2}\n{state}, {city} {postcode}\n{country}", 'TW' => "{company}\n{last_name} {first_name}\n{address_1}\n{address_2}\n{state}, {city} {postcode}\n{country}",
'LI' => $postcode_before_city, 'LI' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'NL' => $postcode_before_city, 'NL' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'NZ' => "{name}\n{company}\n{address_1}\n{address_2}\n{city} {postcode}\n{country}", 'NZ' => "{name}\n{company}\n{address_1}\n{address_2}\n{city} {postcode}\n{country}",
'NO' => $postcode_before_city, 'NO' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'PL' => $postcode_before_city, 'PL' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'PT' => $postcode_before_city, 'PT' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'SK' => $postcode_before_city, 'SK' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'SI' => $postcode_before_city, 'SI' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'ES' => "{name}\n{company}\n{address_1}\n{address_2}\n{postcode} {city}\n{state}\n{country}", 'ES' => "{name}\n{company}\n{address_1}\n{address_2}\n{postcode} {city}\n{state}\n{country}",
'SE' => $postcode_before_city, 'SE' => "{company}\n{name}\n{address_1}\n{address_2}\n{postcode} {city}\n{country}",
'TR' => "{name}\n{company}\n{address_1}\n{address_2}\n{postcode} {city} {state}\n{country}", 'TR' => "{name}\n{company}\n{address_1}\n{address_2}\n{postcode} {city} {state}\n{country}",
'US' => "{name}\n{company}\n{address_1}\n{address_2}\n{city}, {state_code} {postcode}\n{country}", 'US' => "{name}\n{company}\n{address_1}\n{address_2}\n{city}, {state_code} {postcode}\n{country}",
'VN' => "{name}\n{company}\n{address_1}\n{city}\n{country}", 'VN' => "{name}\n{company}\n{address_1}\n{city}\n{country}",
)); ) );
} }
return $this->address_formats; return $this->address_formats;
} }
@ -554,6 +551,7 @@ class WC_Countries {
'class' => array( 'form-row-first' ), 'class' => array( 'form-row-first' ),
'autocomplete' => 'given-name', 'autocomplete' => 'given-name',
'autofocus' => true, 'autofocus' => true,
'sort' => 10,
), ),
'last_name' => array( 'last_name' => array(
'label' => __( 'Last name', 'woocommerce' ), 'label' => __( 'Last name', 'woocommerce' ),
@ -561,11 +559,13 @@ class WC_Countries {
'class' => array( 'form-row-last' ), 'class' => array( 'form-row-last' ),
'clear' => true, 'clear' => true,
'autocomplete' => 'family-name', 'autocomplete' => 'family-name',
'sort' => 20,
), ),
'company' => array( 'company' => array(
'label' => __( 'Company name', 'woocommerce' ), 'label' => __( 'Company name', 'woocommerce' ),
'class' => array( 'form-row-wide' ), 'class' => array( 'form-row-wide' ),
'autocomplete' => 'organization', 'autocomplete' => 'organization',
'sort' => 30,
), ),
'country' => array( 'country' => array(
'type' => 'country', 'type' => 'country',
@ -573,6 +573,7 @@ class WC_Countries {
'required' => true, 'required' => true,
'class' => array( 'form-row-wide', 'address-field', 'update_totals_on_change' ), 'class' => array( 'form-row-wide', 'address-field', 'update_totals_on_change' ),
'autocomplete' => 'country', 'autocomplete' => 'country',
'sort' => 40,
), ),
'address_1' => array( 'address_1' => array(
'label' => __( 'Address', 'woocommerce' ), 'label' => __( 'Address', 'woocommerce' ),
@ -580,34 +581,39 @@ class WC_Countries {
'required' => true, 'required' => true,
'class' => array( 'form-row-wide', 'address-field' ), 'class' => array( 'form-row-wide', 'address-field' ),
'autocomplete' => 'address-line1', 'autocomplete' => 'address-line1',
'sort' => 50,
), ),
'address_2' => array( 'address_2' => array(
'placeholder' => esc_attr__( 'Apartment, suite, unit etc. (optional)', 'woocommerce' ), 'placeholder' => esc_attr__( 'Apartment, suite, unit etc. (optional)', 'woocommerce' ),
'class' => array( 'form-row-wide', 'address-field' ), 'class' => array( 'form-row-wide', 'address-field' ),
'required' => false, 'required' => false,
'autocomplete' => 'address-line2', 'autocomplete' => 'address-line2',
'sort' => 60,
), ),
'city' => array( 'city' => array(
'label' => __( 'Town / City', 'woocommerce' ), 'label' => __( 'Town / City', 'woocommerce' ),
'required' => true, 'required' => true,
'class' => array( 'form-row-wide', 'address-field' ), 'class' => array( 'form-row-wide', 'address-field' ),
'autocomplete' => 'address-level2', 'autocomplete' => 'address-level2',
'sort' => 70,
), ),
'state' => array( 'state' => array(
'type' => 'state', 'type' => 'state',
'label' => __( 'State / County', 'woocommerce' ), 'label' => __( 'State / County', 'woocommerce' ),
'required' => true, 'required' => true,
'class' => array( 'form-row-first', 'address-field' ), 'class' => array( 'form-row-wide', 'address-field' ),
'validate' => array( 'state' ), 'validate' => array( 'state' ),
'autocomplete' => 'address-level1', 'autocomplete' => 'address-level1',
'sort' => 80,
), ),
'postcode' => array( 'postcode' => array(
'label' => __( 'Postcode / ZIP', 'woocommerce' ), 'label' => __( 'Postcode / ZIP', 'woocommerce' ),
'required' => true, 'required' => true,
'class' => array( 'form-row-last', 'address-field' ), 'class' => array( 'form-row-wide', 'address-field' ),
'clear' => true, 'clear' => true,
'validate' => array( 'postcode' ), 'validate' => array( 'postcode' ),
'autocomplete' => 'postal-code', 'autocomplete' => 'postal-code',
'sort' => 90,
), ),
); );
@ -631,12 +637,13 @@ class WC_Countries {
/** /**
* Get country locale settings. * Get country locale settings.
*
* These locales override the default country selections after a country is chosen.
*
* @return array * @return array
*/ */
public function get_country_locale() { public function get_country_locale() {
if ( empty( $this->locale ) ) { if ( empty( $this->locale ) ) {
// Locale information used by the checkout
$this->locale = apply_filters( 'woocommerce_get_country_locale', array( $this->locale = apply_filters( 'woocommerce_get_country_locale', array(
'AE' => array( 'AE' => array(
'postcode' => array( 'postcode' => array(
@ -650,7 +657,9 @@ class WC_Countries {
), ),
), ),
'AT' => array( 'AT' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
@ -667,7 +676,9 @@ class WC_Countries {
), ),
), ),
'AX' => array( 'AX' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
@ -681,7 +692,9 @@ class WC_Countries {
), ),
), ),
'BE' => array( 'BE' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
'label' => __( 'Province', 'woocommerce' ), 'label' => __( 'Province', 'woocommerce' ),
@ -710,7 +723,9 @@ class WC_Countries {
), ),
), ),
'CH' => array( 'CH' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'label' => __( 'Canton', 'woocommerce' ), 'label' => __( 'Canton', 'woocommerce' ),
'required' => false, 'required' => false,
@ -743,31 +758,41 @@ class WC_Countries {
), ),
), ),
'DE' => array( 'DE' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
), ),
'DK' => array( 'DK' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
), ),
'EE' => array( 'EE' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
), ),
'FI' => array( 'FI' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
), ),
'FR' => array( 'FR' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
@ -803,19 +828,25 @@ class WC_Countries {
), ),
), ),
'IS' => array( 'IS' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
), ),
'IL' => array( 'IL' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
), ),
'IT' => array( 'IT' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => true, 'required' => true,
'label' => __( 'Province', 'woocommerce' ), 'label' => __( 'Province', 'woocommerce' ),
@ -824,6 +855,10 @@ class WC_Countries {
'JP' => array( 'JP' => array(
'state' => array( 'state' => array(
'label' => __( 'Prefecture', 'woocommerce' ), 'label' => __( 'Prefecture', 'woocommerce' ),
'sort' => 66,
),
'postcode' => array(
'sort' => 65,
), ),
), ),
'KR' => array( 'KR' => array(
@ -832,7 +867,9 @@ class WC_Countries {
), ),
), ),
'NL' => array( 'NL' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
'label' => __( 'Province', 'woocommerce' ), 'label' => __( 'Province', 'woocommerce' ),
@ -848,7 +885,9 @@ class WC_Countries {
), ),
), ),
'NO' => array( 'NO' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
@ -862,7 +901,9 @@ class WC_Countries {
), ),
), ),
'PL' => array( 'PL' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
@ -883,25 +924,33 @@ class WC_Countries {
), ),
), ),
'SK' => array( 'SK' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
), ),
'SI' => array( 'SI' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
), ),
'ES' => array( 'ES' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'label' => __( 'Province', 'woocommerce' ), 'label' => __( 'Province', 'woocommerce' ),
), ),
), ),
'LI' => array( 'LI' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'label' => __( 'Municipality', 'woocommerce' ), 'label' => __( 'Municipality', 'woocommerce' ),
'required' => false, 'required' => false,
@ -913,13 +962,17 @@ class WC_Countries {
), ),
), ),
'SE' => array( 'SE' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
), ),
'TR' => array( 'TR' => array(
'postcode_before_city' => true, 'postcode' => array(
'sort' => 65,
),
'state' => array( 'state' => array(
'label' => __( 'Province', 'woocommerce' ), 'label' => __( 'Province', 'woocommerce' ),
), ),
@ -942,11 +995,11 @@ class WC_Countries {
), ),
), ),
'VN' => array( 'VN' => array(
'postcode_before_city' => true,
'state' => array( 'state' => array(
'required' => false, 'required' => false,
), ),
'postcode' => array( 'postcode' => array(
'sort' => 65,
'required' => false, 'required' => false,
'hidden' => false, 'hidden' => false,
), ),
@ -976,8 +1029,7 @@ class WC_Countries {
$this->locale = array_intersect_key( $this->locale, array_merge( $this->get_allowed_countries(), $this->get_shipping_countries() ) ); $this->locale = array_intersect_key( $this->locale, array_merge( $this->get_allowed_countries(), $this->get_shipping_countries() ) );
// Default Locale Can be filtered to override fields in get_address_fields(). // Default Locale Can be filtered to override fields in get_address_fields(). Countries with no specific locale will use default.
// Countries with no specific locale will use default.
$this->locale['default'] = apply_filters( 'woocommerce_get_country_locale_default', $this->get_default_address_fields() ); $this->locale['default'] = apply_filters( 'woocommerce_get_country_locale_default', $this->get_default_address_fields() );
// Filter default AND shop base locales to allow overides via a single function. These will be used when changing countries on the checkout // Filter default AND shop base locales to allow overides via a single function. These will be used when changing countries on the checkout
@ -1027,6 +1079,7 @@ class WC_Countries {
'class' => array( 'form-row-first' ), 'class' => array( 'form-row-first' ),
'validate' => array( 'phone' ), 'validate' => array( 'phone' ),
'autocomplete' => 'tel', 'autocomplete' => 'tel',
'sort' => 100,
); );
$address_fields['billing_email'] = array( $address_fields['billing_email'] = array(
'label' => __( 'Email address', 'woocommerce' ), 'label' => __( 'Email address', 'woocommerce' ),
@ -1036,6 +1089,7 @@ class WC_Countries {
'class' => array( 'form-row-last' ), 'class' => array( 'form-row-last' ),
'validate' => array( 'email' ), 'validate' => array( 'email' ),
'autocomplete' => 'no' === get_option( 'woocommerce_registration_generate_username' ) ? 'email' : 'email username', 'autocomplete' => 'no' === get_option( 'woocommerce_registration_generate_username' ) ? 'email' : 'email username',
'sort' => 110,
); );
} }
@ -1045,8 +1099,6 @@ class WC_Countries {
* on country selection. If you want to change things like the required status of an * on country selection. If you want to change things like the required status of an
* address field, filter woocommerce_default_address_fields instead. * address field, filter woocommerce_default_address_fields instead.
*/ */
$address_fields = apply_filters( 'woocommerce_' . $type . 'fields', $address_fields, $country ); return apply_filters( 'woocommerce_' . $type . 'fields', $address_fields, $country );
return $address_fields;
} }
} }

View File

@ -1865,6 +1865,7 @@ if ( ! function_exists( 'woocommerce_form_field' ) ) {
'validate' => array(), 'validate' => array(),
'default' => '', 'default' => '',
'autofocus' => '', 'autofocus' => '',
'sort' => '',
); );
$args = wp_parse_args( $args, $defaults ); $args = wp_parse_args( $args, $defaults );
@ -1915,7 +1916,8 @@ if ( ! function_exists( 'woocommerce_form_field' ) ) {
$field = ''; $field = '';
$label_id = $args['id']; $label_id = $args['id'];
$field_container = '<p class="form-row %1$s" id="%2$s">%3$s</p>'; $sort = $args['sort'] ? $args['sort'] : '';
$field_container = '<p class="form-row %1$s" id="%2$s" data-sort="' . esc_attr( $sort ) . '">%3$s</p>';
switch ( $args['type'] ) { switch ( $args['type'] ) {
case 'country' : case 'country' :

View File

@ -190,6 +190,7 @@ Yes you can! Join in on our [GitHub repository](http://github.com/woocommerce/wo
* Added security section in system status report. * Added security section in system status report.
* Add image_url setting to PayPal Standard. * Add image_url setting to PayPal Standard.
* Fixed attribute registration. Attributes are non-hierarchical by default (parent is not supported). * Fixed attribute registration. Attributes are non-hierarchical by default (parent is not supported).
* Add sort parameter to checkout fields to aid with sorting per locale.
* Performance - Converted _featured and _visibility meta data to terms for faster catalog queries. Upgrade routine handles migration. Developers may need to update queries to reflect this change. * Performance - Converted _featured and _visibility meta data to terms for faster catalog queries. Upgrade routine handles migration. Developers may need to update queries to reflect this change.
* Performance - Converted rating filters to visibility terms. * Performance - Converted rating filters to visibility terms.
* Performance - Added visibility term for outofstock products to speed those queries up also. * Performance - Added visibility term for outofstock products to speed those queries up also.

View File

@ -32,6 +32,7 @@ do_action( 'woocommerce_before_edit_account_address_form' ); ?>
<h3><?php echo apply_filters( 'woocommerce_my_account_edit_address_title', $page_title, $load_address ); ?></h3> <h3><?php echo apply_filters( 'woocommerce_my_account_edit_address_title', $page_title, $load_address ); ?></h3>
<div class="woocommerce-address-fields">
<?php do_action( "woocommerce_before_edit_address_form_{$load_address}" ); ?> <?php do_action( "woocommerce_before_edit_address_form_{$load_address}" ); ?>
<?php foreach ( $address as $key => $field ) : ?> <?php foreach ( $address as $key => $field ) : ?>
@ -47,6 +48,7 @@ do_action( 'woocommerce_before_edit_account_address_form' ); ?>
<?php wp_nonce_field( 'woocommerce-edit_address' ); ?> <?php wp_nonce_field( 'woocommerce-edit_address' ); ?>
<input type="hidden" name="action" value="edit_address" /> <input type="hidden" name="action" value="edit_address" />
</p> </p>
</div>
</form> </form>