FernandoAcosta.Netdocs

Integrar com plugin de frete não suportado

3 min de leituraAtualizado há 5 dias

O plugin já reconhece automaticamente os principais plugins de frete brasileiros (ver Integrações com plugins de frete). Para plugins não suportados nativamente, há dois caminhos — depende de como o plugin de frete expõe o prazo.

Cenário 1 — o plugin de frete coloca o prazo no label

Se o plugin de frete renderiza o método com o prazo dentro do texto (ex: Express (5 dias úteis), Premium (3 to 5 days)), o plugin já funciona automaticamente: ele encontra os números no label e soma os dias adicionais.

Você só precisa intervir se:

  • O label tem outros números que não são prazo (CEP, código de serviço) e estão sendo substituídos por engano.
  • O número que representa o prazo está em uma posição não esperada dentro do label.

Para esses casos, use o filtro wc_additional_days_per_product_not_replace:

add_filter( 'wc_additional_days_per_product_not_replace', function( $skip, $index, $rate ) {
    // Não substituir o primeiro número do label (provável CEP)
    if ( $index === 0 ) {
        return true;
    }
    return $skip;
}, 10, 3 );

$index é a posição do número no label, começando em 0. Ex: em Express 12345 (5 dias), $index=0 é o 12345 e $index=1 é o 5.

Cenário 2 — o prazo está em um metadado do método

Se o plugin de frete não mostra o prazo no label, mas armazena em um metadado (meta_data) do WC_Shipping_Rate, use o filtro wc_adpp_additional_days_custom_metadata para indicar a chave do metadado.

Como descobrir a chave do metadado

Ative o debug do plugin (ver Debug e logs) e adicione um produto ao carrinho. Nos logs, você verá os metadados de cada método de envio em uma chamada como:

Array (
    [id] => meu-frete:1
    [label] => Express
    [meta_data] => Array (
        [meu_prazo_de_entrega] => 5
        [outro_meta] => xpto
    )
)

Identifique qual chave contém o número de dias — no exemplo acima, é meu_prazo_de_entrega.

Registrar a integração

add_filter( 'wc_adpp_additional_days_custom_metadata', function( $custom_meta, $meta_data, $rate ) {
    if ( str_contains( $rate->get_method_id(), 'meu-plugin-frete' ) ) {
        return 'meu_prazo_de_entrega';
    }
    return $custom_meta;
}, 10, 3 );

Parâmetros:

  • $custom_meta (string|false) — chave do metadado. Inicialmente false.
  • $meta_data (array) — todos os metadados disponíveis no método.
  • $rate (WC_Shipping_Rate) — o método de envio sendo processado.

Retorne:

  • A string com a chave quando o método pertence ao plugin que você quer integrar.
  • O valor original ($custom_meta) caso contrário — para não interferir com outros métodos.

A partir desse ponto, sempre que esse método aparecer no checkout, o plugin lê o metadado, soma os dias adicionais e atualiza o valor.

Cenário 3 — múltiplos plugins de frete customizados

O filtro pode tratar vários plugins ao mesmo tempo:

add_filter( 'wc_adpp_additional_days_custom_metadata', function( $custom_meta, $meta_data, $rate ) {
    $method_id = $rate->get_method_id();

    if ( str_contains( $method_id, 'frete-x' ) ) {
        return 'prazo_frete_x';
    }
    if ( str_contains( $method_id, 'frete-y' ) ) {
        return 'tempo_y';
    }

    return $custom_meta;
}, 10, 3 );

Cenário 4 — quando o metadado não tem o número direto

Se o metadado contém algo como 5 dias úteis (string com texto) em vez de só 5 (número), o plugin pode não interpretar corretamente. Nesse caso, use o filtro wc_adpp_additional_days para ajustar o cálculo manualmente:

add_filter( 'wc_adpp_additional_days', function( $days, $product, $variation, $cart_item ) {
    // logic personalizada
    return $days;
}, 10, 4 );

Ou intercepte o método antes via woocommerce_package_rates e modifique o label/metadado para um formato que o plugin reconheça.

Validar a integração

Depois de registrar o filtro, ative o debug e teste no checkout. O log vai mostrar se o cálculo foi acionado e qual valor foi somado.

Detalhes em Debug e logs.

Foi útil?