EasyVerifactu añade dos campos al checkout de WooCommerce: una casilla de “factura con datos fiscales” y un campo NIF/CIF. Esta guía está pensada para desarrolladores, agencias y equipos técnicos que necesitan reordenar, restilizar o renombrar esos campos sin romper la integración. Cubre los dos sabores de checkout que soporta el plugin, los hooks seguros para personalizar, qué prácticas rompen la integración y cómo diagnosticarlo desde el navegador.Documentation Index
Fetch the complete documentation index at: https://www.easyverifactu.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
Dos checkouts, dos vías de integración
WooCommerce tiene dos motores de checkout y EasyVerifactu soporta ambos. Comparten la misma forma canónica de datos en el pedido (OrderMeta), pero la superficie de personalización es completamente distinta. Identifica primero cuál usa tu tienda antes de tocar nada.
- Checkout Blocks (moderno). El checkout basado en bloques de Gutenberg, validación de campos por JSON Schema, personalización vía ajustes nativos del bloque y patrones. Es el predeterminado en WooCommerce 8.3 y posteriores. Nuestros campos se registran a través de la Additional Checkout Fields API bajo el namespace
easyverifactu. - Checkout Classic (legacy). El checkout del shortcode
[woocommerce_checkout], basado en$_POSTy personalizado mediante el filtrowoocommerce_checkout_fields. Muchas tiendas previas a la versión 8.3 y muchos themes/page builders siguen anclados a este modo. Nuestros campos se registran con prioridades 34 y 35 entrebilling_company(prioridad 30) ybilling_country(prioridad 40).
Qué añade el plugin y dónde
EasyVerifactu añade dos campos a la sección de facturación (billing) del checkout cuando la tienda opera en EUR. En cualquier otra divisa los campos no se registran.
- Casilla
easyverifactu_wants_full_invoice. Tipocheckbox. Etiqueta: “Quiero factura con datos fiscales (empresa o autónomo)”. - Campo
easyverifactu_tax_id. Tipotext. Etiqueta: “NIF / CIF / Identificación fiscal” (opcional) o “NIF / CIF (obligatorio en compras superiores a 3.000 €)” cuando el carrito supera el umbral.
woocommerce_register_additional_checkout_field con location: 'order', por lo que aparecen en la sección de orden del bloque y los IDs internos son easyverifactu/wants_full_invoice y easyverifactu/tax_id (con barra, no con guion bajo).
Comportamiento por umbral
El umbral regulatorio (RD 1619/2012) de 3.000 € define el comportamiento de revelado:- Carrito ≤ 3.000 €. La casilla está visible. El NIF/CIF está oculto hasta que el comprador marca la casilla. Al marcarla, aparece el campo NIF/CIF como opcional.
- Carrito > 3.000 €. La casilla desaparece (la factura completa es obligatoria de todas formas) y el NIF/CIF se muestra siempre con la etiqueta de obligatorio.
woocommerce_after_checkout_validation. Un comprador sin JavaScript no puede saltarse el requisito.
Hooks y técnicas seguras para personalizar (checkout clásico)
Las técnicas de esta sección sólo aplican al checkout clásico (shortcode). El checkout Blocks se personaliza desde el editor de Gutenberg y los ajustes del propio bloque.Reordenar los campos
Para reubicar nuestros campos en el orden de facturación, engancha un filtro awoocommerce_checkout_fields con prioridad mayor que 10 (la nuestra) y reescribe la clave priority. Por defecto, la casilla está en prioridad 34 y el NIF/CIF en 35, justo después de billing_company. Ejemplo: colocarlos entre el nombre (prioridad 10) y los apellidos (prioridad 20).
Restilizar con CSS
Los campos exponen ganchos por ID y por clase. Úsalos para alinear con el diseño del theme:#easyverifactu_wants_full_invoicey#easyverifactu_tax_idpara los inputs..easyverifactu-legacy-checkout__wants-full-invoicey.easyverifactu-legacy-checkout__tax-idpara las clases del wrapper<p class="form-row">.
.form-row, .form-row-wide) si tu hoja de estilos ya las trata.
Renombrar etiquetas
Sobrescribe la clavelabel en el mismo filtro. Si quieres usar “NIF” a secas en lugar del título largo por defecto:
Añadir contenido adyacente
Para insertar texto o componentes alrededor de la sección de facturación, usa los hooks de acción nativos de WooCommerce:woocommerce_before_checkout_billing_formwoocommerce_after_checkout_billing_form
Qué rompe la integración y cómo detectarlo
La mayoría de incidencias en personalizaciones avanzadas caen en uno de estos patrones. Reconocerlos te ahorrará tiempo de soporte.Page builders que reemplazan la plantilla del checkout
Elementor Pro, Divi, Beaver Builder o Bricks ofrecen widgets de checkout que sustituyen por completo la plantilla nativa. Cuando lo hacen, el pipeline de campos de WooCommerce no se ejecuta y nuestros campos no se renderizan. Solución. Configura el módulo de checkout del builder para usar los campos nativos de WooCommerce, no una lista de campos definida en el propio builder. Cada producto lo nombra de forma diferente, pero la opción suele estar etiquetada como “Use WooCommerce fields”, “Default fields” o similar.Plugins de editor de campos del checkout
“Checkout Field Editor for WooCommerce”, “WooCommerce Checkout Manager”, “Flexible Checkout Fields” y similares mantienen una lista interna de campos permitidos. Cualquier campo que no esté en esa lista (como los nuestros) puede ser eliminado del formulario. Solución. Añadeeasyverifactu_wants_full_invoice y easyverifactu_tax_id a la lista de campos permitidos del editor.
Themes que sobrescriben las plantillas de checkout
Algunos themes incluyen sobrescrituras dewoocommerce/checkout/form-checkout.php u otras plantillas del checkout. Si la sobrescritura no itera dinámicamente los campos del filtro y los lista a mano, nuestros campos no aparecerán.
Solución. Revisa el archivo form-checkout.php del theme dentro de wp-content/themes/<tu-theme>/woocommerce/checkout/. Asegúrate de que llama a woocommerce_checkout_billing() o que recorre los campos devueltos por el filtro woocommerce_checkout_fields. Una plantilla que codifica a mano la lista de campos rompe cualquier personalización dinámica, no sólo la nuestra.
Contrato DOM del que depende el revelado condicional
El script de revelado y validación en el cliente espera una estructura DOM concreta. Si tu theme o un plugin la alteran, el revelado y la validación inline se degradan silenciosamente. La validación de servidor sigue funcionando, pero la experiencia del comprador empeora.- Envoltorio
<p class="form-row">alrededor de cada campo. Lo usamos para mostrar/ocultar la fila y para marcar el estado de error visualmente. - Selector
.order-total .woocommerce-Price-amount(o.order-total bdi). Lo leemos para conocer el total del carrito en vivo y aplicar el umbral de 3.000 €. - IDs
#billing_first_name,#billing_last_name,#billing_company,#billing_country. Los leemos para componer el nombre del comprador y el código de país que enviamos al validador de identificadores fiscales. - Evento
updated_checkoutdisparado con jQuery sobredocument.body. WooCommerce lo emite tras cada cambio en el carrito (cupón, envío, etc.) y reescuchamos para reaplicar el estado tras el re-renderizado del formulario.
woocommerce_after_checkout_validation sigue bloqueando el pedido si el NIF/CIF es incorrecto, así que el cumplimiento no se ve comprometido.
Diagnóstico rápido desde el navegador
Antes de pedir soporte, abre la consola del navegador en la página de checkout y comprueba lo siguiente:undefined, nuestro script no se ha cargado. Confirma que el theme y los plugins activos no están bloqueando wp_enqueue_scripts en la página de checkout. Si devuelve un objeto, debe contener al menos restUrl, restNonce, thresholdCents, fieldWantsFullInvoice, fieldTaxId.
Después, escribe un NIF inválido en el campo y quita el foco. En la pestaña Network deberías ver una petición POST a /wp-json/easyverifactu/v1/validate-tax-id (en tiendas con permalinks bonitos) o a /?rest_route=/easyverifactu/v1/validate-tax-id (en tiendas con la configuración “Sencillo” de permalinks). Si la petición no se dispara, el handler de blur no se ha enlazado (suele indicar un bundle cacheado obsoleto en el servidor de WordPress o que el theme reemplaza el input antes de que enlacemos). Si la petición devuelve 401 o 403, el nonce REST no es válido y suele indicar caché de página agresiva que sirve nonces caducados a usuarios distintos.
Cuando la validación inline funciona, el input gana el atributo aria-invalid="true" y la fila añade las clases woocommerce-invalid y woocommerce-invalid-required-field.
Cuando la posición estándar no encaja con tu diseño
Hoy no proporcionamos un shortcode independiente para colocar los campos en cualquier zona de la página. Los dos campos aparecen en la posición que indican las prioridades 34 y 35 del filtrowoocommerce_checkout_fields. Para reubicarlos basta con cambiar esa prioridad como se muestra en la sección anterior.
Si tu diseño exige una posición que ninguna prioridad alcanza (por ejemplo, fuera del bloque de facturación), escríbenos. Estamos midiendo la demanda de añadir un hook tipo do_action( 'easyverifactu_render_tax_id_field' ) o un shortcode [easyverifactu_tax_id_field] para casos extremos. Ambas opciones tienen restricciones (el campo renderizado debe terminar dentro del <form class="checkout"> para que su valor se envíe con el resto del pedido), y preferimos construir la vía de escape correcta a la más pedida.
Tu personalización no rompe el cumplimiento
Sea cual sea el comportamiento del cliente, los hooks de servidor siguen siendo la fuente de verdad.validate_submission aplica el requisito de NIF/CIF para compras superiores a 3.000 € y consulta al validador de identificadores fiscales en cada envío. persist_to_order escribe la información canónica sobre el pedido. Un frontend mal configurado puede degradar la experiencia del comprador, pero no puede producir un pedido sin la información fiscal requerida cuando la ley la exige. Esto está diseñado así a propósito.
Cuando algo no funciona
Antes de contactar con soporte, captura la siguiente información. Reduce el tiempo de diagnóstico a la mitad.- Logs de WooCommerce filtrados por
easyverifactu. Ve a WooCommerce > Estado > Registros y abre el log más reciente con esa fuente. - Consola y Network del navegador en la página de checkout. Captura el contenido de
window.easyverifactuLegacyCheckout, la petición al endpointvalidate-tax-id(con permalinks bonitos aparece como/wp-json/easyverifactu/v1/validate-tax-id; con la configuración “Sencillo” de permalinks aparece como/?rest_route=/easyverifactu/v1/validate-tax-id). Incluye cuerpo, respuesta, código de estado y cualquier error que aparezca en consola. - Estado actual de los campos del checkout. Si tienes acceso WP-CLI, ejecuta
wp option get woocommerce_checkout_fields. Si no, copia el HTML del<form class="checkout">renderizado. - Theme activo y plugins de personalización del checkout activos. Nombre exacto y versión.
- Una grabación de pantalla del fallo. Cualquier vídeo corto del problema vale más que una descripción escrita.