Eliminar filtro de un plugin

2 minutos de lectura

Tengo un complemento de revisión que anula el formulario de comentarios en un tipo de publicación específico. Ahora estoy tratando de separar las críticas y los comentarios.

Mi primer paso es eliminar el filtro que modifica la plantilla de comentarios actual y usar ese filtro dentro de un segundo formulario de comentarios.

El complemento usa este código (simplificado)

final class DM_Reviews {

    public function hooks() {
        do_action_ref_array( 'dm_reviews_before_setup_actions', array( &$this ) );

        add_filter( 'comment_form_defaults', array( $this, 'reviews_form'       ) );        

        do_action_ref_array( 'dm_reviews_after_setup_actions', array( &$this ) );
    }

    public function review_form( $args ) {    

            $form = 'plugin code to modify form';   

        return wp_parse_args( $form, $args );
    }

}

En el archivo function.php de mi tema hijo, traté de usar esto pero no funcionó.

global $DM_Reviews;
remove_filter( 'comment_form_defaults', array($DM_Reviews, 'reviews_form'),1 );

Códice WP

Si alguien puede guiarme en la dirección correcta sobre cómo resolverlo, me ayudaría mucho.

Creo que puede lograr este objetivo utilizando una de las siguientes soluciones según la forma en que este complemento crea una instancia de la clase:

if( class_exists('DM_Reviews' ) ){
  //This should work in whatever case, not tested
  remove_filter('comment_form_defaults', array( 'DM_Reviews', 'reviews_form'));
  //or Instantiating a new instance, not tested
  remove_filter('comment_form_defaults', array( new DM_Reviews(), 'reviews_form'));
  //or Targeting the specific instance, not tested
  remove_filter('comment_form_defaults', array( DM_Reviews::get_instance(), 'reviews_form'));
}

Espero que te ayude, avísame si te quedas atascado.

  • @kiarashi, compruebe el nombre de la función: ¿”reviews_form” o “review_form”?

    – iEmanuele

    28/04/2016 a las 21:29


  • Gracias a ti, funcionó. :DI primero usé los tres, pero luego probé cada uno por separado. Y este funcionó: remove_filter('comment_form_defaults', array( EDD_Reviews::get_instance(), 'reviews_form'));

    – kiarashi

    28/04/2016 a las 22:15

para mí, remove_filter no funcionó desde function.php, quería eliminar un comportamiento específico de un complemento, así que lo que hice:

add_action( 'init', 'remove_filters' );

function remove_filters(){
    global $wp_filter;
    unset( $wp_filter["_filter_name"]);
}

Prueba esto :

$instance = DM_Reviews::this();
remove_filter('comment_form_defaults', array( $instance, 'reviews_form'));

  • Me temo que recibí un error al usarlo así. Fatal error: Call to undefined method DM_Reviews::this()

    – kiarashi

    28 de abril de 2016 a las 13:42

¿Ha sido útil esta solución?