A função remove_class_hook() é um helper PHP que o plugin disponibiliza pra remover hooks adicionados via método de classe. Usada em situações onde o remove_filter() / remove_action() padrão do WordPress não consegue desligar o hook porque a referência pra closure ou método de classe não é direta.
Quando usar
Em casos específicos onde:
- Outro plugin adicionou um hook usando
add_filter( 'meu_hook', array( $instancia, 'metodo' ) )— e você não tem acesso fácil à$instancia. - Você quer remover esse hook sem precisar reinstanciar a classe nem mudar o plugin terceiro.
O Frete para Marketplace usa internamente pra desativar hooks conflitantes do YITH e WCFM.
Assinatura
remove_class_hook( $tag, $class_name = '', $method_name = '', $priority = 10 );
| Parâmetro | Tipo | Descrição |
|---|---|---|
$tag |
string |
Nome do hook (ex: 'woocommerce_cart_shipping_packages'). |
$class_name |
string |
Nome completo da classe que registrou o hook. |
$method_name |
string |
Nome do método da classe. |
$priority |
int |
Prioridade do hook registrado (default 10). |
Retorno: bool — true se conseguiu remover, false caso contrário.
Definida em: /includes/core-functions.php.
Como funciona internamente
A função inspeciona o array global $wp_filter[ $tag ] na prioridade indicada, procura uma callback que seja um método da classe nomeada e remove. É o mesmo que o WordPress faz internamente pra remove_filter(), mas usando reflexão pra contornar a falta da referência exata da instância.
Exemplo 1 — desativar hook conflitante
Plugin terceiro adiciona um filter no woocommerce_cart_shipping_packages que conflita com o split:
remove_class_hook(
'woocommerce_cart_shipping_packages',
'Plugin_Terceiro_Class',
'modify_packages',
10
);
Coloque em functions.php do tema ou em mu-plugin, depois do plugins_loaded (pra garantir que a classe já existe).
add_action( 'plugins_loaded', function() {
remove_class_hook(
'woocommerce_cart_shipping_packages',
'Plugin_Terceiro_Class',
'modify_packages',
10
);
}, 99 );
Exemplo 2 — desativar integração nativa
Você quer rodar a sua própria integração com Correios sem que o Frete para Marketplace interfira (caso muito específico):
add_action( 'plugins_loaded', function() {
remove_class_hook(
'woocommerce_correios_origin_postcode',
'WC_Split_Shipping_Correios',
'filter_vendor_postcode',
100
);
}, 99 );
Desativar a integração nativa do plugin com Correios significa que o frete passa a usar o CEP da loja matriz, não do vendedor — quebra o split. Use só se você está montando um substituto custom.
Quando NÃO usar
- Pra hooks adicionados como closure anônima (
add_filter( 'tag', function() { ... } )). Closures não são removíveis sem a referência exata, e o helper não resolve isso. - Pra hooks adicionados por funções globais (
add_filter( 'tag', 'minha_funcao' )). Useremove_filter( 'tag', 'minha_funcao', $priority )direto. - Pra hooks da sua própria classe quando você tem acesso à instância. Use
remove_filter( 'tag', array( $this, 'metodo' ), $priority )direto.
Filtros e funções relacionadas
- Filtros de comportamento por marketplace — preferíveis quando o objetivo é desativar comportamentos do próprio plugin (mais limpo que
remove_class_hook). remove_filter()/remove_action()— APIs nativas do WordPress, prefira sempre que possível.