Cole num plugin de snippets ou no functions.php do tema filho.
Sobretaxa de 10% no frete de um vendedor
add_filter( 'woocommerce_package_rates', function ( $rates, $package ) {
if ( 42 !== (int) ( $package['wcsp_vendor_id'] ?? 0 ) ) {
return $rates;
}
foreach ( $rates as $rate ) {
$rate->set_cost( $rate->get_cost() * 1.10 );
}
return $rates;
}, 100, 2 );
20% de desconto no frete de vendedores marcados
add_filter( 'woocommerce_package_rates', function ( $rates, $package ) {
$vendor_id = (int) ( $package['wcsp_vendor_id'] ?? 0 );
if ( ! $vendor_id || 'yes' !== get_user_meta( $vendor_id, '_premium_vendor', true ) ) {
return $rates;
}
foreach ( $rates as $rate ) {
$rate->set_cost( $rate->get_cost() * 0.80 );
}
return $rates;
}, 100, 2 );
Frete grátis em todos os pacotes pelo total do carrinho
Desfaz a regra por pacote: com o carrinho acima de R$ 200, todos os pacotes ganham o frete grátis configurado.
add_filter( 'woocommerce_shipping_free_shipping_is_available', function ( $available ) {
return ( WC()->cart && WC()->cart->get_subtotal() >= 200 ) ? true : $available;
}, 100 );
Mudou o custo? Os impostos do frete não são recalculados nesses exemplos. Se a loja cobra imposto sobre frete, ajuste set_taxes() também.
Mais filtros em Filtros dos métodos de envio e Estrutura do pacote.