删除插件的过滤器

时间:2016-04-28 10:19:33

标签: php wordpress filter

我有一个评论插件,它会覆盖特定帖子类型中的评论表单。 现在我试图分开评论和评论。

我的第一步是删除修改当前评论模板的过滤器,并在第二个评论表单中使用该过滤器。

该插件使用此代码(简化)

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

}

在我的孩子主题的function.php文件中,我尝试使用它,但它没有用。

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

WP Codex

如果有人可以让我朝着正确的方向解决问题,那将对我有所帮助。

3 个答案:

答案 0 :(得分:1)

我认为您可以使用以下解决方案之一来实现此目标,具体取决于此插件实例化类的方式:

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'));
}

希望它有所帮助,如果你遇到困难,请告诉我。

答案 1 :(得分:1)

对我来说,remove_filter在function.php中不起作用,我想删除插件的特定行为,所以我做了什么:

add_action( 'init', 'remove_filters' );

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

答案 2 :(得分:0)

试试这个:

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