Order form of the Herves-Vida online shop

In How do you configure VAT for the Canary Islands, Ceuta and Melilla in WooCommerce 2.0? we already promised you that we would explain how to add a NIF/CIF field to WooCommerce easily and simply, and although at first sight it may look as though it is neither easy nor simple, the truth is that it is, as long as we carry out all the steps we state for you below. Although around the Internet there are several partial solutions that are more or less effective, we have not found a complete one, so APG offers you the definitive solution for adding the NIF/CIF field to WooCommerce. As almost always when we get stuck into this kind of job, we have to modify the functions.php file of our WordPress child theme, and this time was not going to be any different. So we are going to explain one by one all the things that have to be added to the functions.php file. In the first place we are going to physically create the fields we need, we are going to lay them out and arrange them correctly for their entry, both in the shipping form and in the billing form, and we will also add the Email Address and Phone fields to the form with the shipping details:

Copy to clipboard

Note that if we want it to come out correctly translated into each language we support in our shop, we recommend that you put the Spanish texts that appear in the label and placeholder options into English and translate the texts for each language. For that we can use a plugin such as CodeStyling Localization. The problem with this is that every time WooCommerce is updated we will lose all the modifications we have made to the translation files, which is why we have preferred to leave it in Spanish. Another thing that has to be taken into account is the class option, which can take 3 possible values:

  • form-row-wide: will make the field take up the whole of the width available in the form.
  • form-row-first: will make the field take up the first half of the width available in the form.
  • form-row-last: will make the field take up the second half of the width available in the form.

The class option can also adopt the value update_totals_on_change, which we use to force the calculation of the shipping total, just as we explain in How do you force the order total to update in WooCommerce?. So we will have to play with these values so that our new field is embedded appropriately in our form. Also, as you can see, in our particular case we have modified the Company Name field and the Town / City field so that they adopt the form-row-first class and the State / County field so that it adopts the form-row-last class. You may have to customise this depending on the needs of your forms. Now we carry on by adding the new field to the forms with the billing and shipping details; we must also alter the default address format and the one specific to our language so that the new NIF/CIF field is shown throughout WooCommerce:

Copy to clipboard

If you use more languages, you will only have to go on adding them in the last function, altering its specific format so that it includes the field we have just created in the previous function. We now have almost everything ready. Now we are going to alter the form with the shipping details so that the newly added Email Address and Phone fields are shown as they should be. We are also going to fix a problem we have detected in the Postcode / Zip field, both in the form with the shipping details and in the form with the billing details. For that we are going to include these functions:

Copy to clipboard

In our case we have made only the Phone field required, although you can modify the required option by stating true or false as you need it. The forms and addresses that appear in Users and in WooCommerce -> Order Details, both in the administration panel of our WordPress, also have to be modified. We are going to achieve it by adding these three new functions:

Copy to clipboard

Thanks to them we will add the NIF/CIF fields, as well as the telephone and email address in the shipping address. Lastly, the new NIF/CIF field has to be added to the addresses that appear in My Account -> Edit My Address.

Copy to clipboard

So that you do not get into a muddle, we are going to give you the whole code together, which is the one you have to add to your functions.php file:

Copy to clipboard

With this, everything is now finished, configured and working perfectly normally. If you want to see all this code in action, you can do so in the Herves-Vida online shop. We hope that, as always, you find this solution useful and that, in the event that you come across any kind of problem or error, you let us know, as well as your comments about this tutorial.

Update: We have slightly modified the code to repair a couple of errors we have detected and to add the new fields to the addresses in Users and Edit My Address. We have also detected that some PHP errors and warnings were being caused in the online shop, so we have modified the code to prevent any kind of error or warning from appearing. We fixed a problem with the placeholder attribute of the Postcode / Zip field, we simplified the code even further and we added the new fields to the addresses in Order details. We also updated the screenshot. We force the order to update when the state or province and/or the postcode is changed, in order to provide a solution to a WooCommerce error detected by Raquel.

Related posts

Comments

Suscríbete
Notificar de
50 Comments
Más antiguos
Más recientes Más votados
josecostaros
1 de diciembre de 2013 12:31

Hola!

He seguido todos los pasos y el formulario muestra el campo para el CIF/NIF.

¿Donde veo ese dato como administrador?…

Entro como cliente y veo mis datos correctamente.

Un saludo,

Art Project Group
1 de diciembre de 2013 12:53
Responder a  josecostaros

En el Panel de Administrador, puedes ver los datos en los detalles del pedido y en el propio pedido, puedes acceder a ellos en WooCommerce -> Pedidos.

Lo que si hemos visto es que no aparece en los datos de Usuario, por lo que vamos a investigar un poco y vamos a añadir la nueva función.

En un rato publicaremos la función necesaria para añadir el campo NIF/CIF a a esta ventana.

Muchas gracias por el aviso ;-)

josecostaros
1 de diciembre de 2013 13:19
Responder a  Art Project Group

Ok, ¡perfecto! y gracias a vosotros por vuestros aportes.

Art Project Group
1 de diciembre de 2013 15:20
Responder a  josecostaros

Ya tienes arreglados un par de errores que hemos detectado y añadidos los nuevos campos a las direcciones de facturación y envío en Usuarios.

Ahora ya si podemos decir que es la solución DEFINITIVA ;-).

josecostaros
1 de diciembre de 2013 17:10
Responder a  Art Project Group

He sustituido el código por el nuevo en functions.php y funciona perfecto. ¡BUEN TRABAJO!… a compartir :D. Un abrazo.

Art Project Group
2 de diciembre de 2013 9:28

Hemos vuelto a editar la “fórmula secreta” ya que hemos encontrado otro sitio donde faltaba el nuevo campo NIF/CIF, concretamente en Mi cuenta -> Editar mi dirección.

Esperamos que sea la última modificación y si no iremos actualizando la entrada hasta dejarla perfecta.

Esperamos que os resulte útil esta entrada.

josecostaros
8 de diciembre de 2013 17:51
Responder a  Art Project Group

Actualizado y perfecto. Gracias de nuevo!.

Sergey
8 de diciembre de 2013 9:32

Una pregunta, como puedo poner como campo obligatorio el NIF, y quitar de obligatorio el nombre y apellidos?

he añadido esto:

$campos[‘shipping_nif’] = array(
‘label’ => __(‘nif’, ‘woocommerce’),
‘required’ => true,
‘class’ => array(‘form-row-last’),
‘clear’ => true,
);

Pero no me hace caso

Por cierto gran trabajo! y gran blog con grandes consejos sobre Woo commerce y WP

Art Project Group
8 de diciembre de 2013 10:26
Responder a  Sergey

En principio así es, tienes que cambiar en todos los campos nif, ojo todos, y no sólo el que estás editando. Por otro lado debes llamar a los campos nombre y apellidos y cambiarles el atributo required a false.

Y funcionar funciona, ya que lo acabamos de probar en una tienda de prueba sin problema alguno.

Por cierto, muchas gracias ;-)

Sergey
8 de diciembre de 2013 10:50

Perdon me he equivocado, lo que quiero que sea obligatorio en la direccion de facturacion no en la de envio.

En la de envio si unciona, pero lo ideal seria en la de facturacion

Art Project Group
8 de diciembre de 2013 11:20
Responder a  Sergey

Hay que hacer un pequeño hack al código. Cambia la función formulario_de_direccion por esta otra:

//Arreglamos el formulario de facturación
function formulario_de_direccion($campos) {
$requerido = true;
if (isset($_GET['address']) && $_GET['address'] == 'shipping') $requerido = false;

$campos['nif'] = array(
    'label'=> __('<abbr lang="es" title="Código de Identificación Fiscal">CIF</abbr>/<abbr lang="es" title="Número de Identificación Fiscal">NIF</abbr>', 'woocommerce'),
    'placeholder' => _x('Introduzca el CIF/NIF', 'placeholder', 'woocommerce'),
    'required' => $requerido,
    'class' => array('form-row-last'),
    'clear' => true,
);

$campos['company']['class'][0] = 'form-row-first';
$campos['state']['class'][0] = 'form-row-wide';

return $campos;

}
add_filter('woocommerce_default_address_fields' , 'formulario_de_direccion');

Se hará magia ;-)

P.D: Ojo que el código no se muestra correctamente ya que WordPress interpreta la etiqueta abbr y la muestra como HTML.

Sergey
8 de diciembre de 2013 11:44

Oleee, perfecto,

Pero ahora hay otro problema, en Ciudad no pone por ejemplo “barcelona, madrid, etc..) sale una B

ejemplo:

rrrrr nbvbvb
,n,mn,mn,m
.,nm,n,mn,m67
nvbnvnbv
B
09876

Ideas para añadir:

Un añadido , seria que chequease que se ha introducido el nif o cif correcto

Art Project Group
8 de diciembre de 2013 12:07
Responder a  Sergey

En principio no se ha alterado nada en el campo Población/Ciudad, por lo que si te muestra sólo una B es por que es lo que tienes introducido en tu base de datos.

Por otro lado lo de añadir una validación en el campo NIF/CIF es fácil, sólo tienes que añadirle al campo en cuestión esto:
'validate' => array('nif'),

Y añadir una llamada a un nuevo script de JavaScript en functions.php, del estilo a esto:

function nombre_del_tema_scripts() {
wp_enqueue_script( 'nombre-del-script', get_template_directory_uri() . '/js/nombre-del-script.js', array(), '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'nombre_del_tema_scripts' );

E introducir en la carpeta js el script nombre-del-script.js que valide la clase .validate-nif al estilo del javascript original de WooCommerce que se encarga de validar la clase .validate-email, escrito en JQuery:

/* Inline validation */

.on( 'blur change', '.input-text, select', function() {
    var $this = $(this);
    var $parent = $this.closest('.form-row');
    var validated = true;

    if ( $parent.is( '.validate-required' ) ) {
        if ( $this.val() == '' ) {
            $parent.removeClass( 'woocommerce-validated' ).addClass( 'woocommerce-invalid woocommerce-invalid-required-field' );
            validated = false;
        }
    }

    if ( $parent.is( '.validate-email' ) ) {
        if ( $this.val() ) {

            /* http://stackoverflow.com/questions/2855865/jquery-validate-e-mail-address-regex */
            var pattern = new RegExp(/^((([a-z]|d|[!#$%&'*+-/=?^_`{|}~]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])+(.([a-z]|d|[!#$%&'*+-/=?^_`{|}~]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])+)*)|((x22)((((x20|x09)*(x0dx0a))?(x20|x09)+)?(([x01-x08x0bx0cx0e-x1fx7f]|x21|[x23-x5b]|[x5d-x7e]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(\([x01-x09x0bx0cx0d-x7f]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))))*(((x20|x09)*(x0dx0a))?(x20|x09)+)?(x22)))@((([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))).)+(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))).?$/i);

            if ( ! pattern.test( $this.val()  ) ) {
                $parent.removeClass( 'woocommerce-validated' ).addClass( 'woocommerce-invalid woocommerce-invalid-email' );
                validated = false;
            }
        }
    }

    if ( validated ) {
        $parent.removeClass( 'woocommerce-invalid woocommerce-invalid-required-field' ).addClass( 'woocommerce-validated' );
    }
} )

Pero eso, ya te lo dejamos como deberes ;-)

maxehhh
11 de diciembre de 2013 21:20

Jose, excelente tutorial, estoy tratando de mostrar un capo especifico como el NIF en el billing_address pero no logro que lo muestre (si se ve cuando edito la dirección), me podrías ayudar? Muchas gracias.

add_filter(‘woocommerce_order_formatted_billing_address’,’cuit_usuario’, 10, 1);
function cuit_usuario($fields, $order){
$fields[‘billing_cuit’] = $order->order_custom_fields[‘_billing_cuit’][0];

return $fields;
}

Art Project Group
11 de diciembre de 2013 21:34
Responder a  maxehhh

La verdad es que te faltan muchas cosas. Lee bien la entrada ya que tienes que repetir buena parte de ella para crear ese nuevo campo.

bernardo
7 de enero de 2014 20:12

Hola a todos una pregunta como añadir un campo para adjuntar un archivo en el proceso de compra en woocommerce, si alguien me puede hechar una mano se lo agradezco feliz año a todos

Art Project Group
7 de enero de 2014 21:05
Responder a  bernardo

Hola Bernardo. No es por aguarte la fiesta, pero WooCommerce no soporta campos input tipo file, por lo que mucho nos tememos que no es posible sin modificar el código fuente del plugin.

Un saludo.

pruebafjavierpe
13 de enero de 2014 18:35

El código esta muy bien pero a mi me da un problema. No me aparece el placeholder del Código Postal. La entrada de este queda como una línea más de la dirección y no como una entrada aparte que es lo que corresponde.

Art Project Group
14 de enero de 2014 12:33
Responder a  pruebafjavierpe

Hemos reescrito buena parte del código para arreglar ese problema y otro más que hemos detectado en el panel de administración de WordPress.

Muchas gracias por el aviso.

Esperamos que ahora te guste aún más ;-).

pruebafjavierpe
16 de enero de 2014 10:33

Ahora sí que funciona. Ofrecéis una gran ayuda, muchísimas gracias.

Raquel
22 de enero de 2014 8:38

Hola:
Me gustaría probar este código para mi tienda, pero necesitaría que el campo DNI-CIF también apareciera en los emails de notificación que llegan tanto al cliente como al administrador de la tienda. ¿qué código haría falta?

Muchas gracias!

Art Project Group
22 de enero de 2014 9:21
Responder a  Raquel

No hace falta nada.

En los correos electrónicos aparecerá el DNI/CIF al igual que en el resto de WooCommerce.

¡Pruébalo!

raquel
23 de enero de 2014 19:53

Hola:
Lo he probado y funciona perfectísimamente!!!!! Muchísimas gracias!!!!!

Ernesto Blanco C. (@bc_ernesto)
29 de enero de 2014 22:29

Excelente, me ha funcionado de maravilla. Muchas gracias.

Jordi
16 de febrero de 2014 18:42

Hola!
Funcionó perfecto hasta WooCommerce 2.1…
Con el código se queda colgado en el último paso, después de escojer método de pago, “confirmar pedido”.
Si quito el código funciona.
Alguna solución?
Gracias por el trabajo!

Art Project Group
16 de febrero de 2014 20:43
Responder a  Jordi

Efectivamente hay un par de líneas que no le gustan a WooCommerce 2.1. Échale un vistazo a la nueva entrada ¿Cómo añadir un campo NIF o CIF a WooCommerce 2.1?.

Gracias por el aviso.

Jordi
16 de febrero de 2014 20:59
Responder a  Art Project Group

Genial!
Muchas gracias!

Paco
19 de febrero de 2014 0:58

Al poner el código en el fichero functions.php del tema-child me aparece:
PHP Parse error: syntax error, unexpected T_VARIABLE in xxxxxx
Parece que se refiere a la línea:    $campos[‘nif’] = array(
¿Que puede ser?

Art Project Group
19 de febrero de 2014 8:09
Responder a  Paco

Sin conocer el error exacto y sin conocer el contenido exacto del archivo que lo produce no podemos aseverar nada.

En cuanto a que el fallo lo provoque una de las dos líneas que indicas, aunque es posible, la verdad es que es poco probable, pero sin conocer el contenido exacto del error y del archivo que lo produce, poco más podemos decir.

Por otro lado asegúrate de la versión de WooCommerce que estás utilizando. Recuerda que este código ya no funciona en WooCommerce 2.1.

David
26 de febrero de 2014 12:15

Muchas felicidades!!
He leido en otros foros algunos códigos para añadir a funtions.php y siempre le faltaba algo o no quedaba perfecto. Este es sin duda el mejor que he leído y el que he incorporado a mi web.
Me habeis ayudado mucho!!!
Muchas gracias.

Alvaro
6 de marzo de 2014 19:48

Hola!!
Lo primero de todo enhorabuena por este magnífico tutorial, funciona a la perfección. La cuestión es la siguiente:

¿Sería posible incorporar el campo NIF en el WooCommerce PDF Invoices & Packing Slips? Soy bastante torpe programando, pero me imagino que no debería ser complicado añadir el campo en los PDF de las facturas que genera ese plugin a través de los datos de WooCommerce.

Hasta ahora no he sido capaz de conseguirlo. El código que he usado en la plantilla del plugin invoices.php es el siguiente:

export->order->id,’ nif’,true);
if (isset($nif)) {
echo $nif;
}
?>

La verdad es que tengo poca idea de programar, así que cualquier ayuda es bienvenida.

Muchas gracias!!

Art Project Group
6 de marzo de 2014 20:11
Responder a  Alvaro

Si es posible, pero necesitaríamos tener el código fuente del plugin, y, dado que ya no damos soporte gratuito, que te dieras un paseo por Soporte técnico ;-).

Muchas gracias por el comentario.

Paco
10 de marzo de 2014 17:20

Efectivamente estoy utilizando la versión 2.1+ de WooCommerce y por ese motivo es posible que no funcione. He encontrado un plugin llamado “WooCommerce Poor Guys Swiss Knife” que parece que permite personalizar esos campos adicionales.

Muchas gracias por la ayuda.

Art Project Group
10 de marzo de 2014 18:17
Responder a  Paco

Tiene buena pinta, lo probaremos.

De todas formas para WooCommerce 2.1 tienes esta otra entrada: ¿Cómo añadir un campo NIF o CIF a WooCommerce 2.1?.

David
21 de abril de 2014 15:42

Hola, hace 1 mes y pico copié el código vuestro en el archivo functions.php para añadir el NIF. Todo funciona perfectamente salvo un detalle. Llevo una semana intentando solucionar un problema que no sabía de donde surgía y que por fin descubro: es por el código vuestro que tengo añadido en el functions.php. El problema que genera es el siguiente:
Si un cliente hace un pedido a través de la web, el woocommerce manda el correspondiente email a shop manager y al cliente. Hasta aqui todo normal. El problema surge si el shop manager entra en el panel de administración WooCommerce / Pedidos y selecciona ese pedido (que si se realiza seleccionando el pago por Transferencia Bancaria estará en modo de espera). Al entrar en ese pedido y se abre la ventana de “estado de pedido” y selecciono “completado” el pedido parece que no se acaba porque no manda el email de pedido completado (que en mi caso lleva como adjunto un pdf con la factura).
Lo curioso del asunto es que si en lugar de entrar en el pedido en concreto me quedo en el listado de pedido y le doy a la “V” de completar que hay en la columna de “Acciones”, entonces sí que manda el email de completado.
Espero haberme explicado bien. Si necesitais alguna otra explicación o capturas de pantalla no dudeis en decidmelo.

Art Project Group
21 de abril de 2014 15:58
Responder a  David

Hola David, gracias por el aviso. Te agradaceríamos que nos mandaras algunas capturas de pantalla o vídeo explicando el problema concretamente a nuestro correo electrónico, sobre todo para ver si se replica el problema en un WooCommerce 2.1.

Un saludo.

David
21 de abril de 2014 20:01
Responder a  Art Project Group

Hola, ya os he mandado por email las capturas y una explicación un poco más extensa.

Art Project Group
22 de abril de 2014 13:28
Responder a  David

Hola David. Tal y como te acabamos de comentar por correo electrónico, en principio todo nos funciona correctamente, al menos con la última versión de WooCommerce PDF Invoices & Packing Slips bajo WooCommerce 2.17 y WordPress 3.9. Lo que si hemos detectado es un error en el propio plugin que ya hemos reportado al creador del plugin, aunque él dice que no se trata de ningún error, pero eso es ya otra historia ;-).

Un saludo.

orli19mindali
9 de mayo de 2014 4:58

buenas tardes me da error en esta linea de codigo disculpa

function anade_campo_nif_direccion_facturacion($campos, $pedido){
$campos[‘nif’] = $pedido->order_custom_fields[‘_billing_nif’][0];

return $campos;

}

Art Project Group
9 de mayo de 2014 7:06
Responder a  orli19mindali

Comprueba que estás usando WooCommecer 2.0.x.

orli19mindali
9 de mayo de 2014 5:03

quisiera ver si se puede acomodar ya q no encuentor otra forma de colocar un nuevos campo y al quitarle ese codigo no me sale con {nif}

como que no guarda la informacion que se coloca alli es q necesito colocarle al formulario 3 campos mas y quisiera ver si me podrian ayudar

Art Project Group
9 de mayo de 2014 7:08
Responder a  orli19mindali

Claro, para eso tienes nuestra Soporte técnico.

In this post

Products and services

Latest posts

Latest comments

Subscribe!

Lista de correos de APG

DATA PROTECTION: In accordance with data protection regulations, we provide you with the following processing information: (+)

  • Responsible: Art Project Group.
  • Treatment purposes: to respond to queries or any type of request made by the user through any of the forms of contact that are made available on the website. Sending communications about products or services (with your consent).
  • Your rights: access, rectification, portability, deletion, limitation and opposition. More information about the treatment in the Privacy Policy.

What we post on !

Se ha publicado #WordPress 7.1.4: actualización de seguridad que corrige vulnerabilidades detectadas en el núcleo.

Al tratarse de una actualización de seguridad, se recomienda actualizar inmediatamente.

October 28, 2026