FernandoAcosta.Netdocs

Personalizando o plugin

2 min de leituraAtualizado há 5 dias

Esta página reúne snippets prontos pros casos mais comuns de extensão do plugin. Os snippets vão num plugin de código customizado ou no functions.php do tema filho.

A referência seca de hooks, filtros e meta data está em Hooks e filtros.

Não reduzir estoque pra clientes VIP

Cenário: você tem um grupo de clientes que sempre paga (ex: contas B2B em conta-corrente) e prefere não bloquear estoque pra eles enquanto o pagamento processa.

add_filter( 'woocommerce_can_reduce_order_stock', function( $can_reduce, $order ) {
    $customer_id = $order->get_customer_id();
    if ( ! $customer_id ) {
        return $can_reduce;
    }

    $customer = new WC_Customer( $customer_id );
    if ( 'yes' === $customer->get_meta( 'is_b2b_account' ) ) {
        return false;
    }

    return $can_reduce;
}, 10, 2 );

Não restaurar estoque ao cancelar (mantém estoque baixo)

Cenário: cancelamento manual de pedidos suspeitos onde você não quer que o estoque volte (ex: prevenção de fraude que vai investigar antes).

add_filter( 'wc_stock_manager_restore_on_cancelled', function( $restore ) use ( $order_id_to_block ) {
    return false;
}, 10 );

Use com moderação — esse filtro vale pra todos os cancelamentos, então combine com lógica condicional pra alvejar apenas os pedidos que importam.

Mensagem customizada de estoque insuficiente

Cenário: a validação no pagamento bloqueou a compra e você quer um texto que oriente o cliente.

add_filter( 'wcsrm_not_enough_stock_message', function( $message, $product, $item, $order ) {
    return sprintf(
        'Ops! O produto "%s" não está mais disponível na quantidade que você pediu (%d unidade(s)). Entre em contato com a loja pelo WhatsApp pra ajustarmos o pedido.',
        $product->get_name(),
        $item->get_quantity()
    );
}, 10, 4 );

Logar restaurações em arquivo próprio

Cenário: você quer rastrear o histórico de restaurações sem misturar com o log padrão do plugin.

add_action( 'woocommerce_restore_order_stock', function( $order ) {
    $log_line = sprintf(
        '[%s] Estoque restaurado manualmente para pedido #%d (status: %s)',
        current_time( 'mysql' ),
        $order->get_id(),
        $order->get_status()
    );
    error_log( $log_line . PHP_EOL, 3, WP_CONTENT_DIR . '/restauracoes-estoque.log' );
}, 10, 1 );

Bloquear cancelamento de pedidos de um gateway específico

Cenário: você quer manter os pedidos de um gateway específico (ex: pagamento manual em conta) intocados pelo cancelamento por dias.

add_action( 'wc_stock_manager_cancel_orders_execute', function( $order_ids ) {
    foreach ( $order_ids as $key => $order_id ) {
        $order = wc_get_order( $order_id );
        if ( $order && 'bacs' === $order->get_payment_method() ) {
            unset( $order_ids[ $key ] );
        }
    }
    // Importante: este hook é chamado, mas o cancelamento já foi disparado
    // pelo plugin antes desse hook. Use o filtro abaixo se você precisa
    // interromper *antes*.
}, 5, 1 );
Cancelamento por dias é difícil de "des-disparar"

O hook wc_stock_manager_cancel_orders_execute roda junto com a execução do cancelamento. Se você precisa de uma blacklist de gateways, prefira deixar esses gateways com a opção Status para cancelar vazia (ou retornar false no woocommerce_can_reduce_order_stock desde o início, evitando que o pedido entre no fluxo).

Forçar a re-migração de horas pra minutos

Cenário (raro): você precisa rerodar a conversão automática que aconteceu na v2.0.0. Apague o option e visite o admin novamente.

delete_option( 'wc_stock_reduce_migrate_from_hours_to_minutes' );
// Próximo carregamento do admin executa a migração de novo.
Esse snippet multiplica os valores por 60 outra vez

Se você rodar a migração duas vezes, valores que já estão em minutos viram "minutos × 60". Só apague o option se tiver certeza de que os valores atuais estão em horas.

Foi útil?