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;
}
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;
}
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 resultado final será assim:
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;
}
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;
}