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 );
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.
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.