Skip to content

Instantly share code, notes, and snippets.

Created January 13, 2012 00:31
Show Gist options
  • Save mikejolley/1604009 to your computer and use it in GitHub Desktop.
Save mikejolley/1604009 to your computer and use it in GitHub Desktop.
WooCommerce - Add a special field to the checkout, order emails and user/order meta
* 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) {
} else {
jQuery('#my_custom_checkout_field input').val('');
* 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;
Copy link

swoboda commented Nov 10, 2016


Use wc_add_notice instead:

wc_add_notice( __( 'Please enter something into this new shiny field.' ), 'error' );

Worked for me.

Copy link

i want to add new field like country and state fields. Instead of country will add some school name and according to school branch will display like state.. it should be displayed on checkout page. Is it possible or not.. if its possible i can pay the money for that please help it was urgent

Copy link


Can i change the position, where it will be displays in the email?

Copy link

It displays after order comments.

How can it be displayed after first/last billing name or before billing email?

Copy link

How could I add that custom field value to order_comments? Fulfillment software won't pull in the order meta by default.

Copy link

zaheer-bashir commented Jul 22, 2020

You can also used to add Email order data by using this code

add_action( "woocommerce_email_after_order_table", "custom_woocommerce_email_after_order_table", 10, 1);

function custom_woocommerce_email_after_order_table( $order ) {

    echo '<p><strong>Mobile Phone :</strong>'. get_post_meta( $order->id, "mobile_phone", true ) .'</p>';
    echo '<p><strong>Birthday :</strong>'. get_post_meta( $order->id, "birthday", true ) .'</p>';



Copy link

mcnaveen commented Oct 18, 2020

How to show an error when the added field is empty?

Edit: Here is the Updated Code. (I disabled the Last Few Lines which helps to send the detail via Email)

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