Para añadir un campo al checkout de bloques de WooCommerce (el bloque «Finalizar compra») necesitas la API de campos adicionales (woocommerce_register_additional_checkout_field(), desde WooCommerce 8.9) o un plugin que la use, porque ese bloque nunca ejecuta el filtro clásico woocommerce_checkout_fields. Para quitar campos, la empresa, la segunda línea de dirección y el teléfono se ocultan desde el editor sin programar; el resto de los campos de dirección solo se ocultan con el filtro woocommerce_get_country_locale o con un plugin. Casi todos los fragmentos de código y los editores de campos anteriores a 2024 funcionan solo en el pago clásico.
Por qué pasa
- Tu página de pago usa el bloque de checkout. Las tiendas nuevas lo traen por defecto. Está hecho en JavaScript y toma los campos de la Store API de WooCommerce, no del formulario PHP que imprime el pago clásico.
- Tu código o tu plugin es para el pago clásico.
woocommerce_checkout_fields,woocommerce_billing_fieldsy los ganchos alrededor del formulario (woocommerce_after_order_notesy parecidos) no hacen nada en el pago de bloques. La documentación para desarrolladores de WooCommerce dice que es a propósito. - El propio plugin lo avisa. La extensión oficial Checkout Field Editor de WooCommerce dice en su página que solo funciona con el pago clásico.
- El editor solo deja tocar tres campos. En el pago de bloques puedes mostrar, ocultar o dejar como opcionales la empresa, la segunda línea de dirección y el teléfono. Cambiar un nombre, quitar el código postal o la ciudad, reordenar o añadir una casilla para el NIF, el RFC o el CUIT no está en los ajustes.
- Los campos con condiciones piden versiones recientes. Mostrar un campo solo para ciertos productos, métodos de envío o países depende de reglas que, según la documentación de WooCommerce, necesitan la versión 9.9 o superior.
Cómo comprobarlo
- En WordPress, entra en Páginas y abre tu página de pago (la que aparece en WooCommerce > Ajustes > Avanzado, en la configuración de páginas).
- Abre la Vista de lista del editor. Si ves un bloque de checkout (Checkout o «Finalizar compra», según el idioma) con bloques internos como Checkout Fields, usas el pago de bloques. Si ves el shortcode
[woocommerce_checkout]o un bloque Classic Checkout («Finalizar compra clásico»), usas el clásico. - Si es de bloques, selecciona Checkout Fields y busca Address Fields (campos de dirección) en la barra lateral de ajustes. Ahí se activan o se quitan la empresa, la segunda línea y el teléfono.
- Abre tu pago en una ventana privada con un producto en el carrito. Si falta un campo que añadiste con código o con un plugin, ese código es solo para el pago clásico.
- Busca en la página del plugin o en su registro de cambios si menciona «block checkout» o «Checkout block». «Compatible con Gutenberg» suele querer decir otra cosa.
Cómo arreglarlo
Quitar la empresa, la segunda línea de dirección o el teléfono
- Edita la página de pago y selecciona Checkout Fields en la Vista de lista.
- En Address Fields, desactiva el campo que no quieras o déjalo activo y elige si es opcional u obligatorio.
- Guarda. Los formularios de envío y de facturación comparten estos ajustes.
Con un tema clásico, las mismas tres opciones están también en Apariencia > Personalizar > WooCommerce > Finalizar compra.
Ocultar otros campos de dirección
Para el código postal, la ciudad, la provincia o estado, o la calle, añade un fragmento con un plugin de fragmentos de código o en tu tema hijo. Este ejemplo los oculta para los clientes de México, por ejemplo en una tienda donde todo se recoge en el local:
add_filter( 'woocommerce_get_country_locale', function ( $locale ) {
foreach ( array( 'address_1', 'city', 'postcode', 'state' ) as $key ) {
$locale['MX'][ $key ]['required'] = false;
$locale['MX'][ $key ]['hidden'] = true;
}
return $locale;
} );
Cambia MX por el código de tu país (ES, AR, CO, CL…). Lo que advierte la documentación de WooCommerce:
- No ocultes nunca el país: el pedido falla, porque el país decide qué campos se muestran.
- La segunda línea de dirección desaparece sola cuando ocultas la primera.
- El cambio vale para la facturación y el envío a la vez.
- Los impuestos, el control de fraude y algunos métodos de pago usan la dirección. Haz un pedido de prueba real con cada método de pago después del cambio.
- Si vendes a varios países, tienes que repetirlo en cada uno.
Marcar todos los productos como Virtual quita la dirección y las opciones de envío, pero no los campos de facturación.
Añadir un campo nuevo
Regístralo en woocommerce_init. Este ejemplo añade un campo opcional para el número fiscal:
add_action( 'woocommerce_init', function () {
if ( ! function_exists( 'woocommerce_register_additional_checkout_field' ) ) {
return;
}
woocommerce_register_additional_checkout_field( array(
'id' => 'mitienda/numero-fiscal',
'label' => 'NIF / RFC',
'optionalLabel' => 'NIF / RFC (opcional)',
'location' => 'contact',
'type' => 'text',
'required' => false,
) );
} );
locationdecide dónde sale:contact(junto al correo),address(dentro de los formularios de envío y de facturación) uorder(un bloque aparte, cerca del final).- El
idlleva un prefijo y una barra (mitienda/numero-fiscal). - Según la documentación de WooCommerce, los tipos son
text,select,checkboxydate. - No puedes colocarlo en una posición concreta entre dos campos de dirección, y los ganchos clásicos siguen sin funcionar.
O volver al pago clásico
Si dependes de un plugin que solo funciona en el pago clásico, cambia el bloque de checkout por el bloque Classic Checkout o por el shortcode [woocommerce_checkout]. Pierdes el diseño del pago de bloques y las extensiones que solo funcionan con él, así que pruébalo antes en una copia de la tienda.
Cómo evitar que vuelva a pasar
El código de arriba funciona, pero cada pregunta nueva es otro fragmento, otro país que recordar y otra prueba. CheckoutPilot, nuestro editor de campos del pago, lo hace desde una pantalla (WooCommerce > Campos del pago) y registra tus campos con la misma API que usa WooCommerce. Puedes renombrar, ocultar o dejar opcionales los campos de dirección y el teléfono (para todos los países a la vez) y añadir campos de texto, desplegables, casillas, números, fechas y otros en la sección de contacto, de dirección o del pedido. Pueden aparecer solo cuando hay cierto producto o categoría en el carrito, o según el método de envío, el método de pago, el país, el total del carrito o la respuesta a otro campo. En el pago de bloques, las condiciones necesitan WooCommerce 10 o superior. Hay límites en bloques: los botones de opción se convierten en desplegables, los títulos no se muestran, el ancho del campo solo se aplica en el pago clásico y el formulario corto para carritos con solo productos virtuales también es solo del clásico. Cuesta 35 USD al año para un sitio o 69 USD de por vida, con demo en vivo y 14 días de garantía.
Preguntas frecuentes
¿Por qué no hace nada mi código con woocommerce_checkout_fields?
Porque tu página de pago usa el bloque de checkout, y ese bloque nunca ejecuta el filtro. Usa woocommerce_register_additional_checkout_field() para añadir campos y woocommerce_get_country_locale para ocultar los de dirección.
¿Puedo quitar la dirección de facturación del todo? Desde los ajustes, no. Con el filtro de país puedes ocultar casi todos los campos de dirección, pero no el país, y después tienes que probar los impuestos y los pagos. Los productos virtuales solo quitan la dirección de envío.
¿Qué versión de WooCommerce necesito? La 8.9 o superior para añadir campos con la API. Para campos que aparecen solo con condiciones, la documentación de WooCommerce pide la 9.9 o superior.
¿Dónde se guardan las respuestas de los campos nuevos? En el pedido. Los campos de dirección guardan un valor para la facturación y otro para el envío. Los de contacto y del pedido guardan uno solo.
¿Puedo cambiar el orden de los campos del pago? Solo en parte. En el editor puedes mover el bloque con los campos del pedido. Un campo nuevo va dentro de su sección, no entre dos campos de dirección concretos.


