Enrique J. Ros

Datos personalizados en las facturas con WooCommerce PDF Invoices & Packing Slips

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.

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).

Recuerda que puedes descargar gratuitamente WooCommerce PDF Invoices & Packing Slips Premium Templates, periódicamente actualizado, desde el área de suscriptores de la web si estás suscrito a los plugins (+info)

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:

  1. Añadimos un nuevo bloque
  2. Seleccionamos qué tipo de dato queremos que este bloque muestre en la factura:
    • Texto
    • Campo personalizado
    • Datos de usuario
  3. Seleccionamos en qué lugar de la factura ha de mostrarse, de entre 13 ubicaciones posibles repartidas por todo el documento
  4. 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.

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).

Salir de la versión móvil