WooCommerce, al ser un plugin global, inicialmente no contempla peculiaridades de cada país, como es el caso de la inclusión de un campo específico para el CIF/NIF/NIE español, pero se puede añadir fácilmente.
Índice de contenidos
Añadir campo CIF/NIF/NIE con código
Para que WooCommerce incluya un nuevo campo en el que introducir el CIF/NIF/NIE debes añadirlo, para lo que deberás incluir el siguiente código en el archivo functions.php del tema hijo activo o en tu propio plugin de funciones.
/* * AÑADIR CAMPO NIF/CIF EN EL FORMULARIO DE PAGO */ function woo_custom_field_checkout($checkout) { echo '<div id="additional_checkout_field">'; woocommerce_form_field( 'nif', array( // Identificador del campo 'type' => 'text', 'class' => array('my-field-class form-row-wide'), 'required' => true, // ¿El campo es obligatorio 'true' o 'false'? 'label' => __('NIF / CIF'), // Nombre del campo 'placeholder' => __('Ej: 12345678X'), // Texto de apoyo que se muestra dentro del campo ), $checkout->get_value( 'nif' )); // Identificador del campo echo '</div>'; } add_action( 'woocommerce_after_checkout_billing_form', 'woo_custom_field_checkout' ); /* * INCLUYE NIF/CIF EN LOS DETALLES DEL PEDIDO CON EL NUEVO CAMPO */ function woo_custom_field_checkout_update_order($order_id) { if ( ! empty( $_POST['nif'] ) ) { update_post_meta( $order_id, 'NIF', sanitize_text_field( $_POST['nif'] ) ); } } add_action( 'woocommerce_checkout_update_order_meta', 'woo_custom_field_checkout_update_order' ); /* * MUESTRA EL VALOR DEL CAMPO NIF/CIF LA PÁGINA DE MODIFICACIÓN DEL PEDIDO */ function woo_custom_field_checkout_edit_order($order){ echo '<p><strong>'.__('NIF').':</strong> ' . get_post_meta( $order->id, 'NIF', true ) . '</p>'; } add_action( 'woocommerce_admin_order_data_after_billing_address', 'woo_custom_field_checkout_edit_order', 10, 1 ); /* * INCLUYE EL CAMPO NIF/CIF EN EL CORREO ELECTRÓNICO DE AVISO A TU CLIENTE */ function woo_custom_field_checkout_email($keys) { $keys[] = 'NIF'; return $keys; } add_filter('woocommerce_email_order_meta_keys', 'woo_custom_field_checkout_email');
Como verás, el código incluye todo lo necesario:
- Que el campo NIF/CIF/NIE aparezca en la página de pago
- Hace que el campo sea obligatorio (lo puedes cambiar) y lo comprueba
- Muestra un texto de ejemplo (placeholder)
- Que el campo NIF/CIF/NIE se muestre y pueda cambiarse en la página de modificación de pedido
- Que el campo NIF/CIF/NIE se muestre en el correo electrónico de confirmación del pedido que WooCommerce envía al cliente
Añadir campo de CIF/NIF/NIE con plugin
Ahora bien, si prefieres usar un plugin te recomiendo WooCommerce Checkout Manager.
Una vez instalado y activo añade un menú propio llamado WooCheckout desde el que puedes decidir qué campos aparecerán en la página de pago, e incluso añadir nuevos, tanto al finalizar compra como si quieres que también aparezcan en el pedido, lo que tiene toda la lógica.
Solo tienes que ir a la pestaña Billing y Agregar un nuevo campo.
Es importante que conozcas las siguientes opciones de esta pantalla:
- Required: Si marcas la casilla lo haces obligagtorio
- Position: Puedes elegir si va a ocupar todo el ancho de la zona de datos de pago (wide) o si compartirá fila con otro campo, para lo que deberías decidir si va a la izquierda (left) o a la derecha (right)
- Clear: Si marcas la casilla el campo aparece vacío, en caso contrario se muestra el marcador de posición (placeholder)
- Etiqueta: El texto visible en la página de pago
- Marcador de posición (placeholder): Si no activaste la casilla Clear se mostrará un texto de ejemplo, que pongas aquí.
- Elija el tipo de: Tipo de campo
- Abreviatura: El identificador único del campo
- X: Este campo tan poco descriptivo es muy importante pues si marcas la casilla creas el campo pero no se verá en la página de pago; sirve fundamentalmente para la otra gran utilidad de este plugin, que es ocultar campos por defecto de WooCommerce.
Si quieres, también puede añadirse a las notas de envío, en la sección Shipping.
Y los campos a decidir son los mismos que para la página de pago.
Nada más. Hace poco me preguntaba un alumno de los cursos de WordPress si no se podía añadir un cálculo o comprobador automático de la letra del CIF, y puedes hacerlo con algo de PHP.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
¿alguna forma de validarlo para que no pongan cualqquier cosa que no sea un CIF o NIF?
Hay por ahí códigos PHP que puedes añadir pero es una barbaridad. Tienes el enlace en el artículo
No entiendo por qué te parece una barbaridad Fernando. El NIF es un dato importante que debe seguir un formato específico, y normalmente se pide para un fin concreto que requiere un NIF válido. Como por ejemplo usarlo para generar una factura, sin el NIF no es válido la factura tampoco.
Por tanto a mí no sólo me parece normal querer validarlo, sino que es algo que se debe hacer obligatoriamente para evitar que el usuario cometa errores al introducirlo al igual que se hace con otro tipo de datos. Además no cuesta nada hacerlo usando el filtro woocommerce_checkout_process
Puedes usar cualquier función de PHP destinada a ese fin junto con woocommerce_checkout_process, si buscas en Google seguro que encontrarás varios ejemplos de cómo validar campos personalizados en WooCommerce usando este hook.
Tienes un plugin gratuito aqui:
https://youtu.be/30h9lsigxcQ
Con este plugin ya lo hace solo. Lo instalas y ya esta. Y es compatible con el plugin de facturas PDF de Woo
Era justo lo que necesitaba!!! Muchas gracias Fernando
El único cambio que he hecho es cambiar el hook de ‘woocommerce_after_checkout_billing_form’ por ‘woocommerce_before_checkout_billing_form’ ya que quería que el CIF/DNI apareciese como primer campo para rellenar en el checkout.
Pues muy buena idea sí, me parece un orden muy adecuado en muchos casos 🙂
Muchas gracias Fernando por el gran artículo! y muchas gracias Laura, he hecho lo mismo que tú ya que creo que es un orden más lógico para profesionales pero quería preguntarte ¿Cómo puedo colocarlo debajo del Nombre de Empresa?
Gracias de antemano!
Hola. Muy bueno el post. Quisiera saber si con este plugin se puede agregar un campo de adjuntar archivos (.jpg, .gif, .bmp, .pdf,. psd…) como se hace con contact form 7 o ninja forms. Gracias!!
Se puede hacer también con el plugin sí
Gracias Fernando
Buenas,
Una explicación muy clara de como añadir el NIF. Se agradece.
No he encontrado en este post ni en otros sobre el mismo tema cómo editar este campo desde la parte de admin. Yo lo he hecho a mano desde el functions.php
Cuando entras en el detalle del pedido, puedes editar los campos de facturación y envío, pero no los personalizados. He activado el panel de campos personalizados pero no me aparece en el listado de campos.
¿Hay algún modo de editarlo?
Muchas gracias.
Es que no viene por defecto, pero puedes añadirlo o editarlo con el plugin que indico en el artículo
¿Y rescatar el ID que genera para luego incluirlo en la factura? Sabes como hacerlo, lo he intentado modificando el PHP que genera el pligun de facturación, en este caso el plugin que tengo instalado es WooCommerce PDF Invoices & Packing Slips que me funciona perfectamente, pero no rescata en este caso el ID creado con checkout. Gracias de antemano
Prueba con este plugin:
https://yithemes.com/themes/plugins/yith-woocommerce-checkout-manager/
Este plugin tiene un grave problema al igual que el propio de WooCommerce, y es que funciona perfecto en el checkout, pero por cualquier motivo que quieras editar la información contenida en ese campo, porque quizas te equivocaste, el usuario jamas podrá editar y guardar cambios en la página de su cuenta, dicha información.
Tengo Instalado Astra Theme a su última versión al igual que WordPress y WooCommerce, y el propio plugin de Yith Theme
Es buen apunte, porque es verdad que muchos plugins que añaden campos no dejan al usuario cambiarlos en su cuenta, se quedan grabados, y solo puedes cambiarlos como administrador en los pedidos o poco más. Avisaré a la gente de Yith para que lo contemplen al menos 😉
Muchas gracias Fernando por la fantástica ayuda!
¿Es posible que el campo del NIF sea obligatorio solo para determinados usuarios?
En mi tienda tengo clientes normales y profesionales y los profesionales siempre comprarán con factura y por consiguiente necesito el NIF.
Gracias de antemano!
Este plugin te permite configurar campos condicionales en la página de pago, sino sería imposible ya que ambos tienen NIF:
https://yithemes.com/themes/plugins/yith-woocommerce-checkout-manager/
Parece muy interesante. Les he escrito porque parece ser que el complemento aún no permite hacer obligatorio un campo para determinados usuarios, están pendiente de actualizarlo.
Muchas gracias y te informaré si se soluciona!
Eso es genial, y puedes chatear y soporte en español, y atienden muy bien cualquier petición de mejoras. Bien hecho @disqus_U6nvEJNw6e:disqus 🙂
Hola Fernando, muchas gracias por este gran articulo, he puesto el código en functions, y me funciona casi todo, te explico, en el código AÑADIR CAMPO NIF/CIF EN EL FORMULARIO DE PAGO le tengo puesto el valor true para que el nif sea obligatorio pero no lo es, he probado a introducir los datos sin el nif y puedo finalizar el pedido.
¿sabes a que se puede deber?
Gracias.
A mi me pasa lo mismo 🙁
Sigo con el mismo problema, me podéis confirmar si está bien escrito en el script, tengo puesto esto para que sea obligatorio el NIF
https://ibb.co/m1dY9f
Si quiero modificar el NIF por que el cliente lo ha escrito mal ¿en que tabla están los datos del NIF y los podría modificar?
Feliz Año
Lo puedes cambiar editando el mismo pedido
Gracias por tu ayuda, Fernando.
He añadido el campo CIF/NIF/NIE con código y ahora quiero incluirlo en la factura. Uso la herramienta de Booster «PDF Invoicing» ¿Puedes decirme cómo incluir el campo en la factura? Gracias.
No lo conozco, lo siento
Gracias por tu respuesta. ¿Cómo se puede generar una factura para que incluya el CIF que hemos configurado con el código? Puedo valorar otras opciones distintas a la herramienta de Booster «PDF Invoicing»
Hola!
Parece que hay una falta de verificación
// Verificación del campo al enviar el pedido (requerido)
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
// Compruebe si el campo está vacío, si no, añadir un error.
if ( ! $_POST['nif'] )
wc_add_notice( __( 'Por favor, introduzca un CIF/DNI/NIE' ), 'error' );
}
Gracias Albert!
Hola Fernando,
sería la repanocha que también se pudiera añadir/editar desde los datos en la cuenta del cliente. Por ejemplo, si el cliente quiere registrar todos sus datos incluido DNI desde su cuenta previa a realización del la compra.
Un saludo!
Muy buena explicación y plugin. Muchas gracias por la información. Saludos!
Hola Fernando:
El código entiendo que sería para que el cliente tuviera la opción ( o también le sea obligatorio) incluir el NIF/CIF en el checkout del pedido y que ese CIF se vea en las notificaciones del pedido. Pero ¿Qué habría que hacer para que ese CIF se refleje en la factura que se descarga con el plugin Woocommerce PDF invoices & Packing slips en su versión gratuita? ¿habría que meter otro código en el functions.php del child-theme para que se vea el NIF/CIF del cliente en la factura? Saludos