---
title: "How do you add a NIF or CIF field to WooCommerce 2.1?"
description: "Order form of the Herves-Vida online shop. In How do you add a NIF or CIF field to WooCommerce 2.0? we explained how to add a NIF/CIF field to WooCommerce, and the code works perfectly in WooCommerce 2.0, but now"
url: https://artprojectgroup.com/how-to-add-a-nif-or-cif-field-to-woocommerce-2-1
date: 2014-02-16
modified: 2026-10-02
author: "Art Project Group"
image: https://artprojectgroup.com/wp-content/uploads/2023/04/woocommerce-blog.webp
categories: ["Tutorials"]
tags: ["functions.php", "PHP", "WooCommerce", "WordPress"]
type: post
lang: en-US
---

# How do you add a NIF or CIF field to WooCommerce 2.1?

[Order form of the Herves-Vida online shop](https://artprojectgroup.com/wp-content/uploads/2013/11/formulario-de-pedido-de-la-tienda-virtual-de-herves-vida.webp)Order form of the Herves-Vida online shop

In [How do you add a NIF or CIF field to WooCommerce 2.0?](/how-to-add-a-nif-or-cif-field-to-woocommerce-2-0) we explained how to add a NIF/CIF field to WooCommerce, and the code works perfectly in WooCommerce 2.0, but now that the new version 2.1 has been published, it has stopped working. That is why we are opening this new post with the new code, which in fact only needs two lines changed and one new function added, so that all those who decide to carry on with WooCommerce 2.0 can go on using the old code, and those of you who have already updated to WooCommerce 2.1 can use this new one that we are proposing to you today.

This time we are not going to go into detail on the code, since anyone who needs to know each function in depth can do so in the previous post.

Just as with the previous functions, we are going to add the following PHP code to the *functions.php* file of our child theme:

Copy to clipboardSyntax Highlighter//We fix the default address
function address_fields( $fields ) {
$fields[ 'nif' ] = array(
'label' => __( 'CIF/NIF', 'woocommerce' ),
'placeholder' => _x( 'Enter the CIF/NIF', 'placeholder', 'woocommerce' ),
'required' => false,
'class' => array( 'form-row-last' ),
'clear' => true,
);

$fields[ 'company' ]\[ 'class' ]\[ 0 ] = 'form-row-first';
$fields[ 'city' ]\[ 'class' ]\[ 0 ] = 'form-row-first';
$fields[ 'state' ]\[ 'class' ]\[ 0 ] = 'form-row-last update_totals_on_change';
$fields[ 'postcode' ]\[ 'class' ]\[ 0 ] .= ' update_totals_on_change';

//We reorder the fields
$new_fields[ 'country' ] = $fields[ 'country' ];
$new_fields[ 'first_name' ] = $fields[ 'first_name' ];
$new_fields[ 'last_name' ] = $fields[ 'last_name' ];
$new_fields[ 'company' ] = $fields[ 'company' ];
$new_fields[ 'nif' ] = $fields[ 'nif' ];
$new_fields[ 'address_1' ] = $fields[ 'address_1' ];
$new_fields[ 'address_2' ] = $fields[ 'address_2' ];
$new_fields[ 'postcode' ] = $fields[ 'postcode' ];
$new_fields[ 'city' ] = $fields[ 'city' ];
$new_fields[ 'state' ] = $fields[ 'state' ];
if ( isset( $fields[ 'email' ] ) )$new_fields[ 'email' ] = $fields[ 'email' ];
if ( isset( $fields[ 'phone' ] ) )$new_fields[ 'phone' ] = $fields[ 'phone' ];

return $new_fields;
}
add_filter( 'woocommerce_default_address_fields', 'address_fields' );

//New function to make the code compatible with WooCommerce 2.1
function get_custom_field( $field, $order ) {
$value = get_post_meta( $order, $field, false );

if ( isset( $value[ 0 ] ) ) return $value[ 0 ];

return NULL;
}

//We add the NIF to the billing and shipping address
function add_nif_field_to_billing_address( $fields, $order ) {
$fields[ 'nif' ] = get_custom_field( '_billing_nif', $order->id );

return $fields;
}
add_filter( 'woocommerce_order_formatted_billing_address', 'add_nif_field_to_billing_address', 1, 2 );

function add_nif_field_to_shipping_address( $fields, $order ) {
$fields[ 'nif' ] = get_custom_field( '_shipping_nif', $order->id );

return $fields;
}
add_filter( 'woocommerce_order_formatted_shipping_address', 'add_nif_field_to_shipping_address', 1, 2 );

function billing_address_format( $fields, $argumentos ) {
$fields[ '{nif}' ] = $argumentos[ 'nif' ];
$fields[ '{nif_upper}' ] = strtoupper( $argumentos[ 'nif' ] );

return $fields;
}
add_filter( 'woocommerce_formatted_address_replacements', 'billing_address_format', 1, 2 );

//We reorder the fields of the default address
function localisation_address_format( $fields ) {
$fields[ 'default' ] = "{name}\n{company}\n{nif}\n{address_1}\n{address_2}\n{city}\n{state}\n{postcode}\n{country}";
$fields[ 'ES' ] = "{name}\n{company}\n{nif}\n{address_1}\n{address_2}\n{postcode} {city}\n{state}\n{country}";

return $fields;
}
add_filter( 'woocommerce_localisation_address_formats', 'localisation_address_format' );

//We fix the shipping form
function shipping_form( $fields ) {
$fields[ 'shipping_email' ] = array(
'label' => __( 'Email Address', 'woocommerce' ),
'required' => false,
'class' => array( 'form-row-first' ),
'validate' => array( 'email' ),
);
$fields[ 'shipping_phone' ] = array(
'label' => __( 'Phone', 'woocommerce' ),
'required' => true,
'class' => array( 'form-row-last' ),
'clear' => true,
);
$fields[ 'shipping_postcode' ] = array(
'label' => __( 'Postcode / Zip', 'woocommerce' ),
'placeholder' => __( 'Postcode / Zip', 'woocommerce' ),
'required' => true,
'class' => array( 'form-row-wide', 'address-field' ),
'clear' => true,
'custom_attributes' => array(
'autocomplete' => 'no'
)
);

return $fields;
}
add_filter( 'woocommerce_shipping_fields', 'shipping_form' );

//We fix the billing form
function billing_form( $fields ) {
$fields[ 'billing_postcode' ] = array(
'label' => __( 'Postcode / Zip', 'woocommerce' ),
'placeholder' => __( 'Postcode / Zip', 'woocommerce' ),
'required' => true,
'class' => array( 'form-row-wide', 'address-field' ),
'clear' => true,
'custom_attributes' => array(
'autocomplete' => 'no'
)
);

return $fields;
}
add_filter( 'woocommerce_billing_fields', 'billing_form' );

//Adds the CIF/NIF field to users
function add_fields_to_user_admin( $fields ) {
$fields[ 'billing' ]\[ 'fields' ]\[ 'billing_nif' ] = array(
'label' => __( 'CIF/NIF', 'woocommerce' ),
'description' => ''
);

$fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_nif' ] = array(
'label' => __( 'CIF/NIF', 'woocommerce' ),
'description' => ''
);
$fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_email' ] = array(
'label' => __( 'Email', 'woocommerce' ),
'description' => ''
);
$fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_phone' ] = array(
'label' => __( 'Telephone', 'woocommerce' ),
'description' => ''
);

//We reorder the fields
$new_fields[ 'billing' ]\[ 'title' ] = $fields[ 'billing' ]\[ 'title' ];
$new_fields[ 'billing' ]\[ 'fields' ]\[ 'billing_first_name' ] = $fields[ 'billing' ]\[ 'fields' ]\[ 'billing_first_name' ];
$new_fields[ 'billing' ]\[ 'fields' ]\[ 'billing_last_name' ] = $fields[ 'billing' ]\[ 'fields' ]\[ 'billing_last_name' ];
$new_fields[ 'billing' ]\[ 'fields' ]\[ 'billing_company' ] = $fields[ 'billing' ]\[ 'fields' ]\[ 'billing_company' ];
$new_fields[ 'billing' ]\[ 'fields' ]\[ 'billing_nif' ] = $fields[ 'billing' ]\[ 'fields' ]\[ 'billing_nif' ];
$new_fields[ 'billing' ]\[ 'fields' ]\[ 'billing_address_1' ] = $fields[ 'billing' ]\[ 'fields' ]\[ 'billing_address_1' ];
$new_fields[ 'billing' ]\[ 'fields' ]\[ 'billing_address_2' ] = $fields[ 'billing' ]\[ 'fields' ]\[ 'billing_address_2' ];
$new_fields[ 'billing' ]\[ 'fields' ]\[ 'billing_postcode' ] = $fields[ 'billing' ]\[ 'fields' ]\[ 'billing_postcode' ];
$new_fields[ 'billing' ]\[ 'fields' ]\[ 'billing_city' ] = $fields[ 'billing' ]\[ 'fields' ]\[ 'billing_city' ];
$new_fields[ 'billing' ]\[ 'fields' ]\[ 'billing_state' ] = $fields[ 'billing' ]\[ 'fields' ]\[ 'billing_state' ];
$new_fields[ 'billing' ]\[ 'fields' ]\[ 'billing_country' ] = $fields[ 'billing' ]\[ 'fields' ]\[ 'billing_country' ];
$new_fields[ 'billing' ]\[ 'fields' ]\[ 'billing_phone' ] = $fields[ 'billing' ]\[ 'fields' ]\[ 'billing_phone' ];
$new_fields[ 'billing' ]\[ 'fields' ]\[ 'billing_email' ] = $fields[ 'billing' ]\[ 'fields' ]\[ 'billing_email' ];

$new_fields[ 'shipping' ]\[ 'title' ] = $fields[ 'shipping' ]\[ 'title' ];
$new_fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_first_name' ] = $fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_first_name' ];
$new_fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_last_name' ] = $fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_last_name' ];
$new_fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_company' ] = $fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_company' ];
$new_fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_nif' ] = $fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_nif' ];
$new_fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_address_1' ] = $fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_address_1' ];
$new_fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_address_2' ] = $fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_address_2' ];
$new_fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_postcode' ] = $fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_postcode' ];
$new_fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_city' ] = $fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_city' ];
$new_fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_state' ] = $fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_state' ];
$new_fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_country' ] = $fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_country' ];
$new_fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_phone' ] = $fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_phone' ];
$new_fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_email' ] = $fields[ 'shipping' ]\[ 'fields' ]\[ 'shipping_email' ];

$new_fields = apply_filters( 'wcbcf_customer_meta_fields', $new_fields );

return $new_fields;
}
add_filter( 'woocommerce_customer_meta_fields', 'add_fields_to_user_admin' );

//We add the NIF to the billing and shipping address
function add_nif_field_to_user_billing_address( $fields, $user ) {
$fields[ 'nif' ] = get_user_meta( $user, 'billing_nif', true );

return $fields;
}
add_filter( 'woocommerce_user_column_billing_address', 'add_nif_field_to_user_billing_address', 1, 2 );

function add_nif_field_to_user_shipping_address( $fields, $user ) {
$fields[ 'nif' ] = get_user_meta( $user, 'shipping_nif', true );

return $fields;
}
add_filter( 'woocommerce_user_column_shipping_address', 'add_nif_field_to_user_shipping_address', 1, 2 );

//Adds the NIF field to Edit my address
function add_nif_field_to_edit_address( $fields, $user, $name ) {
$fields[ 'nif' ] = get_user_meta( $user, $name . '_nif', true );

//Sorts the fields
$new_fields[ 'first_name' ] = $fields[ 'first_name' ];
$new_fields[ 'last_name' ] = $fields[ 'last_name' ];
$new_fields[ 'company' ] = $fields[ 'company' ];
$new_fields[ 'nif' ] = $fields[ 'nif' ];
$new_fields[ 'address_1' ] = $fields[ 'address_1' ];
$new_fields[ 'address_2' ] = $fields[ 'address_2' ];
$new_fields[ 'postcode' ] = $fields[ 'postcode' ];
$new_fields[ 'city' ] = $fields[ 'city' ];
$new_fields[ 'state' ] = $fields[ 'state' ];
$new_fields[ 'country' ] = $fields[ 'country' ];

return $new_fields;
}
add_filter( 'woocommerce_my_account_my_address_formatted_address', 'add_nif_field_to_edit_address', 10, 3 );

//Adds the NIF field to Order details
function add_nif_field_to_order_edit_address( $fields ) {
$fields[ 'nif' ] = array(
'label' => __( 'CIF/NIF', 'woocommerce' ),
'show' => false
);

//Sorts the fields
$new_fields[ 'first_name' ] = $fields[ 'first_name' ];
$new_fields[ 'last_name' ] = $fields[ 'last_name' ];
$new_fields[ 'company' ] = $fields[ 'company' ];
$new_fields[ 'nif' ] = $fields[ 'nif' ];
$new_fields[ 'address_1' ] = $fields[ 'address_1' ];
$new_fields[ 'address_2' ] = $fields[ 'address_2' ];
$new_fields[ 'postcode' ] = $fields[ 'postcode' ];
$new_fields[ 'city' ] = $fields[ 'city' ];
$new_fields[ 'state' ] = $fields[ 'state' ];
$new_fields[ 'country' ] = $fields[ 'country' ];

return $new_fields;
}
add_filter( 'woocommerce_admin_billing_fields', 'add_nif_field_to_order_edit_address' );
add_filter( 'woocommerce_admin_shipping_fields', 'add_nif_field_to_order_edit_address' );

function load_order_edit_address_stylesheet() {
echo '

';
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'load_order_edit_address_stylesheet' );
After modifying it and saving it, we will see that the errors and problems that had appeared with WooCommerce 2.1 disappear.

We hope you find it useful and that you let us know about any problems that come up for you, so that we can go on updating the code whenever it is necessary.
