En ocasiones necesitamos añadir a las facturas datos que, en principio, no inserta el plugin de facturación que utilizamos. El caso más típico, al menos en España, es el de añadir el NIF o el CIF del cliente a la factura, pero no es el único.
Así que vamos a ver cómo podemos añadir diferentes datos, de diferentes formas, en diferentes lugares de las facturas emitidas con WooCommerce PDF Invoices & Packing Slips, que para eso es el plugin más recomendable y más usado para emitir facturas con WooCommerce.
Tabla de contenidos
Añadir datos en las facturas usando bloques personalizados
Si hablamos de personalizar las facturas emitidas con WooCommerce PDF Invoices & Packing Slips no hay más remedio que hablar de su add-on estrella, WooCommerce PDF Invoices & Packing Slips Premium Templates, que añade al plugin un personalizador para las facturas (en la segunda parte de la entrada vemos cómo hacerlo sin ayuda del add-on).
Aparte de permitirnos añadir columnas a las líneas de producto, y líneas extra a los totales de la factura (incluyendo totales antes y después de impuestos, lo que nos soluciona la papeleta de desglosar el IVA), WooCommerce PDF Invoices & Packing Slips Premium Templates permite también añadir bloques de información en diversos lugares de la factura.
Esto lo podemos hacer en la (a menudo ignorada) sección de Bloques personalizados, que encontramos en la parte inferior del personalizador de documentos.
Añadir en la factura datos del pedido
Y además el procedimiento no puede ser más sencillo:
- Añadimos un nuevo bloque
- Seleccionamos qué tipo de dato queremos que este bloque muestre en la factura:
- Texto
- Campo personalizado
- Datos de usuario
- Seleccionamos en qué lugar de la factura ha de mostrarse, de entre 13 ubicaciones posibles repartidas por todo el documento
- Personalizamos el título (cabecera) de la sección
El bloque con contenido de texto nos va a permitir mostrar texto arbitrario pero insertando datos mediante una serie de placeholders, que se sustituirán por el dato de forma dinámica. Por ejemplo, si queremos mostrar el estado en que está el pedido al momento de emitir la factura, podríamos insertar un bloque de texto con el contenido:
Su pedido se encuentra en estado de {{order_status}}
Y podríamos situar el bloque, por ejemplo, al final del bloque de datos del pedido (el que muestra el número de pedido, fecha, número de factura, etcétera).
De esta forma podemos añadir todo tipo de información a la factura, tanto referente al pedido (número total de productos, fecha de creación o de última modificación, peso del pedido, cupones usados, fecha del pago, cualquier campo de las direcciones de envío o facturación, moneda en que se ha pagado, notas del pedido…), como información referente al cliente o incluso campos personalizados.
Hasta un total de unos 60 datos posibles. Es posible incluso incluir datos sobre el entorno, como la versión de WooCommerce en uso, o la información proporcionada por WooCommerce Local Pickup Plus.
Añadir en la factura datos del cliente o campos personalizados
Además de todos esos datos, se pueden incluir datos extraídos del perfil del usuario (user meta) y campos personalizados (custom fields) asociados al pedido, lo que hace que las posibilidades aumenten hasta el infinito.
Por ejemplo, mi plugin para pedir el NIF en WooCommerce guarda el dato (además de en el perfil del usuario) en un campo personalizado asociado al pedido llamado NIF. Por supuesto, el plugin ya incluye una opción para agregar el dato a las facturas, pero también podríamos hacerlo con este sistema con un simple bloque de campo personalizado:
También podríamos hacerlo usando el campo que también guarda asociado al usuario (un user meta) para que esté disponible en su perfil, pueda cambiarlo desde la página Mi cuenta y aparezca pre-rellenado en futuros pedidos (en este caso el campo se llama nif, en minúsculas):
Pues exactamente de la misma forma podríamos mostrar cualquier dato que esté guardado en el perfil del usuario, ya sea un campo estándar de WordPress, de WooCommerce o uno generado por cualquier otro plugin o código.
¿Estás construyendo tu tienda online o eres implementador WordPress?
¿Necesitas plugins de calidad y con soporte para implementar funcionalidades concretas?
Consigue todos los plugins a la venta en la sección de plugins de esta web y todos los que siga añadiendo. Acceso a los 96 plugins (y subiendo) con soporte directo del desarrollador, actualizaciones y uso ilimitado: úsalos en tantas webs como lo necesites.
Añadir datos personalizados a las facturas usando los hooks
Como quizá hayas observado, a pesar de que el método está muy bien traído y es muy fácil de usar, tiene ciertas limitaciones, como por fuerza ha de tener todo lo que venga “prefabricado”. Por supuesto, las cosas a medida siempre funcionan mejor porque no hay que adaptarse a lo que se nos ofrece sino que, al contrario, lo adaptamos a lo que necesitamos. Y (aviso) aquí ya estoy hablando de programar directamente.
En este caso las plantillas de WooCommerce PDF Invoices & Packing Slips incluyen algunos hooks (partes del código en las que podemos “enganchar” nuestras propias funciones para mostrar lo que queramos y como queramos. Incluso la plantilla gratuita; es decir, no necesitamos de ningún add-on.
Por ejemplo, podemos añadir el número de cuenta bancaria tras los datos de la factura (número de factura, fecha de factura, método de pago) para que el cliente pueda consultarlo a la hora de hacer la transferencia. Para ello podríamos usar el hook wpo_wcpdf_after_order_data más o menos así:
add_action ('wpo_wcpdf_after_order_data', function () { echo ''; }); IBAN: ESXX XXXX XXXX XXXX XXXX XXXX
De la misma forma podemos insertar datos referentes al cliente o al pedido usando que recuperaríamos usando las funciones de WordPress get_post_meta (para campos personalizados del pedido) y get_user_meta (para datos del cliente).
En cuanto a qué lugares de la factura podemos utilizar para mostrar datos, te invito a echar un ojo al código fuente del template (wp-content/plugins/woocommerce-pdf-invoices-packing-slips/templates/Simple/invoice.php) para ver cuáles son (todos los do_action te permitirán mostrar datos) y en qué lugares están.
Añadir datos del producto en las líneas del pedido
Hasta aquí he hablado de algo que WooCommerce PDF Invoices & Packing Slips permite sin complicaciones: añadir datos en lugares concretos de la factura (al principio del documento, antes o después de la dirección de facturación o de envío, de los datos del pedido, etcétera).
Sin embargo algo muy diferente es añadir datos personalizados referentes a los productos en cada una de las líneas de la factura (es decir, de las líneas del pedido). Al fin y al cabo, cada factura corresponde a un sólo pedido y a un sólo usuario, pero los productos son diferentes en cada una de las líneas.
Para este caso WooCommerce PDF Invoices & Packing Slips pone a nuestra disposición dos hooks: wpo_wcpdf_before_item_meta y wpo_wcpdf_after_item_meta, que nos permitirán añadir datos personalizados del producto antes o después del nombre, peso y SKU del producto.
Para ello el propio hook nos pasa como referencia, además de los datos del pedido como en el resto de hooks, el array de datos del producto, de forma que podamos recuperar su ID y, a partir de ahí, cualquier dato asociado a este producto mediante las funciones que WooCommerce implementa para ello.
Bonus: Quitar datos de la factura
Quizá lo que queramos, en lugar de añadir, es quitar ciertos datos que aparecen por defecto en la factura que emite WooCommerce PDF Invoices & Packing Slips.
De hecho, en todas las instalaciones que hago de este plugin quito siempre dos datos que no pintan nada en la factura y pueden inducir a errores o a generar consultas innecesarias por parte de los clientes: el número de pedido y la fecha del mismo.
Con la versión gratuita del plugin no hay más remedio que editar el código de la plantilla invoice.php para eliminar manualmente el código que imprime estos datos y las celdas de la tabla que están destinadas a contenerlos.
Sin embargo, si se utiliza el add-on WooCommerce PDF Invoices & Packing Slips Premium Templates la cosa se vuelve más sencilla, ya que este add-on permite introducir estilos que se aplicarán al código antes de que se genere la factura (en Personalizador > Estilos personalizados). Esto nos da un control milimétrico sobre el aspecto del documento, incluyendo colores, espacios, anchos, etcétera. También, y aquí viene lo interesante, sobre la visibilidad de los diversos componentes.
Personalizaciones de estilo aparte, lo interesante es que aquí podremos declarar visibilidad nula para los datos que no nos interesa que se muestren en la factura.
En la imagen de ejemplo, aparte de algunas modificaciones en los anchos que el documento aplica por defecto, puedes ver cómo se eliminan de la factura (display:none) el número de pedido (.order-number), la fecha del pedido (.order-date) y la celda completa que contiene la dirección de envío (td.shipping-address).
Buenas tardes , amigo ROS.
Excelente documentación .
Siguiendo tus consejos coloque un campo extra en el pedido , que en Venezuela llamamos RIF . (El NIF de ustedes ) .
Pero no logro pasarlo a la factura , que es el objetivo final . Estoy usando WooCommerce PDF Invoices , en su versión gratuita .
Veo el ejemplo que colocas :
add_action (‘wpo_wcpdf_after_order_data’, function () {
echo ‘IBAN:ESXX XXXX XXXX XXXX XXXX XXXX’;
});
Y me parece muy bien , pero yo necesito colocar el “RIF” , que coloque en el pedido .
¿Puedes ayudarme ?
Gracias , de antemano.
Mario R. Vásquez S.
Hola Mario
Para eso primero tendrás que saber cómo se está almacenando ese dato en la base de datos, recuperarlo (puesto que no es un texto fijo sino un dato dinámico asociado al pedido o al cliente) y mostrarlo en el hook correspondiente.
También puedes usar este plugin que lo hace todo él mismo y se integra con WooCommerce PDF Invoices & Packing Slips para mostrar el dato en la factura.
Un saludo
Hola!!
Me ha resultado de mucha ayuda, pero estoy intentando eliminar de la Factura otro campo que no pinta nada ahí: Las Notas del cliente. ¿Podrías echarme una mano? No soy capaz de ver el código de ese campo para añadirle lo de “display:none”
Gracias de antemano por tu ayuda!
Hola Jordi
Puedes verlo directamente en el archivo que genera la factura (invoice.php).
Un saludo
Hola Enrique, buenas tardes:
¿Sabes si es posible enviar únicamente el albarán cuando se realiza el pedido, en lugar de la factura?
Gracias, saludos.
Hola Eric
Sí, por supuesto, se puede establecer de forma independiente qué documento ha de adjuntarse a qué correo.
Un saludo
Hola Enrique:
Muchas gracias por el post, es muy fácil de entender.
Sin embargo, me surge la duda de si se puede mostrar los impuestos en la web y en las facturas desglosados del siguiente modo. Y que todo aparezca en: Página de carrito, Página de “comprar”, Página de “resumen de la compra”, email que recibe el cliente y Factura) :
– Base imponible desgloasada así:
—- Subtotal de la compra (sin IVA)
—- Precio del envío (sin iva)
– Total Base imponible (sin iva)
– Total del IVA
– Total Factura
Hola Enrique.
Gracias por tus aportes !
Estoy tratando de mostrar en la factura el campo CIF que he creado con tus indicaciones y el plugin “Checkout Manager for WooCommerce”.
Tras crear el campo y asociarse al ID billing_wooccm11, he insertado esta línea en la plantilla personalizada que he copiado, junto con el resto de archivos a la ruta “wp-content/themes/flatsome-child/woocommerce/pdf/yourtemplate”.
La línea de código con la que espero mostrar el dato en la factura es:
<?php add_action (‘wpo_wcpdf_after_billing_address’, function () {echo ‘VAT: ‘.$billing_wooccm11;}); ?>
… pero no muestra el valor del campo, solo el texto “VAT: ”
¿Puedes ayudarme? Gracias
Yo estoy queriendo poner la informacion de campos personalizados que he creado para productos con el plugin Advanced Custom Fields, que esos campos salgan en el email del pedido, sabe de algun plugin que lo haga, o algún código que pueda usar?
Hola, intento modificar una factura donde dice “Total sin Iva” para que aparezca “Base Imponible”, ¿dónde habría que realizar los cambios? Mil gracias
Hola Miguel
Echa un vistazo a esto, te será de ayuda.
Un saludo
Hola
disculpa que te consulte ,pero no he logrado dar con el codigo en el .php, que codigo necesito para borar el nombre y apellido del cliente ( el comprador)
Puedes decirme cómo añadir campo de neto y campo de IVA. Gracias Enrique
Hola Rafael
Se puede hacer con WooCommerce PDF Invoices & Packing Slips Premium Templates.
Un saludo
Buenos días. No se puede realizar eso sin tener que pagar el pluuging premium?
Gracias
Hola Enrique,
necesito preguntarte una cosina,
necesito desglosar el iva de los gastos de envío, como puedo hacerlo con código?
Muchas gracias,
saludos