Regras customizadas permitem adicionar campos extras de prazo na edição do produto, somando esses prazos ao cálculo total. Útil quando o prazo de produção depende de fatores que não cabem em um único campo — gravação, embalagem premium, montagem, finalização especial.
Quando usar
- O produto tem prazo base de produção, mas alguns clientes pedem gravação personalizada (+3 dias).
- Pedidos com embalagem premium levam +1 dia.
- Itens de móveis têm prazo de fabricação + prazo de finalização/pintura que varia por opção.
Em vez de gerenciar isso manualmente em cada produto, você cria as regras uma vez via filtro e cada produto pode ter campos individuais para cada uma.
Como definir as regras
Use o filtro wc_adpp_custom_rules para listar quais regras você quer.
add_filter( 'wc_adpp_custom_rules', function( $rules ) {
$rules['gravacao'] = array(
'label_append' => 'Gravação',
'description' => 'Dias adicionais para gravação personalizada',
);
$rules['embalagem_premium'] = array(
'label_append' => 'Embalagem Premium',
'description' => 'Dias adicionais para embalagem de luxo',
);
return $rules;
});
Cada chave do array (gravacao, embalagem_premium) é o ID interno da regra — usado nos metadados.
Cada regra precisa de:
label_append(string) — texto que aparece no campo na edição do produto. O label completo ficaDias adicionais: Gravação.description(string) — descrição que aparece abaixo do campo, ajudando o admin a entender o que preencher.
O que aparece na edição do produto
Depois de registrar as regras, abra a edição de qualquer produto na aba Envio. Você verá:
- Dias adicionais para entrega (campo padrão).
- Dias adicionais: Gravação (campo da regra
gravacao). - Dias adicionais: Embalagem Premium (campo da regra
embalagem_premium).
Cada campo aceita um inteiro a partir de 0. Os valores ficam salvos como metadados do produto:
_wc_additional_days_per_product(campo padrão)._wc_additional_days_per_product_gravacao(regragravacao)._wc_additional_days_per_product_embalagem_premium(regraembalagem_premium).
Como somar as regras ao cálculo
Por padrão, as regras só criam os campos — não interferem no cálculo. Para somar os valores ao prazo total, use o filtro wc_adpp_additional_days_custom_rules.
add_filter( 'wc_adpp_additional_days_custom_rules', function( $extra_time, $product, $rules ) {
foreach ( $rules as $rule_id => $rule ) {
$rule_days = get_post_meta( $product->get_id(), '_wc_additional_days_per_product_' . $rule_id, true );
if ( $rule_days ) {
$extra_time += intval( $rule_days );
}
}
return $extra_time;
}, 10, 3 );
Esse exemplo soma todas as regras ao prazo. Você pode customizar a lógica:
add_filter( 'wc_adpp_additional_days_custom_rules', function( $extra_time, $product, $rules ) {
// somar só a regra "gravacao", e apenas se o produto for de uma categoria específica
if ( has_term( 'brindes', 'product_cat', $product->get_id() ) ) {
$gravacao = get_post_meta( $product->get_id(), '_wc_additional_days_per_product_gravacao', true );
if ( $gravacao ) {
return $extra_time + intval( $gravacao );
}
}
return $extra_time;
}, 10, 3 );
Combinação com cart item data
Em cenários mais sofisticados (ex: "o cliente escolhe se quer gravação no checkout"), você precisa armazenar a escolha no item do carrinho e usar isso no cálculo. Combine com o filtro wc_adpp_additional_days:
add_filter( 'wc_adpp_additional_days', function( $days, $product, $variation, $cart_item ) {
if ( ! is_array( $cart_item ) ) {
return $days;
}
if ( ! empty( $cart_item['gravacao_personalizada'] ) ) {
$gravacao = get_post_meta( $product->get_id(), '_wc_additional_days_per_product_gravacao', true );
return $days + intval( $gravacao );
}
return $days;
}, 10, 4 );
Detalhes do filtro em Filtros disponíveis.
Limitações
- O campo de regra customizada não tem validação adicional — qualquer string é aceita e salva como inteiro via
intval(). - As regras não são herdadas de produto pai para variação — você precisa preencher cada variação separadamente, ou implementar essa lógica no filtro de cálculo.
- O Dokan não expõe os campos de regra customizada no painel do vendedor.