Documento para desarrolladores que quieran extender el plugin o integrar el módulo
VERI*FACTU con otro generador de PDF o cualquier desarrollo propio.
Si ya tienes tu propia zona de cliente, tus propios emails o tus propias plantillas de WooCommerce, los shortcodes te permiten añadir los datos de factura VERI*FACTU exactamente donde quieras, sin tocar el diseño que ya tienes.
No necesitas rehacerlo todo. Solo colocas el shortcode donde quieres que aparezca el dato y el plugin se encarga del resto.
Los shortcodes funcionan en cualquier entorno WordPress estándar: páginas, posts, widgets, constructores de páginas (Elementor, Divi, Bricks…), constructores de emails (Kadence, FluentCRM, AutomateWoo…) y también dentro de cualquier plugin de PDF que admita shortcodes de WordPress (YITH, WooCommerce PDF Invoices, Dokan, etc.). Si tu plugin de PDF puede renderizar un shortcode de WordPress, puede mostrar los datos de factura de Veri*Fac*WOO.
Esto significa que puedes mantener el plugin de PDF que ya usas y simplemente añadir el QR, el número de factura, el estado o la leyenda legal en la plantilla que ya tienes.
Convención: los shortcodes empiezan por
verifacwoo_; los filtros y actions de PHP porvfwoo_.
Cómo funcionan
La mayoría de shortcodes necesitan saber a qué pedido pertenece la factura. Para eso se usa el atributo order_id. Pero en la mayoría de casos no hace falta que lo pongas: el plugin detecta el pedido automáticamente según dónde estás.
| Dónde lo usas | Qué detecta automáticamente |
|---|---|
| Página de confirmación de pago (Thank You) | El pedido que acaba de pagar el cliente |
| Página Ver Pedido del área de cliente | El pedido que está consultando |
| Email de WooCommerce | El pedido del email |
| Admin — detalle de un pedido | El pedido abierto |
Solo necesitas poner order_id="123" cuando usas el shortcode en una página genérica — por ejemplo, en un post o una página estática donde el plugin no puede detectar el pedido del contexto.
Mostrar datos fiscales en cualquier página (shortcodes)
Para qué sirve. Pintar el número de factura, el QR de VERI*FACTU, la leyenda legal, el estado, el enlace de descarga, etc. en cualquier página, plantilla, email o documento.
Detalle técnico. Todos aceptan el atributo order_id. Registrados en includes/class-shortcodes.php.
| Shortcode | Devuelve |
|---|---|
verifacwoo_numero | Número completo de factura (serie + número). |
verifacwoo_serie | Serie de facturación. |
verifacwoo_tipo | Tipo de factura (F1, F2, R1–R5). |
verifacwoo_fecha | Fecha de expedición. |
verifacwoo_importe_total | Importe total de la factura. |
verifacwoo_estado | Estado de envío/validación AEAT. |
verifacwoo_qr | Imagen del QR VERI*FACTU. |
verifacwoo_firma | Firma/huella del registro. |
verifacwoo_leyenda | Leyenda legal VERI*FACTU. |
verifacwoo_cotejo_url | URL oficial de cotejo en la AEAT. |
verifacwoo_download | Enlace de descarga del PDF. |
verifacwoo_factura_original | Referencia a la factura original (en rectificativas). |
verifacwoo_factura_card | Tarjeta resumen de la factura. |
verifacwoo_config | Datos de configuración para uso en frontend. |
Ejemplo 1: Número de factura.
Ejemplo 2: Código QR.
En contexto de un pedido (p. ej. dentro de una plantilla de email/PDF de pedido) puede omitirse
order_idsi el plugin puede resolver el pedido del contexto; cuando no hay contexto, pásalo siempre explícito.
Tarjeta de factura completa
Es el shortcode más completo y el más fácil de usar. Genera en un solo bloque todo lo que necesita ver tu cliente: el código QR oficial de VERI*FACTU, el número de factura y el enlace directo para verificarla en la sede electrónica de la AEAT.
Ideal para colocar en la página de confirmación de pago o en la zona de cliente.
[verifacwoo_factura_card]
Si quieres ajustar el tamaño del QR:
[verifacwoo_factura_card size="200"]
Datos básicos de la factura
Muestra el número completo de la factura: la serie más el número. Por ejemplo: FAC-2026-87.
Útil para confirmaciones, emails o cualquier lugar donde quieras que el cliente vea el número de su factura.
[verifacwoo_numero]
Fecha de expedición de la factura, en el formato configurado en WordPress.
[verifacwoo_fecha]
Importe total de la factura registrado en la AEAT. Por defecto muestra el símbolo €, pero puedes cambiarlo:
[verifacwoo_importe_total]
[verifacwoo_importe_total moneda="€"]
Tipo de factura emitida. Puedes elegir cómo se muestra:
texto→ muestra “Factura” o “Rectificativa” (texto legible para el cliente)codigo→ muestra el código técnico: F1, F2, R1… R5badge→ devuelve una etiqueta HTML con clase CSS para que la puedas estilizar como quieras
[verifacwoo_tipo formato="texto"]
[verifacwoo_tipo formato="badge"]
Muestra solo la serie de facturación, sin el número. Por ejemplo: FAC-2026-.
[verifacwoo_serie]
Estado del envío a la AEAT
Muestra en qué punto está la factura en su proceso de verificación con Hacienda. Útil para que el cliente vea si su factura ya está confirmada o aún está en proceso.
| Estado | Qué significa |
|---|---|
| Confirmada AEAT | La AEAT ha aceptado la factura |
| Enviada | Enviada, pendiente de confirmación |
| Pendiente | Aún no se ha enviado |
| Rechazada | La AEAT no la ha aceptado |
| Cancelada | La factura ha sido anulada |
| Validando | En proceso de verificación |
[verifacwoo_estado formato="texto"]
[verifacwoo_estado formato="badge"]
Con badge obtienes una etiqueta HTML que puedes estilizar con CSS según el estado.
QR y verificación oficial
El código QR oficial de VERI*FACTU. Cuando el cliente lo escanea, accede directamente a la sede electrónica de la AEAT para verificar la autenticidad de su factura.
Puedes usarlo de dos formas:
Imagen lista para mostrar
[verifacwoo_qr png="1" size="150"]
Solo el data URI, para usarlo en el src de tu propia etiqueta img
La URL directa de verificación en la AEAT. Útil si quieres crear tu propio enlace con el texto que tú quieras, en vez de mostrar el QR:
[verifacwoo_cotejo_url]
Ejemplo combinado con enlace propio:
<a href="[verifacwoo_cotejo_url]" target="_blank">
Verificar esta factura en la AEAT
</a>
Descarga del PDF
Enlace de descarga del PDF de la factura. El texto del enlace, el estilo CSS y el tipo de documento son configurables:
[verifacwoo_download]
[verifacwoo_download texto="Descargar mi factura" class="mi-boton"]
Para rectificativas:
[verifacwoo_download tipo="credit_note" texto="Descargar factura rectificativa"]
Texto legal
El texto legal obligatorio que debe aparecer en las facturas VERI*FACTU. Puedes elegir entre la versión completa y la corta:
[verifacwoo_leyenda]
[verifacwoo_leyenda estilo="corto"]
- Completo → “Factura expedida conforme al RD 1007/2023 (VERI*FACTU). Factura verificable en la sede electrónica de la AEAT”
- Corto → “Factura VERI*FACTU”
Rectificativas
En una factura rectificativa, muestra la referencia a la factura original que se está rectificando. Si el pedido no es una rectificativa, no muestra nada.
[verifacwoo_factura_original]
[verifacwoo_factura_original incluir_motivo="no"]
Datos de la empresa
Mikhail Morozov Morozov
Muestra cualquier dato de tu empresa configurado en el plugin. Útil para incluir tu nombre fiscal, email o teléfono en plantillas sin tener que escribirlo a mano en cada sitio.
[verifacwoo_config return="company_name"]
info@verifacwoo.com
645595169
Calle El Raval 68
https://verifacwoo.com/wp-content/uploads/2026/05/logo.png © 2026 Veri*Fac*WOO® <br><small><a href="https://verifacwoo.com">Veri*Fac*WOO</a></small>
Firma digital
El hash SHA-256 de la factura — la huella digital que garantiza que el documento no ha sido modificado. Uso técnico, normalmente solo necesario en plantillas muy personalizadas.
[verifacwoo_firma]
Ejemplos completos por contexto
Página de confirmación de pago (Thank You)
Lo mínimo para que el cliente vea su factura justo después de pagar:
[verifacwoo_factura_card]
Página Ver Pedido del área de cliente
Información completa para que el cliente consulte su factura en cualquier momento:
Número de factura: [verifacwoo_numero]
Fecha: [verifacwoo_fecha]
Importe: [verifacwoo_importe_total]
Estado AEAT: [verifacwoo_estado formato="badge"]
Email personalizado
Para añadir los datos de factura en tus propios emails de WooCommerce (Kadence, Elementor, FluentCRM, etc.), sustituye {{order_id}} por la variable de ID de pedido de tu constructor:
[verifacwoo_numero order_id="{{order_id}}"]
Uso en plantillas PHP
Si prefieres trabajar directamente en archivos PHP (thankyou.php, single-order.php, etc.):
Usar el módulo VERI*FACTU con OTRO plugin de PDF
Para qué sirve. Si ya generas el PDF con otro plugin (o uno propio) y solo quieres el QR, la leyenda y los datos fiscales oficiales de VERI*FACTU, no necesitas el PDF interno; inserta los shortcodes en tu propia plantilla.
Ejemplo: Dentro de la plantilla del otro plugin de PDF.
// $order_id disponible en la plantilla del otro plugin
echo do_shortcode( sprintf( '[verifacwoo_qr order_id="%d"]', $order_id ) );
echo do_shortcode( sprintf( '[verifacwoo_leyenda order_id="%d"]', $order_id ) );
echo do_shortcode( sprintf( '[verifacwoo_numero order_id="%d"]', $order_id ) );
// Opción más sencilla — shortcode directo
$order_id = get_query_var('order-received') ?: get_query_var('view-order');
echo do_shortcode('[verifacwoo_factura_card order_id="' . intval($order_id) . '" size="150"]');
O combinando shortcodes individuales para más control:
$id = intval($order_id);
echo do_shortcode('[verifacwoo_qr order_id="' . $id . '" png="1" size="150"]');
echo '<strong>' . do_shortcode('[verifacwoo_numero order_id="' . $id . '"]') . '</strong>';
echo do_shortcode('[verifacwoo_estado order_id="' . $id . '" formato="badge"]');
echo do_shortcode('[verifacwoo_download order_id="' . $id . '" texto="Descargar PDF"]');
Así el módulo VERI*FACTU (numeración, emisión y QR) sigue siendo el de Veri*Fac*WOO, y el PDF lo pinta el otro sistema. El módulo PDF interno es totalmente opcional.
Añadir tipos de pedido facturables
Para qué sirve. Por defecto se facturan shop_order (checkout, admin, REST, Bookings, Deposits, Pre-Orders) y shop_order_renewal (renovaciones de Subscriptions). Si otro plugin crea un tipo de pedido propio que debe facturarse, añádelo con este filtro.
Ejemplo:
add_filter( 'vfwoo_invoice_order_types', function ( array $types ) {
$types[] = 'mi_tipo_de_pedido';
return $types;
} );
Detalle técnico.
| Filtro | Parámetros | Devuelve |
|---|---|---|
vfwoo_invoice_order_types | array $types | Array de tipos de pedido (slugs). |
Afecta a la reserva/asignación de número y a la creación de factura local (Invoice_Helper::reserve_invoice_number() y create_local_invoice()).
Personalizar el PDF interno
¿Para qué sirve?. Modificar lo que aparece en el PDF generado por el plugin: datos del emisor/comprador, líneas, totales, título, plantilla, o el HTML final completo.
Ejemplo 1: Añadir un texto al pie cambiando el HTML final.
add_filter( 'vfwoo_pdf_final_html', function ( $html, $order_id, $document_type ) {
return str_replace( '</body>', '<p>Gracias por su compra.</p></body>', $html );
}, 10, 3 );
Ejemplo 2: Forzar el número mostrado en el PDF.
add_filter( 'vfwoo_pdf_invoice_number', function ( $numero, $order_id ) {
return $numero; // aquí podrías ajustarlo
}, 10, 2 );
Detalle técnico. Todos los filtros vfwoo_pdf_* de datos reciben $valor, int $order_id (salvo los marcados). Se aplican en modules/pdf/class-pdf-document-data.php y class-pdf-html-renderer.php.
| Filtro | Valor que filtra | Args extra |
|---|---|---|
vfwoo_pdf_document_type | tipo de documento (invoice,…) | $order_id |
vfwoo_pdf_document_title | título del documento | $order_id |
vfwoo_pdf_invoice_number | número mostrado | $order_id |
vfwoo_pdf_invoice_date | fecha mostrada | $order_id |
vfwoo_pdf_seller_data | datos del emisor (array) | $order_id |
vfwoo_pdf_buyer_data | datos del comprador (array) | $order_id |
vfwoo_pdf_items | líneas de producto (array) | $order_id |
vfwoo_pdf_fees | líneas de fee (array) | $order_id |
vfwoo_pdf_shipping_lines | líneas de envío (array) | $order_id |
vfwoo_pdf_totals | totales (array) | $order_id |
vfwoo_pdf_taxes | desglose de impuestos (array) | $order_id |
vfwoo_pdf_payment_method | método de pago (string) | $order_id |
vfwoo_pdf_notes | nota del cliente (string) | $order_id |
vfwoo_pdf_refund_reason | motivo del reembolso (string) | $order_id |
vfwoo_pdf_parent_invoice | factura original (array) | $order_id |
vfwoo_pdf_coupons | cupones usados | $order_id |
vfwoo_pdf_extra_data | datos extra para la plantilla | $order_id |
vfwoo_pdf_template_file | ruta de la plantilla | $order_id, $document_type |
vfwoo_pdf_final_html | HTML final antes de renderizar | $order_id, $document_type |
Reaccionar a eventos (actions)
¿Para qué sirve?. Ejecutar lógica propia cuando se confirma una factura, se genera el PDF o cambia el estado de la licencia (sincronizar con un ERP, registrar métricas, etc…).
Ejemplo: Enviar la factura confirmada a un sistema externo:
add_action( 'vfwoo_invoice_confirmed', function ( $order_id, $invoice, $new_status ) {
// p. ej. notificar a un ERP
}, 10, 3 );
Detalle técnico.
| Action | Parámetros | Cuándo |
|---|---|---|
vfwoo_invoice_confirmed | $order_id, $invoice, $new_status | Al confirmar el estado de una factura. |
vfwoo_pdf_before_generate | $order_id | Justo antes de generar el PDF. |
vfwoo_pdf_after_generate | $order_id, $pdf_path | Tras generar el PDF (ruta del archivo). |
vfwoo_license_expired | $expires | Al detectar licencia caducada. |
vfwoo_license_expiring_soon | $expires, $days | Licencia próxima a caducar. |
vfwoo_tab_pdf_content | — | Para pintar configuración propia en el tab PDF. |
6. Categorías y datos UBL/fiscales
¿Para qué sirve?. Ampliar las categorías, motivos, esquemas o remarks fiscales que el plugin usa al construir el desglose (útil para casos fiscales no contemplados por defecto).
Ejemplo:
add_filter( 'vfwoo_ubl_tax_categories', function ( array $extra ) {
$extra['mi_categoria'] = 'Descripción';
return $extra;
} );
Detalle técnico. Todos reciben array $extra y devuelven el array combinado.
| Filtro | Amplía |
|---|---|
vfwoo_ubl_tax_categories | Categorías fiscales. |
vfwoo_ubl_tax_reasons | Motivos de exención. |
vfwoo_ubl_tax_schemes | Esquemas de impuesto. |
vfwoo_ubl_tax_remarks | Remarks/observaciones fiscales. |
vfwoo_daily_summary_incidents | Incidencias del resumen diario (array $incidents, bool $is_test). |