FernandoAcosta.Netdocs

Helper remove_class_hook()

2 min de leituraAtualizado há 5 dias

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:

  1. Outro plugin adicionou um hook usando add_filter( 'meu_hook', array( $instancia, 'metodo' ) ) — e você não tem acesso fácil à $instancia.
  2. 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: booltrue 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 );
Você quase nunca quer fazer isso

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' )). Use remove_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.
Foi útil?