Campo extra no checkout em blocos do WooCommerce sem voltar pro shortcode

Trocou a página de finalizar compra pelo checkout em blocos e o campo de CPF sumiu. O filtro woocommerce_checkout_fields não é lido ali: o bloco é React e só desenha campo registrado pela API de campos adicionais do WooCommerce 9.x.

Registrando no hook certo

O registro tem que acontecer dentro de woocommerce_init, e o id precisa de namespace com barra. Isso vai no plugin do site ou no functions.php do tema filho:

add_action( 'woocommerce_init', function () {
    if ( ! function_exists( 'woocommerce_register_additional_checkout_field' ) ) {
        return;
    }

    woocommerce_register_additional_checkout_field( [
        'id'       => 'rtk-loja/cpf',
        'label'    => 'CPF',
        'location' => 'contact',
        'type'     => 'text',
        'required' => true,
    ] );
} );

O location aceita três valores e cada um muda onde o campo aparece: contact gruda no bloco do e-mail, address se repete em cobrança e entrega, e order abre um bloco de informações extras no fim. Chamado fora do woocommerce_init, ou com id sem barra, o campo não é registrado e a tela não reclama.

Onde o valor foi parar

A pegadinha é essa: o valor não vira uma meta com o nome que você escolheu. O WooCommerce prefixa a chave conforme o location, então procurar por cpf na meta do pedido não acha nada.

// contact e order caem no mesmo grupo
$cpf = $order->get_meta( '_wc_other/rtk-loja/cpf' );

// location address grava um par, cobrança e entrega
$cob = $order->get_meta( '_wc_billing/rtk-loja/cpf' );
$ent = $order->get_meta( '_wc_shipping/rtk-loja/cpf' );

Pedido antigo não ganha o campo retroativamente. Ajuste o template da nota fiscal para tratar meta vazia antes de subir isso em produção.

Se travou nisso e precisa de ajuda, me chama aqui.

Dúvidas? Faça um comentário logo abaixo ou envie uma mensagem clicando aqui.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *