woocommerce_after_checkout_validation

Cómo usar woocommerce_after_checkout_validation para validar datos del checkout y mostrar errores correctamente.

Revisado
Compatibilidad
WooCommerce 3.0+; checkout clásico
Lectura
2 min
Autor
Gabriel — infinit8

woocommerce_after_checkout_validation se ejecuta después de que WooCommerce valide los datos básicos del checkout clásico. Es el punto adecuado para reglas que necesitan comparar varios campos o consultar lógica del pedido antes de crearlo.

Firma y parámetros

La acción recibe los datos procesados del checkout y un objeto WP_Error. Para rechazar el envío se añade un error a ese objeto; no es necesario imprimir HTML ni detener la ejecución.

$data
Datos del checkout ya procesados.
$errors
Errores que WooCommerce mostrará al cliente.
PHP
do_action(
    'woocommerce_after_checkout_validation',
    $data,
    $errors
);

Validar una regla entre país y NIF

El ejemplo exige un NIF para España. Sanitiza la entrada, usa un código de error estable y devuelve un mensaje que indique cómo corregir el problema.

i8-checkout-validation.php
add_action(
    'woocommerce_after_checkout_validation',
    function (array $data, WP_Error $errors): void {
        $country = isset($data['billing_country'])
            ? wc_clean($data['billing_country'])
            : '';
        $vat = isset($_POST['billing_vat'])
            ? wc_clean(wp_unslash($_POST['billing_vat']))
            : '';

        if ('ES' === $country && '' === $vat) {
            $errors->add(
                'billing_vat_required',
                'Indica el NIF o CIF para continuar con el pedido.'
            );
        }
    },
    10,
    2
);
Importante

Si añades un campo propio, regístralo y guárdalo mediante las APIs de WooCommerce. Leer $_POST directamente debe ser el último recurso y siempre requiere wp_unslash y sanitización.

Cuándo usar este hook

Es útil para reglas condicionales entre campos, límites asociados al método de entrega o comprobaciones rápidas contra datos internos. Evita llamadas lentas a APIs externas: bloquearían el checkout y empeorarían la conversión.

Por qué una validación puede no ejecutarse

  • La tienda usa Checkout Blocks.
  • El callback declara una cantidad incorrecta de argumentos.
  • El código se carga solo en administración.
  • Otro error ocurre antes en el proceso.
  • El campo llega con un nombre distinto del esperado.

Preguntas frecuentes

¿Debo usar wc_add_notice()?

En este hook es preferible añadir el error al objeto WP_Error recibido, que forma parte de su contrato.

¿Puedo consultar una API externa?

Es posible, pero no recomendable en una petición crítica sin timeout corto, caché y una estrategia clara cuando el servicio no responde.

Referencias y revisión

Contenido contrastado con documentación oficial. Comprueba siempre el comportamiento en un entorno de pruebas antes de desplegar cambios.