FernandoAcosta.Netdocs

Customizar DDI, telefone e prefixo do WhatsApp

2 min de leituraAtualizado há 1 semana

Por padrão, o plugin assume que todos os clientes são brasileiros (DDI 55) e usa o telefone que o cliente preencheu no checkout — meta _billing_cellphone ou campo padrão Telefone. Para lojas internacionais ou que processam telefones de forma especial, três filtros cobrem o caminho completo da chamada do WhatsApp.

Os três filtros

Filtro Quando usar
wc_whatsapp_pending_orders_ddi Customizar o DDI (código do país) por pedido.
wc_whatsapp_pending_orders_phone Reformatar/sanitizar o telefone antes de montar o link.
wc_whatsapp_pending_orders_prefix Trocar o subdomínio do WhatsApp Web (web por padrão).

DDI por país

add_filter(
    'wc_whatsapp_pending_orders_ddi',
    function ( $ddi, $phone, $order ) {
        $country = $order->get_billing_country();

        $codes = [
            'BR' => '55',
            'US' => '1',
            'PT' => '351',
            'AR' => '54',
            'UY' => '598',
        ];

        return $codes[ $country ] ?? $ddi;
    },
    10,
    3
);

Argumentos:

  • $ddi — DDI atual (55 por default).
  • $phone — telefone do cliente, sem formatação ainda.
  • $orderWC_Order.

Atenção: o DDI customizado é aplicado apenas quando o cliente clica num botão da lista de pedidos. O botão da meta box no editor de pedido tem o 55 hardcoded — está pra ser corrigido em versão futura.

Telefone

O plugin já lê _billing_cellphone (usado por plugins de checkout brasileiro como Brazilian Market) com fallback pro campo Telefone. Use o filtro wc_whatsapp_pending_orders_phone quando precisar:

  • Limpar formatação custom (parênteses, hífens).
  • Mover o 9 do celular brasileiro para o lugar certo.
  • Buscar o telefone em outro meta (CRM, custom field).
add_filter(
    'wc_whatsapp_pending_orders_phone',
    function ( $phone, $order ) {
        // só dígitos
        $phone = preg_replace( '/\D/', '', $phone );

        // celular brasileiro precisa começar com 9 após DDD
        if ( strlen( $phone ) === 10 && 'BR' === $order->get_billing_country() ) {
            $phone = substr( $phone, 0, 2 ) . '9' . substr( $phone, 2 );
        }

        return $phone;
    },
    10,
    2
);

O plugin já remove caracteres não-numéricos no fim do pipeline (preg_replace( '([^0-9])', '', $string )), então não precisa se preocupar com formatação manual — só com a estrutura do número (DDD, dígito 9, etc).

Prefixo do WhatsApp

O link que o plugin gera é:

https://{prefix}.whatsapp.com/send?phone=...&text=...

{prefix} é web por padrão. Pode trocar por api ou outro:

add_filter(
    'wc_whatsapp_pending_orders_prefix',
    function ( $prefix ) {
        return 'api';  // → https://api.whatsapp.com/send?...
    }
);

A diferença prática:

Prefixo URL gerada Comportamento
web (padrão) web.whatsapp.com/send?... Abre o WhatsApp Web no navegador.
api api.whatsapp.com/send?... Equivalente, mas tende a abrir o app no celular se acessado de mobile. Útil pra integrações onde o lojista cobra pelo celular.

A opção Usar app desktop tem prioridade sobre esse filtro. Se ela está ativa, o link vira whatsapp://send?... e o filtro wc_whatsapp_pending_orders_prefix é ignorado.

Combinando os três

Loja que vende para Brasil e Argentina, com checkout que salva CPF/CUIT em _billing_document:

// DDI por país
add_filter( 'wc_whatsapp_pending_orders_ddi', function ( $ddi, $phone, $order ) {
    return [ 'BR' => '55', 'AR' => '54' ][ $order->get_billing_country() ] ?? $ddi;
}, 10, 3 );

// telefone limpo e com 9 inicial pra BR
add_filter( 'wc_whatsapp_pending_orders_phone', function ( $phone, $order ) {
    $phone = preg_replace( '/\D/', '', $phone );
    if ( strlen( $phone ) === 10 && 'BR' === $order->get_billing_country() ) {
        $phone = substr( $phone, 0, 2 ) . '9' . substr( $phone, 2 );
    }
    return $phone;
}, 10, 2 );

// prefixo api (atendimento pelo celular)
add_filter( 'wc_whatsapp_pending_orders_prefix', fn () => 'api' );

Tip final

Antes de colocar em produção, teste com um pedido real. Crie um pedido de teste com um número seu, clique no botão e veja se o WhatsApp abre com o número certo. Erro silencioso (DDI errado) é fácil de cometer e difícil de detectar — o WhatsApp simplesmente abre uma tela em branco.

Foi útil?