-
-
Save myalban/9f61296d0a5a19a4c03679fba624173e to your computer and use it in GitHub Desktop.
WooCommerce - Add a special field to the checkout, order emails and user/order meta
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Add the field to the checkout | |
**/ | |
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field'); | |
function my_custom_checkout_field( $checkout ) { | |
echo '<div id="my_custom_checkout_field"><h3>'.__('My Field').'</h3>'; | |
/** | |
* Output the field. This is for 1.4. | |
* | |
* To make it compatible with 1.3 use $checkout->checkout_form_field instead: | |
$checkout->checkout_form_field( 'my_field_name', array( | |
'type' => 'text', | |
'class' => array('my-field-class orm-row-wide'), | |
'label' => __('Fill in this field'), | |
'placeholder' => __('Enter a number'), | |
)); | |
**/ | |
woocommerce_form_field( 'my_field_name', array( | |
'type' => 'text', | |
'class' => array('my-field-class orm-row-wide'), | |
'label' => __('Fill in this field'), | |
'placeholder' => __('Enter a number'), | |
), $checkout->get_value( 'my_field_name' )); | |
echo '</div>'; | |
/** | |
* Optional Javascript to limit the field to a country. This one shows for italy only. | |
**/ | |
?> | |
<script type="text/javascript"> | |
jQuery('select#billing_country').live('change', function(){ | |
var country = jQuery('select#billing_country').val(); | |
var check_countries = new Array(<?php echo '"IT"'; ?>); | |
if (country && jQuery.inArray( country, check_countries ) >= 0) { | |
jQuery('#my_custom_checkout_field').fadeIn(); | |
} else { | |
jQuery('#my_custom_checkout_field').fadeOut(); | |
jQuery('#my_custom_checkout_field input').val(''); | |
} | |
}); | |
</script> | |
<?php | |
} | |
/** | |
* Process the checkout | |
**/ | |
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process'); | |
function my_custom_checkout_field_process() { | |
global $woocommerce; | |
// Check if set, if its not set add an error. This one is only requite for companies | |
if ($_POST['billing_company']) | |
if (!$_POST['my_field_name']) | |
$woocommerce->add_error( __('Please enter your XXX.') ); | |
} | |
/** | |
* Update the user meta with field value | |
**/ | |
add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta'); | |
function my_custom_checkout_field_update_user_meta( $user_id ) { | |
if ($user_id && $_POST['my_field_name']) update_user_meta( $user_id, 'my_field_name', esc_attr($_POST['my_field_name']) ); | |
} | |
/** | |
* Update the order meta with field value | |
**/ | |
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta'); | |
function my_custom_checkout_field_update_order_meta( $order_id ) { | |
if ($_POST['my_field_name']) update_post_meta( $order_id, 'My Field', esc_attr($_POST['my_field_name'])); | |
} | |
/** | |
* Add the field to order emails | |
**/ | |
add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys'); | |
function my_custom_checkout_field_order_meta_keys( $keys ) { | |
$keys[] = 'My Field'; | |
return $keys; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment