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 (55por default).$phone— telefone do cliente, sem formatação ainda.$order—WC_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.