New checkout field layout Closes #2120.

This commit is contained in:
Mike Jolley 2013-01-03 12:34:31 +00:00
parent 0645a8a690
commit b6387a152e
7 changed files with 111 additions and 127 deletions

View File

@ -351,9 +351,9 @@ jQuery(document).ready(function($) {
if ( key !== 'state' ) {
if ( thislocale[key]['hidden'] == true ) {
field.fadeOut(200).find('input').val('');
field.hide().find('input').val('');
} else {
field.fadeIn(500);
field.show();
}
}
@ -362,34 +362,24 @@ jQuery(document).ready(function($) {
if (field.find('label abbr').size()==0) field.find('label').append( required );
}
if ( key !== 'state' && (typeof locale['default'][key]['hidden'] == 'undefined' || locale['default'][key]['hidden'] == false) ) {
field.fadeIn(500);
field.show();
}
}
});
var postcodefield = thisform.find('#billing_postcode_field, #shipping_postcode_field');
var cityfield = thisform.find('#billing_city_field, #shipping_city_field');
var $postcodefield = thisform.find('#billing_postcode_field, #shipping_postcode_field');
var $cityfield = thisform.find('#billing_city_field, #shipping_city_field');
// Re-order postcode/city
if ( thislocale['postcode_before_city'] ) {
if (cityfield.is('.form-row-first')) {
cityfield.fadeOut(200, function() {
cityfield.removeClass('form-row-first').addClass('form-row-last').insertAfter( postcodefield ).fadeIn(500);
});
postcodefield.fadeOut(200, function (){
postcodefield.removeClass('form-row-last').addClass('form-row-first').fadeIn(500);
});
}
$postcodefield.removeClass('form-row-last').addClass('form-row-wide');
$cityfield.removeClass('form-row-wide').addClass('form-row-first');
$postcodefield.insertBefore( $cityfield );
} else {
if (cityfield.is('.form-row-last')) {
cityfield.fadeOut(200, function() {
cityfield.removeClass('form-row-last').addClass('form-row-first').insertBefore( postcodefield ).fadeIn(500);
});
postcodefield.fadeOut(200, function (){
postcodefield.removeClass('form-row-first').addClass('form-row-last').fadeIn(500);
});
}
$postcodefield.removeClass('form-row-wide').addClass('form-row-last');
$cityfield.removeClass('form-row-first').addClass('form-row-wide');
$postcodefield.insertAfter( $cityfield );
}
})

File diff suppressed because one or more lines are too long

View File

@ -72,21 +72,22 @@ jQuery(document).ready(function($) {
var input_name = $statebox.attr('name');
var input_id = $statebox.attr('id');
var value = $statebox.val();
var placeholder = $statebox.attr('placeholder');
if (states[country]) {
if (states[country].length == 0) {
// Empty array means state field is not used
$parent.fadeOut(200, function() {
//$parent.fadeOut(200, function() {
$statebox.parent().find('.chzn-container').remove();
$statebox.replaceWith('<input type="hidden" class="hidden" name="' + input_name + '" id="' + input_id + '" value="" />');
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
});
//});
} else {
$parent.fadeOut(200, function() {
//$parent.fadeOut(200, function() {
var options = '';
var state = states[country];
for(var index in state) {
@ -94,7 +95,7 @@ jQuery(document).ready(function($) {
}
if ($statebox.is('input')) {
// Change for select
$statebox.replaceWith('<select name="' + input_name + '" id="' + input_id + '" class="state_select"></select>');
$statebox.replaceWith('<select name="' + input_name + '" id="' + input_id + '" class="state_select" placeholder="' + placeholder + '"></select>');
$statebox = $(this).closest('div').find('#billing_state, #shipping_state, #calc_shipping_state');
}
$statebox.html( '<option value="">' + woocommerce_params.i18n_select_state_text + '</option>' + options);
@ -103,33 +104,35 @@ jQuery(document).ready(function($) {
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
$parent.fadeIn(500);
});
//$parent.fadeIn(500);
//});
}
} else {
if ($statebox.is('select')) {
$parent.fadeOut(200, function() {
//$parent.fadeOut(200, function() {
$parent.find('.chzn-container').remove();
$statebox.replaceWith('<input type="text" class="input-text" name="' + input_name + '" id="' + input_id + '" />');
$statebox.replaceWith('<input type="text" class="input-text" name="' + input_name + '" id="' + input_id + '" placeholder="' + placeholder + '" />');
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
$parent.fadeIn(500);
});
//$parent.fadeIn(500);
//});
} else if ($statebox.is('.hidden')) {
$parent.find('.chzn-container').remove();
$statebox.replaceWith('<input type="text" class="input-text" name="' + input_name + '" id="' + input_id + '" />');
$statebox.replaceWith('<input type="text" class="input-text" name="' + input_name + '" id="' + input_id + '" placeholder="' + placeholder + '" />');
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
$parent.delay(200).fadeIn(500);
//$parent.delay(200).fadeIn(500);
}
}
$('body').delay(200).trigger('country_to_state_changing', [country, $(this).closest('div')]);
$('body')
//.delay(200)
.trigger('country_to_state_changing', [country, $(this).closest('div')]);
});

View File

@ -1 +1 @@
jQuery(document).ready(function(e){e("select.orderby").change(function(){e(this).closest("form").submit()});e("div.quantity:not(.buttons_added), td.quantity:not(.buttons_added)").addClass("buttons_added").append('<input type="button" value="+" class="plus" />').prepend('<input type="button" value="-" class="minus" />');e("input.qty:not(.product-quantity input.qty)").each(function(){var t=parseFloat(e(this).attr("min"));t&&t>0&&parseFloat(e(this).val())<t&&e(this).val(t)});e(document).on("click",".plus, .minus",function(){var t=e(this).closest(".quantity").find(".qty"),n=parseFloat(t.val()),r=parseFloat(t.attr("max")),i=parseFloat(t.attr("min")),s=t.attr("step");if(!n||n==""||n=="NaN")n=0;if(r==""||r=="NaN")r="";if(i==""||i=="NaN")i=0;if(s=="any"||s==""||s==undefined||parseFloat(s)=="NaN")s=1;e(this).is(".plus")?r&&(r==n||n>r)?t.val(r):t.val(n+parseFloat(s)):i&&(i==n||n<i)?t.val(i):n>0&&t.val(n-parseFloat(s));t.trigger("change")});var t=woocommerce_params.countries.replace(/&quot;/g,'"'),n=e.parseJSON(t);e("select.country_to_state").change(function(){var t=e(this).val(),r=e(this).closest("div").find("#billing_state, #shipping_state, #calc_shipping_state"),i=r.parent(),s=r.attr("name"),o=r.attr("id"),u=r.val();if(n[t])n[t].length==0?i.fadeOut(200,function(){r.parent().find(".chzn-container").remove();r.replaceWith('<input type="hidden" class="hidden" name="'+s+'" id="'+o+'" value="" />');e("body").trigger("country_to_state_changed",[t,e(this).closest("div")])}):i.fadeOut(200,function(){var a="",f=n[t];for(var l in f)a=a+'<option value="'+l+'">'+f[l]+"</option>";if(r.is("input")){r.replaceWith('<select name="'+s+'" id="'+o+'" class="state_select"></select>');r=e(this).closest("div").find("#billing_state, #shipping_state, #calc_shipping_state")}r.html('<option value="">'+woocommerce_params.i18n_select_state_text+"</option>"+a);r.val(u);e("body").trigger("country_to_state_changed",[t,e(this).closest("div")]);i.fadeIn(500)});else if(r.is("select"))i.fadeOut(200,function(){i.find(".chzn-container").remove();r.replaceWith('<input type="text" class="input-text" name="'+s+'" id="'+o+'" />');e("body").trigger("country_to_state_changed",[t,e(this).closest("div")]);i.fadeIn(500)});else if(r.is(".hidden")){i.find(".chzn-container").remove();r.replaceWith('<input type="text" class="input-text" name="'+s+'" id="'+o+'" />');e("body").trigger("country_to_state_changed",[t,e(this).closest("div")]);i.delay(200).fadeIn(500)}e("body").delay(200).trigger("country_to_state_changing",[t,e(this).closest("div")])})});
jQuery(document).ready(function(e){e("select.orderby").change(function(){e(this).closest("form").submit()});e("div.quantity:not(.buttons_added), td.quantity:not(.buttons_added)").addClass("buttons_added").append('<input type="button" value="+" class="plus" />').prepend('<input type="button" value="-" class="minus" />');e("input.qty:not(.product-quantity input.qty)").each(function(){var t=parseFloat(e(this).attr("min"));t&&t>0&&parseFloat(e(this).val())<t&&e(this).val(t)});e(document).on("click",".plus, .minus",function(){var t=e(this).closest(".quantity").find(".qty"),n=parseFloat(t.val()),r=parseFloat(t.attr("max")),i=parseFloat(t.attr("min")),s=t.attr("step");if(!n||n==""||n=="NaN")n=0;if(r==""||r=="NaN")r="";if(i==""||i=="NaN")i=0;if(s=="any"||s==""||s==undefined||parseFloat(s)=="NaN")s=1;e(this).is(".plus")?r&&(r==n||n>r)?t.val(r):t.val(n+parseFloat(s)):i&&(i==n||n<i)?t.val(i):n>0&&t.val(n-parseFloat(s));t.trigger("change")});var t=woocommerce_params.countries.replace(/&quot;/g,'"'),n=e.parseJSON(t);e("select.country_to_state").change(function(){var t=e(this).val(),r=e(this).closest("div").find("#billing_state, #shipping_state, #calc_shipping_state"),i=r.parent(),s=r.attr("name"),o=r.attr("id"),u=r.val(),a=r.attr("placeholder");if(n[t])if(n[t].length==0){r.parent().find(".chzn-container").remove();r.replaceWith('<input type="hidden" class="hidden" name="'+s+'" id="'+o+'" value="" />');e("body").trigger("country_to_state_changed",[t,e(this).closest("div")])}else{var f="",l=n[t];for(var c in l)f=f+'<option value="'+c+'">'+l[c]+"</option>";if(r.is("input")){r.replaceWith('<select name="'+s+'" id="'+o+'" class="state_select" placeholder="'+a+'"></select>');r=e(this).closest("div").find("#billing_state, #shipping_state, #calc_shipping_state")}r.html('<option value="">'+woocommerce_params.i18n_select_state_text+"</option>"+f);r.val(u);e("body").trigger("country_to_state_changed",[t,e(this).closest("div")])}else if(r.is("select")){i.find(".chzn-container").remove();r.replaceWith('<input type="text" class="input-text" name="'+s+'" id="'+o+'" placeholder="'+a+'" />');e("body").trigger("country_to_state_changed",[t,e(this).closest("div")])}else if(r.is(".hidden")){i.find(".chzn-container").remove();r.replaceWith('<input type="text" class="input-text" name="'+s+'" id="'+o+'" placeholder="'+a+'" />');e("body").trigger("country_to_state_changed",[t,e(this).closest("div")])}e("body").trigger("country_to_state_changing",[t,e(this).closest("div")])})});

View File

@ -357,7 +357,7 @@ class WC_Countries {
* @return array
*/
public function get_allowed_countries() {
if ( apply_filters('woocommerce_sort_countries', true ) )
asort( $this->countries );
@ -405,7 +405,7 @@ class WC_Countries {
* @return array
*/
public function get_european_union_countries() {
return array('AT', 'BE', 'BG', 'CY', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'MT', 'NL', 'PL', 'PT', 'RO', 'SE', 'SI', 'SK');
return array( 'AT', 'BE', 'BG', 'CY', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'MT', 'NL', 'PL', 'PT', 'RO', 'SE', 'SI', 'SK' );
}
@ -704,14 +704,12 @@ class WC_Countries {
'CA' => array(
'state' => array(
'label' => __( 'Province', 'woocommerce' ),
'placeholder' => __( 'Province', 'woocommerce' )
)
),
'CH' => array(
'postcode_before_city' => true,
'state' => array(
'label' => __( 'Canton', 'woocommerce' ),
'placeholder' => __( 'Canton', 'woocommerce' ),
'required' => false
)
),
@ -721,13 +719,11 @@ class WC_Countries {
),
'state' => array(
'label' => __( 'Municipality', 'woocommerce' ),
'placeholder' => __( 'Municipality', 'woocommerce' )
)
),
'CN' => array(
'state' => array(
'label' => __( 'Province', 'woocommerce' ),
'placeholder' => __( 'Province', 'woocommerce' )
)
),
'CO' => array(
@ -769,12 +765,10 @@ class WC_Countries {
'required' => false
),
'city' => array(
'label' => __( 'Town/District', 'woocommerce' ),
'placeholder' => __( 'Town/District', 'woocommerce' )
'label' => __( 'Town / District', 'woocommerce' ),
),
'state' => array(
'label' => __( 'Region', 'woocommerce' ),
'placeholder' => __( 'Region', 'woocommerce' )
)
),
'HU' => array(
@ -843,14 +837,12 @@ class WC_Countries {
'postcode_before_city' => true,
'state' => array(
'label' => __( 'Province', 'woocommerce' ),
'placeholder' => __( 'Province', 'woocommerce' )
)
),
'LI' => array(
'postcode_before_city' => true,
'state' => array(
'label' => __( 'Municipality', 'woocommerce' ),
'placeholder' => __( 'Municipality', 'woocommerce' ),
'required' => false
)
),
@ -869,27 +861,22 @@ class WC_Countries {
'postcode_before_city' => true,
'state' => array(
'label' => __( 'Province', 'woocommerce' ),
'placeholder' => __( 'Province', 'woocommerce' )
)
),
'US' => array(
'postcode' => array(
'label' => __( 'Zip', 'woocommerce' ),
'placeholder' => __( 'Zip', 'woocommerce' )
),
'state' => array(
'label' => __( 'State', 'woocommerce' ),
'placeholder' => __( 'State', 'woocommerce' )
)
),
'GB' => array(
'postcode' => array(
'label' => __( 'Postcode', 'woocommerce' ),
'placeholder' => __( 'Postcode', 'woocommerce' )
),
'state' => array(
'label' => __( 'County', 'woocommerce' ),
'placeholder' => __( 'County', 'woocommerce' ),
'required' => false
)
),
@ -915,18 +902,18 @@ class WC_Countries {
'required' => false
),
'postcode' => array(
'label' => __( 'Postcode/Zip', 'woocommerce' ),
'placeholder' => __( 'Postcode/Zip', 'woocommerce' ),
'label' => __( 'Postcode / Zip', 'woocommerce' ),
'placeholder' => __( 'Postcode / Zip', 'woocommerce' ),
'required' => true
),
'city' => array(
'label' => __( 'Town/City', 'woocommerce' ),
'placeholder' => __( 'Town/City', 'woocommerce' ),
'label' => __( 'Town / City', 'woocommerce' ),
'placeholder' => __( 'Town / City', 'woocommerce' ),
'required' => true
),
'state' => array(
'label' => __( 'State/County', 'woocommerce' ),
'placeholder' => __( 'State/County', 'woocommerce' ),
'label' => __( 'State / County', 'woocommerce' ),
'placeholder' => __( 'State / County', 'woocommerce' ),
'required' => true
)
));
@ -948,77 +935,64 @@ class WC_Countries {
$locale = $this->get_country_locale();
$fields = array(
'country' => array(
'type' => 'country',
'label' => __( 'Country', 'woocommerce' ),
'required' => true,
'class' => array( 'form-row-wide', 'update_totals_on_change' ),
),
'first_name' => array(
'label' => __( 'First Name', 'woocommerce' ),
'placeholder' => _x('First Name', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-first'),
'class' => array( 'form-row-first' ),
),
'last_name' => array(
'label' => __( 'Last Name', 'woocommerce' ),
'placeholder' => _x('Last Name', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-last'),
'class' => array( 'form-row-last' ),
'clear' => true
),
'company' => array(
'label' => __( 'Company Name', 'woocommerce' ),
'placeholder' => _x('Company (optional)', 'placeholder', 'woocommerce'),
'clear' => true
'class' => array( 'form-row-wide' ),
),
'address_1' => array(
'label' => __( 'Address', 'woocommerce' ),
'placeholder' => _x('Address', 'placeholder', 'woocommerce'),
'placeholder' => _x( 'Street address', 'placeholder', 'woocommerce' ),
'required' => true,
'class' => array('form-row-first'),
'class' => array( 'form-row-wide' ),
),
'address_2' => array(
'label' => __( 'Address 2', 'woocommerce' ),
'placeholder' => _x('Address 2 (optional)', 'placeholder', 'woocommerce'),
'class' => array('form-row-last'),
'label_class' => array('hidden'),
'clear' => true
'placeholder' => _x( 'Apartment, suite, unit etc. (optional)', 'placeholder', 'woocommerce' ),
'class' => array( 'form-row-wide' ),
),
'city' => array(
'label' => __( 'Town/City', 'woocommerce' ),
'placeholder' => _x('Town/City', 'placeholder', 'woocommerce'),
'label' => __( 'Town / City', 'woocommerce' ),
'required' => true,
'class' => array('form-row-first', 'update_totals_on_change'),
),
'postcode' => array(
'label' => __( 'Postcode/Zip', 'woocommerce' ),
'placeholder' => _x('Postcode/Zip', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-last', 'update_totals_on_change'),
'clear' => true
),
'country' => array(
'type' => 'country',
'label' => __( 'Country', 'woocommerce' ),
'placeholder' => _x('Country', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-first', 'update_totals_on_change'),
'class' => array( 'form-row-wide', 'update_totals_on_change' ),
),
'state' => array(
'type' => 'state',
'label' => __( 'State/County', 'woocommerce' ),
'placeholder' => _x('State/County', 'placeholder', 'woocommerce'),
'label' => __( 'State / County', 'woocommerce' ),
'required' => true,
'class' => array('form-row-last', 'update_totals_on_change'),
'class' => array( 'form-row-first', 'update_totals_on_change' )
),
'postcode' => array(
'label' => __( 'Postcode / Zip', 'woocommerce' ),
'required' => true,
'class' => array( 'form-row-last', 'update_totals_on_change' ),
'clear' => true
)
),
);
if ( isset( $locale[$country] ) ) {
if ( isset( $locale[ $country ] ) ) {
$fields = woocommerce_array_overlay( $fields, $locale[$country] );
$fields = woocommerce_array_overlay( $fields, $locale[ $country ] );
// If default country has postcode_before_city switch the fields round
if ( isset( $locale[$country]['postcode_before_city'] ) ) {
$fields['city']['class'] = array('form-row-last');
$fields['city']['clear'] = true;
$fields['postcode']['class'] = array('form-row-first', 'update_totals_on_change');
$fields['postcode']['clear'] = false;
// If default country has postcode_before_city switch the fields round.
// This is only done at this point, not if country changes on checkout.
if ( isset( $locale[ $country ]['postcode_before_city'] ) ) {
$fields['postcode']['class'] = array( 'form-row-wide', 'update_totals_on_change' );
$switch_fields = array();
@ -1047,16 +1021,14 @@ class WC_Countries {
$address_fields['billing_email'] = array(
'label' => __( 'Email Address', 'woocommerce' ),
'placeholder' => _x('Email Address', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-first'),
'validate' => array('email'),
'class' => array( 'form-row-first' ),
'validate' => array( 'email' ),
);
$address_fields['billing_phone'] = array(
'label' => __( 'Phone', 'woocommerce' ),
'placeholder' => _x('Phone', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-last'),
'class' => array( 'form-row-last' ),
'clear' => true
);

View File

@ -19,7 +19,7 @@ if ( get_option('woocommerce_enable_shipping_calc')=='no' || ! $woocommerce->car
<form class="shipping_calculator" action="<?php echo esc_url( $woocommerce->cart->get_cart_url() ); ?>" method="post">
<h2><a href="#" class="shipping-calculator-button"><?php _e( 'Calculate Shipping', 'woocommerce' ); ?> <span>&darr;</span></a></h2>
<section class="shipping-calculator-form">
<p class="form-row form-row-first">
<p class="form-row form-row-wide">
<select name="calc_shipping_country" id="calc_shipping_country" class="country_to_state" rel="calc_shipping_state">
<option value=""><?php _e( 'Select a country&hellip;', 'woocommerce' ); ?></option>
<?php
@ -28,7 +28,7 @@ if ( get_option('woocommerce_enable_shipping_calc')=='no' || ! $woocommerce->car
?>
</select>
</p>
<p class="form-row form-row-last">
<p class="form-row form-row-wide">
<?php
$current_cc = $woocommerce->customer->get_shipping_country();
$current_r = $woocommerce->customer->get_shipping_state();
@ -58,15 +58,14 @@ if ( get_option('woocommerce_enable_shipping_calc')=='no' || ! $woocommerce->car
// Input
?>
<input type="text" class="input-text" value="<?php echo esc_attr( $current_r ); ?>" placeholder="<?php _e( 'State', 'woocommerce' ); ?>" name="calc_shipping_state" id="calc_shipping_state" />
<input type="text" class="input-text" value="<?php echo esc_attr( $current_r ); ?>" placeholder="<?php _e( 'State / county', 'woocommerce' ); ?>" name="calc_shipping_state" id="calc_shipping_state" />
<?php
}
?>
</p>
<div class="clear"></div>
<p class="form-row form-row-wide">
<input type="text" class="input-text" value="<?php echo esc_attr( $woocommerce->customer->get_shipping_postcode() ); ?>" placeholder="<?php _e( 'Postcode/Zip', 'woocommerce' ); ?>" title="<?php _e( 'Postcode', 'woocommerce' ); ?>" name="calc_shipping_postcode" id="calc_shipping_postcode" />
<input type="text" class="input-text" value="<?php echo esc_attr( $woocommerce->customer->get_shipping_postcode() ); ?>" placeholder="<?php _e( 'Postcode / Zip', 'woocommerce' ); ?>" title="<?php _e( 'Postcode', 'woocommerce' ); ?>" name="calc_shipping_postcode" id="calc_shipping_postcode" />
</p>
<div class="clear"></div>
<p><button type="submit" name="calc_shipping" value="1" class="button"><?php _e( 'Update Totals', 'woocommerce' ); ?></button></p>

View File

@ -1274,8 +1274,10 @@ if ( ! function_exists( 'woocommerce_form_field' ) ) {
if ( sizeof( $woocommerce->countries->get_allowed_countries() ) == 1 ) {
$field = '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field">
<label class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label'] . '</label>';
$field = '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field">';
if ( $args['label'] )
$field .= '<label class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label'] . '</label>';
$field .= '<strong>' . current( array_values( $woocommerce->countries->get_allowed_countries() ) ) . '</strong>';
@ -1322,14 +1324,18 @@ if ( ! function_exists( 'woocommerce_form_field' ) ) {
if ( is_array( $states ) && empty( $states ) ) {
$field = '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field" style="display: none">';
$field .= '<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required . '</label>';
if ( $args['label'] )
$field .= '<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label'] . $required . '</label>';
$field .= '<input type="hidden" class="hidden" name="' . esc_attr( $key ) . '" id="' . esc_attr( $key ) . '" value="" ' . implode( ' ', $custom_attributes ) . ' />';
$field .= '</p>' . $after;
} elseif ( is_array( $states ) ) {
$field = '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field">';
$field .= '<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required . '</label>';
if ( $args['label'] )
$field .= '<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required . '</label>';
$field .= '<select name="' . esc_attr( $key ) . '" id="' . esc_attr( $key ) . '" class="state_select" ' . implode( ' ', $custom_attributes ) . '>
<option value="">'.__( 'Select a state&hellip;', 'woocommerce' ) .'</option>';
@ -1342,7 +1348,9 @@ if ( ! function_exists( 'woocommerce_form_field' ) ) {
} else {
$field = '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field">';
$field .= '<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required . '</label>';
if ( $args['label'] )
$field .= '<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required . '</label>';
$field .= '<input type="text" class="input-text" value="' . $value . '" placeholder="' . $args['placeholder'] . '" name="' . esc_attr( $key ) . '" id="' . esc_attr( $key ) . '" ' . implode( ' ', $custom_attributes ) . ' />';
$field .= '</p>' . $after;
@ -1351,9 +1359,12 @@ if ( ! function_exists( 'woocommerce_form_field' ) ) {
break;
case "textarea" :
$field = '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field">
<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required . '</label>
<textarea name="' . esc_attr( $key ) . '" class="input-text" id="' . esc_attr( $key ) . '" placeholder="' . $args['placeholder'] . '" cols="5" rows="2" ' . implode( ' ', $custom_attributes ) . '>'. esc_textarea( $value ) .'</textarea>
$field = '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field">';
if ( $args['label'] )
$field .= '<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required . '</label>';
$field .= '<textarea name="' . esc_attr( $key ) . '" class="input-text" id="' . esc_attr( $key ) . '" placeholder="' . $args['placeholder'] . '" cols="5" rows="2" ' . implode( ' ', $custom_attributes ) . '>'. esc_textarea( $value ) .'</textarea>
</p>' . $after;
break;
@ -1367,17 +1378,23 @@ if ( ! function_exists( 'woocommerce_form_field' ) ) {
break;
case "password" :
$field = '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field">
<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required . '</label>
<input type="password" class="input-text" name="' . esc_attr( $key ) . '" id="' . esc_attr( $key ) . '" placeholder="' . $args['placeholder'] . '" value="' . esc_attr( $value ) . '" ' . implode( ' ', $custom_attributes ) . ' />
$field = '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field">';
if ( $args['label'] )
$field .= '<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required . '</label>';
$field .= '<input type="password" class="input-text" name="' . esc_attr( $key ) . '" id="' . esc_attr( $key ) . '" placeholder="' . $args['placeholder'] . '" value="' . esc_attr( $value ) . '" ' . implode( ' ', $custom_attributes ) . ' />
</p>' . $after;
break;
case "text" :
$field = '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field">
<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label'] . $required . '</label>
<input type="text" class="input-text" name="' . esc_attr( $key ) . '" id="' . esc_attr( $key ) . '" placeholder="' . $args['placeholder'] . '" '.$args['maxlength'].' value="' . esc_attr( $value ) . '" ' . implode( ' ', $custom_attributes ) . ' />
$field = '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field">';
if ( $args['label'] )
$field .= '<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label'] . $required . '</label>';
$field .= '<input type="text" class="input-text" name="' . esc_attr( $key ) . '" id="' . esc_attr( $key ) . '" placeholder="' . $args['placeholder'] . '" '.$args['maxlength'].' value="' . esc_attr( $value ) . '" ' . implode( ' ', $custom_attributes ) . ' />
</p>' . $after;
break;
@ -1389,9 +1406,12 @@ if ( ! function_exists( 'woocommerce_form_field' ) ) {
foreach ( $args['options'] as $option_key => $option_text )
$options .= '<option value="' . esc_attr( $option_key ) . '" '. selected( $value, $option_key, false ) . '>' . esc_attr( $option_text ) .'</option>';
$field = '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field">
<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required . '</label>
<select name="' . esc_attr( $key ) . '" id="' . esc_attr( $key ) . '" class="select" ' . implode( ' ', $custom_attributes ) . '>
$field = '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field">';
if ( $args['label'] )
$field .= '<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required . '</label>';
$field .= '<select name="' . esc_attr( $key ) . '" id="' . esc_attr( $key ) . '" class="select" ' . implode( ' ', $custom_attributes ) . '>
' . $options . '
</select>
</p>' . $after;