El Dato DNI o NIF, un campo que no incluye woocommerce por defecto y que hoy veremos una formas de instalarlo.
En muchas de las legislaciones de los países, el campo del documento nacional de identidad (DNI) o el número de identificación fiscal (NIF) de las empresas, es un campo obligatorio que tiene que ser proporcionado por el cliente para poder ser incluido en la factura de compra. Pues bien, ni uno ni otro los proporciona el plugin de woocommerce por defecto.
Hace unos días escribí un post en donde se hablaba de Como generar Facturas y Albaranes PDF en Woocommere, esto solucionaba una de las carencias de las que cuenta woocommerce, pero teníamos otro problema, en estas facturas no se podia incluir el campo NIF o DNI del Cliente en los datos de woocommerce, entonces fue cuando me puse manos a la obra y encontré varias soluciones muy válida para mitigar este problema.
Una de ellas, que para mí es la mas recomendada, es la de incluir unas funciones al final del archivo functions.php, no te preocupes, no es tan complicado, las otras dependían de plugins fáciles de configrar pero no me apetecía cargar más la web con otra extensión mas.
La manera más sencilla de incluir el campo NIF o DNI del Cliente en los datos de woocommerce a través de esta técnica es la siguiente:
Buscamos en nuestra barra lateral derecha de WordPress las opciones de Apariencia–> Editar.
- En esta pantalla que nos aparece buscamos el archivo functions.php, que depende del theme de Wordpress que tengas instalado se puede llamar de diferente manera, en este caso del ejemplo, el del theme Avada se llama Theme Functions. Hacemos doble clic.

- Nos aseguramos que vamos a editar el archivo functions.php, buscamos en la parte de arriba a la derecha de la pantalla que realmente se trata de este archivo, veremos algo parecido como os muestro en la imagen y nos desplazamos con la barra que encontraremos a nuestra derecha hasta LA ÚLTIMA LINEA DE CÓDIGO.

- Ahora, recordar, en la LA ÚLTIMA LINEA DE CÓDIGO copiamos y pegamos las lineas de código que muestro a continuación.
/** * Añade el campo NIF a la página de checkout de WooCommerce */ add_action( 'woocommerce_after_order_notes', 'agrega_mi_campo_personalizado' ); function agrega_mi_campo_personalizado( $checkout ) { echo '<div id="additional_checkout_field"><h2>' . __('Información adicional') . '</h2>'; woocommerce_form_field( 'nif', array( 'type' => 'text', 'class' => array('my-field-class form-row-wide'), 'label' => __('¿Quieres Factura? *No obligatorio'), 'required' => false, 'placeholder' => __('Introduce el Nº de DNI'), ), $checkout->get_value( 'nif' )); echo '</div>'; } /** * Comprueba que el campo NIF no esté vacío */ //add_action('woocommerce_checkout_process', 'comprobar_campo_nif'); //function comprobar_campo_nif() { // Comprueba si se ha introducido un valor y si está vacío se muestra un error. //if ( ! $_POST['nif'] ) // wc_add_notice( __( 'NIF, es un campo requerido. Debe de introducir su NIF para finalizar la compra.' ), 'error' ); //} /** * Actualiza la información del pedido con el nuevo campo */ add_action( 'woocommerce_checkout_update_order_meta', 'actualizar_info_pedido_con_nuevo_campo' ); function actualizar_info_pedido_con_nuevo_campo( $order_id ) { if ( ! empty( $_POST['nif'] ) ) { update_post_meta( $order_id, 'NIF', sanitize_text_field( $_POST['nif'] ) ); } } /** * Muestra el valor del nuevo campo NIF en la página de edición del pedido */ add_action( 'woocommerce_admin_order_data_after_billing_address', 'mostrar_campo_personalizado_en_admin_pedido', 10, 1 ); function mostrar_campo_personalizado_en_admin_pedido($order){ echo '<p><strong>'.__('NIF').':</strong> ' . get_post_meta( $order->id, 'NIF', true ) . '</p>'; } /** * Incluye el campo NIF en el email de notificación del cliente */ add_filter('woocommerce_email_order_meta_keys', 'muestra_campo_personalizado_email'); function muestra_campo_personalizado_email( $keys ) { $keys[] = 'NIF'; return $keys; } - Pulsamos en el botón Actualizar Archivo.
Listo! ya tenemos nuestro código introducido y ya el cliente puede poner su NIF o DNI en los datos de woocommerce. Si queremos que este campo sea obligatorio, sólo tenemos que cambiar false por true en la linea de código que originalmente esta como no requerido ‘required’ => false,
Si en algún momento necesitamos añadir o modificar este campo de forma manual, ya porque no lo tenemos como obligatorio y posteriormente no lo suministran, o bien, si el cliente se ha equivocado y tenemos que cambiarlo, lo haremos desde la opción de campos personalizados que encontramos dentro del pedido en woocommerce–>pedidos. 
Si sabemos algo de programación podemos modificar las lineas pertinentes y poder añadir no solo el campo NIF sino el que deseemos, tendríamos que cambiar los textos o añadir los campos adecuados para hacerlo, pero este es otro tema…
Lo que realmente hemos hecho pegando este código son estas tres funciones que explico acontinuación;
- La primera parte del código añade el campo tipo texto NIF después del aparato de las notas del pedido. /*** Añade el campo NIF a la página de checkout de WooCommerce*/
Si deseas modificar el tipo de campo, lo puedes hacer modificando el valor de la propiedad “type“. Estos son los posibles valores que puede tener:
- ‘select‘. Lista de opciones.
- ‘text-area‘. Área de texto
- ‘text‘. Campo de tipo texto
- ‘password‘. Campo para contraseñas. Se muestra un asterisco por cada carácter que se introduce.
Y si cambiamos el atributo “label” modificamos el que queremos mostrar en la pantalla.
- El siguiente trozo de código lo que hace es introducir los datos del NIF en la base de datos para guardarlos. /*** Actualiza la información del pedido con el nuevo campo*/
- El siguiente tramo muestra el valor introducido por el cliente en la pantalla de edición de los pedidos de woocommerce /*** Muestra el valor del nuevo campo NIF en la página de edición del pedido*/
- El último tramo de código incluye el NIf en el correo que recibe el cliente y nosotros /*** Incluye el campo NIF en el email de notificación del cliente*/
Ahora vamos a mostrar unas lineas de código que te servirá mucho si tienes instalado el plugin WooCommerce PDF Invoices & Packing Slips y que nos ayudaran a generar facturas y albaranes de forma rápida y sencilla, este código lo que hace es insertar el NIF o DNI del cliente en la factura que se le envía por correo.
/** *Incluir NIF en la factura */ add_filter( 'wpo_wcpdf_billing_address', 'incluir_nif_en_factura' ); function incluir_nif_en_factura( $address ){ global $wpo_wcpdf; echo $address . '
'; $wpo_wcpdf->custom_field( 'NIF', 'NIF: ' ); echo '
'; }
Pegar este código justo debajo del anterior.
Y tú, ¿sabes otra forma de incluir el campo NIF o DNI del Cliente en los datos de woocommerce? Cuéntanoslo.
Gracias por la aportación del código a Antonio Cantero de woodemia.com
¿Te he ayudado a solucionar tu problema?
¿Te gustaría ayudarme a seguir con mi trabajo?
Si pulsas en el anuncio que verás abajo, aunque no te interese,estás aportando con aproximadamente 0,05€ que me pagará Google. A ti no te costará nada realizar ese pequeño clic. Parece poco pero me ayuda mucho a poder seguir escribiendo artículos de buena calidad y a pagar mis cosillas…¡¡¡Muchas Gracias!!!

Buenos días Joaquin..
Estamos preparando una pagina con tienda online, y tras hablar con la asesoria nos indican que es obligatorio el codigo dni-cif.
Solo deseamos añadir este campo, para que se rellene obligatoriamente (vamos ha usar la ultima version de woocommerce).No se si tu tutorial es valido con la ultima version de woocommerce
Podría indicarme las lineas que debo usar en el archivo functions.php?
Un saludo y gracias de nuevo
Roger
Hola Roger,
efectivamente este tutorial es válido para la última versión de woocommerce. Las lineas de código son las que especifico en el post, sólo tienes que seguir paso a paso el manual y recuerda, siempre realiza una copia de seguridad. Para que estés seguro de copiar el código correctamente, te puedes descargar el archivo function.php que adjunto y solo usar la parte de código relacionada con esta opción.
También tienes que tener en cuenta que este campo no será obligatorio, este código no contempla esta opción.
Si tienes algún problema no dudes en volver a contactar a través de estos comentarios del artículo.
Un saludo,
Hola Roger,
gracias a tu pregunta, me plantee la opción de que el campo fuese obligatorio, así que he modificado un poco el código que esta en la post para que sea así.
Un saludo,
Saludos de nuevo.
He seguido todos los pasos , pero desgraciadamente noaparece el campo dni, puede ser por que la pagina todavia no esta abierta al publico.?
Lo antes posible te envio un pantallazo y el fichero functions php, sinceramente agradezco cualquier ayuda.
Gracias de nuevo
Roger
Hola Roger,
No tiene nada que ver que la página no la tengas todavía abierta al público. Seguramente sea una tontería, ya que yo la he usando en muchas web con distintos themes de wordpress y siempre ha funcionado. Ten en cuenta una cosa, el Nif o Dni no lo pide en la página de registro de datos inicial (dirección de facturación) sino en la siguiente (dirección de envío), justo debajo de las notas.
Pruébalo y me cuentas!!!
Si tienes más problemas no dudes en consultar y si vemos que no te funciona podemos ver otra solución.
Un saludo,
Sinceramente muchisimas gracias.
Disculpa de nuevo.
Donde debo pegar tu codigo?
La ultima seccion de mi funtions.php
get( ‘pagination-show-results’, ‘1’ ) ) : ?>
max_num_pages ); ?>
<?php }
Debe ir antes de <?php }?
Gracias de nuevo y disculpa las molestias causadas
Roger
No, debería ir después de todas las lineas de código de tu functions.php que tiene que estar ubicado dentro de la carpeta del theme que tengas instalado, el cual tendrá que estar dentro de wp-content–>themes.
Muchisimas gracias voy a ver si logro que funcione ahora!
gracias de nuevo
Roger
Joaquin , muchisimas gracias , ya aparece el campo informacion adicional NIF, ahora voy a probar su funcionamiento
Efectivamente como me indicaste solo hay que pegar el código debajo de la ultima linea , en mi caso
<?php }
De nuevo muy agradecido.
Roger
Me alegra que te haya sido útil.
Aquí me tienes para cualquier otra problema que te pueda surgir.
Un saludo,
Perfecto Joaquin llevo 2 semanas buscando y cambiando código igual que un loco y hoy que ya pensaba que no iba a poder solucionar, encuentro esta pagina y funciona genial, muchas gracias. Un saludo.
Gracias a ti por leer mi Blog. me alegra saber que te he ayudado a saber como se incluye el campo NIF en los datos de woocommerce
Hola, Joaquin
¿Y cómo hago para que el NIF se asocie al cliente? La información que aportas, muy valiosa, sirve para incorporar el NIF en cada pedido, pero ¿cómo puedo hacer para que en el área del cliente se pueda introducir el NIF?
Gracias
El post solo es para ponerlo en el documento. Para insertar esa información en los datos de la ficha del usuario se tendría que hacer por add filter. Pero eso es otra historia.
Siento no poder ayudar 🙁
Un saludo,
Joaquín López Crespo.
Asesor Tecnológico para el comercio y la hostelería.
Buenas Joaquin, he seguido todos los pasos que indicas y funcionan todos a la perfección menos a parte del plugin que genera las facturas.
Mirando la documentación del autor he visto que usa unos hooks distintos, no se si será por una actualización…
/**
*Incluir NIF en la factura
*/
add_action( ‘wpo_wcpdf_after_order_data’, ‘wpo_wcpdf_nif’, 10, 2 );
function wpo_wcpdf_nif ($template_type, $order) {
global $wpo_wcpdf;
if ($template_type == ‘invoice’) {
?>
NIF:
custom_field(‘nif’); ?>
<?php
}
}
He probado con ese código pero no muestra el nif, tienes algún consejo o dispones de la version antigua del plugin?
Hola Narciso,
Desconozco si el autor ha cambiado algo en la programación. A mi, en los proyectos donde lo tengo instalado me sigue funcionado perfectamente. Puede ser que la plantilla que estés usando o algún otro plugin no sea compatible con este. Prueba a desactivar los plugin menos comunes y si te funciona, ves activandolos uno a uno hasta dar con el que te ocasiona el problema.
Si esto no soluciona el problema, ponte nuevamente en contacto conmigo y buscaremos una solución.
Un saludo,
Joaquín.
Buenas Joaquin,
al final no he resuelto haciendo una plantilla e incluyendo ahí el código que había mencionado antes. Para la parte de mostrar el NIF he optado por usar el plugin de Poor guys swiss army, porque no me fiaba de si se estaba guardando correctamente una vez completado el checkout.
Gracias por la ayuda!
Perfecto, Le echare un vistazo al plugin que comentas.
Gracias por la aportación!
Un saludo,
Joaquin
Hola buenas! Muy útil, me funcionó a la perfección. Lo único que lamento es que no fuerza a introducir ocho números y una letra, sino que cualquier avispado o vaguete puede quedarse tan pancho poniendo «asdffghjk». ¿Alguna solución para eso?
Gracias!.
Por cierto, es mucho más seguro añadir el código al functions.php del tema hijo, más reversible que liarla en el tema padre.
Saludos!
Hola Marina,
Seguro que existe solución para eso, en programación «todo es posible» pero yo de momento no estoy capacitado para realizar lo que me pides.
Los siento 🙁
Un saludo,
Joaquín
A favoritos Joaquin! Muchísimas gracias por este tutorial, semanas intentando lograrlo… Me suscribo.
Saludos!
Me encanta que te haya servido.
Un saludo,
Joaquin
Hola a todos he montado una tienda online y he visto la forma de implementar el código del dni que creo que es una solucion a medias porque cada vez que actualicemos el wordpress hay que volver a aplicarlo y entonces se me encendió la bombilla porque no usar un campo ya creado de woocommerce? y cogí el campo dirección pero el de abajo, ,usando el plugin de personalizar campos de woocomerce, le puse de titulo dni, y donde debería ir la segunda parte de la dirección lo vacié y le puse Valido para la factura, con eso que conseguimos que salga en la factura de woocommerce y en todos los sitios sin códigos ni nada.
Gracias por tu aporte, la verdad es que nos puede ayudar mucho.
Para que no te suceda lo de la actualización y pierdas los código que has implementado en el functions te recomiendo el plugins Code Snippets.
Muy útil la información.
¿ si quisiéramos incluir también el DNI/NIF en la página de confirmación del pedido?
Gracias
Lo siento, desconozco como hacerlo:(
Se puede mediante Hooks. Solamente hay que cambiar el siguiente parametro: «woocommerce_after_order_notes» en la función al insertar el campo del DNI
Hola Joaquin, muchas gracias por compartir esta información, tan solo una duda, tenemos una tienda textil y al realizar el pedido nos marca el campo nif-cif como obligatorio, se podría cambiar para que fuera opcional?, muchas gracias de antemano.
Hola, el código ya está preparado para que no sea obligatorio. Si te fijas en el punto 4 del tutorial explico como cambiarlo para que sea obligatorio.
Un saludo.