O problema é que os filtros no WordPress são globais; se você adicionar um filtro em algum lugar, ele persistirá em todos os lugares, a menos que você o remova.
Considere também que você deve preferir composição sobre herança , e se sua estrutura de aplicativo atual já é construída sobre herança, e você não pode ou não quer mudá-lo, você deve evitar pelo menos usar filtros para coisas que não são globais.
Ao separar a lógica que retorna dados da lógica que a filtra, tudo fica muito mais fácil:
class A {
function get_things() {
return array( 'coffee', 'tea' );
}
function show_things() {
return apply_filter( 'yet_another_filter', $this->get_things() );
}
}
class B extends A {
function get_things() {
return array( 'crisps', 'beer' );
}
}
class C extends A {
}
Como você pode imaginar:
$a = new A;
$b = new B;
$c = new C;
$a->show_things(); // array( 'coffee', 'tea' )
$b->show_things(); // array( 'crisps', 'beer' )
$c->show_things(); // array( 'coffee', 'tea' )
Todos os resultados passam pelo filtro "yet_another_filter"
, permitindo que o código externo sobrescreva os resultados em todos os casos, para o que um filtro é destinado.