Frete offline
Avançado

Avançado

Essa seção descreve alguns elementos pouco comuns e que podem exigir algum conhecimento técnico.

Personalizações avançadas não são cobertas pelo suporte.

Frete grátis com mínimo de compra

add_filter( 'wc_table_shipping_cost', 'wcts_free_shipping', 10, 3 );
function wcts_free_shipping( $cost, $rate, $package ) {
  if ( 200 <= $package['contents_cost'] ) {
    $cost = 0;
  }
  return $cost;
}
⚠️
O código acima é apenas uma referência técnica. Para utilizá-lo/modificá-lo é necessário conhecimento em programação. Customizações de qualquer tamanho não são cobertas pelo suporte.

Frete grátis com mínimo de compra em tabela específica

add_filter( 'wc_table_shipping_cost', 'wcts_free_shipping', 10, 3 );
function wcts_free_shipping( $cost, $rate, $package ) {
  $id = 9999;
  if ( 200 <= $package['contents_cost'] && $id === $rate['id'] ) {
    $cost = 0;
  }
  return $cost;
}
⚠️
O código acima é apenas uma referência técnica. Para utilizá-lo/modificá-lo é necessário conhecimento em programação. Customizações de qualquer tamanho não são cobertas pelo suporte.

Veja que o hook recebe 3 parâmetros, tornando tudo flexível: wcts_free_shipping( $cost, $rate, $package ).

Salvar dados adicionais da tabela de frete nos detalhes do pedido

Se você possui várias colunas na sua tabela com informações que não são propriamente relevantes ao cálculo mas que podem ser úteis futuramente, você pode usar o filtro wc_table_shipping_rate para salvar esses dados como metadata.

Este filtro possui 3 argumentos:

  • $args = os detalhes básicos do método de envio
  • $rate = todos os detalhes que vieram da sua tabela
  • $method = todos os detalhes e funções do método de envio

Um exemplo é se você não exibe ao cliente o nome da transportadora selecionada mas gostaria de salvá-lo na tela de pedidos:

Basta usar o código abaixo:

add_filter( 'wc_table_shipping_rate', 'wcts_save_shipping_company_name', 10, 3 );
function wcts_save_shipping_company_name( $args, $rate, $method ) {
  $row = $rate['row'];
  $map = $rate['map'];
  $args['meta_data']['Transportadora Escolhida'] = isset( $row[ $map['label'] ] ) ? $row[ $map['label'] ] : 'Não foi possível identificar a transportadora';
 
  return $args;
}
⚠️
O código acima é apenas uma referência técnica. Para utilizá-lo/modificá-lo é necessário conhecimento em programação. Customizações de qualquer tamanho não são cobertas pelo suporte.

O resultado final será assim:

Nenhuma opção disponível

Hooks e filtros

wc_table_shipping_weight

Com este filtro é possível manipular o peso entregue no carrinho. Dessa forma, você pode, por exemplo, cadastrar uma tabela com peso máximo de 30 kg. Se os produtos pesarem mais que isso, nenhum método de envio será exibido. Você pode criar uma regra para que se o peso for maior que 30, calcular como se fosse 30.

Exemplo:

add_filter( 'wc_table_shipping_weight', 'wcts_custom_weight', 10, 4 );
function wcts_custom_weight( $cart_weight, $package, $extra_weight, $weight_unit ) {
  if ( $cart_weight > 30 ) {
    $cart_weight = 30;
  }
  return $cart_weight;
}
⚠️
O código acima é apenas uma referência técnica. Para utilizá-lo/modificá-lo é necessário conhecimento em programação. Customizações de qualquer tamanho não são cobertas pelo suporte.

wc_table_shipping_cost

Com este filtro você pode manipular o custo total do envio. Com isso você, por exemplo, combinar com o filtro wc_table_shipping_weight e cobrar um valor extra sempre que o pedido tiver mais que 30 kilos ou qualquer outro peso.

add_filter( 'wc_table_shipping_cost', 'wcts_custom_cost', 10, 4 );
function wcts_custom_cost( $cost, $rate, $package, $method ) {
  // funções personalizadas aqui
  return $cost;
}
⚠️
O código acima é apenas uma referência técnica. Para utilizá-lo/modificá-lo é necessário conhecimento em programação. Customizações de qualquer tamanho não são cobertas pelo suporte.