FernandoAcosta.Netdocs

Regras customizadas

2 min de leituraAtualizado há 5 dias

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 fica Dias 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 (regra gravacao).
  • _wc_additional_days_per_product_embalagem_premium (regra embalagem_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.
Foi útil?