Skip to content
Create a gist now

Instantly share code, notes, and snippets.

Embed URL


Subversion checkout URL

You can clone with
Download ZIP
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;

Hi Mikejolley. Thanks for sharing this. Im a real novice on the backend of woocommerce, and im having problem understanding on which page this code goes to make it appear on the woocommerce checkout page.

Thanks for your reply


This can go in a plugin or in theme functions.php - wouldn't attempt it unless your good with PHP though.


Thanks so much for the code. I would never had been able to figure it out on my own.

I wanted to know if this is possible. Is there a way for us to create a custom field at checkout that is a list. The data needs to be pulled from the user table and show list of users who's roles are custom such as say Dealer.


I make a plugin and it work. How can i add the field in user profile?


What input types are available here?


The text input for iva's field


If more than one field is added then how to send that field information in email. I tried a lot but could not figure it out.



Hi Mikejolley,
What does the "please enter your xxx" error mean? Since we've been adding some custom fields to our checkout form I get that error.
Hope you can help me


Just what I needed, thanks again Mike ;)


Mike, i have the same problem as Youshah, i have made custom fields but they are not displayed in the email.
Also, i can't see them in the order list.
They are however properly stored in the database.


p.s. Mike, i've used the custom_override_checkout_fields function for the custom fields.


How can add a extra field to registration in checkout page. for example, i want to add a referred by email field when creating account in checkout page.

Please help.
I know how to add extra field but not sure how to place in the registration area.


Hi all, i have just launched the custom checkout fields option extension. With this plugin, you can show/hide any field, change required settings, change field label name and placeholder, add custom fields and css for the checkout form and so on...

Hope this will solve all the customization problem, Cheers!



Hi, I bought your extension, and created an additional field for VAT Number.
Can you give me some guidance on how to add the field to the PIP ( print invoices and packaging lists )

I can sent you the PIP core files should that help...

Many thanx



I used the code above but the custom field value was not displayed in the admin order area. I had to use
get_post_meta( $order->id, 'Refereed By', true )


Okay, I'm using this snippet to create an additional field on the single product page. I'm hooking it into woocommerce_after_single_product_summary but I need to know what to change the $checkout to. $product and $post dont work. Just wondering if anyone has any ideas. Aside from gravity forms I havent seen anything anywhere about successfully doing this.


What is the code to add multiple fields to order details?


Hi Mikejolley.
Congratulations, this is really very useful ....
Would it be possible make this field mandatory only for Italy?

Thanks :)


Hi, Mike!
How to add file upload field?


Hi, i added 2 fields to my product page where category=myName, but i can't save values from them on my order page, could, you please look at my code ? I try many plugins and forms to achieve that without result, just waste time and money ;/
Thanks for any good advice :)


hi guys i m working on customized gift shopping website there are some product want multiple image upload with particular product for purchase any gift i am using woocommerce for my website can any body tell me ho to upload a mulitiple image with particular product please help me i am in truble.


So, I'm not finding it too difficult to ADD custom fields. My issue is getting those custom fields to pass through to the order emails. :(


How to add the fields in the admin panel?


I tried this solution

add_filter( 'woocommerce_admin_billing_fields' , 'admin_field_myfield' );
function admin_field_myfield( $fields ) {
global $post;
$order_id = $post->ID;
$value=get_post_meta( $order_id , 'My Field', true);
$fields['my_field_name'] = array(
'label' => __('My Field', 'woocommerce'),
'show' => true ,
'value' => $value,
return $fields;


If you use the function $woocommerce->add_error
I have this error Failed to load resource: the server responded with a status of 500 (Internal Server Error)

Some ideas?


Hi, how to add this field in a new column in the admin orders.


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.