【问题标题】:Remove filter of a plugin删除插件的过滤器
【发布时间】:2016-08-23 01:02:50
【问题描述】:

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

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

插件使用此代码(简化)

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

如果有人可以让我找到正确的解决方法,那将对我有很大帮助。

【问题讨论】:

    标签: php wordpress filter


    【解决方案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'));
    }
    

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

    【讨论】:

    • @kiarashi 请检查函数名称:“reviews_form”还是“review_form”?
    • 感谢您,它成功了。 :D 我首先使用了所有三个,但后来我分别尝试了它们中的每一个。而这个工作:remove_filter('comment_form_defaults', array( EDD_Reviews::get_instance(), 'reviews_form'));
    【解决方案2】:

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

    add_action( 'init', 'remove_filters' );
    
    function remove_filters(){
        global $wp_filter;
        unset( $wp_filter["_filter_name"]);
    }
    

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

      • 我恐怕在这样使用它时收到错误消息。 Fatal error: Call to undefined method DM_Reviews::this()
      猜你喜欢
      • 1970-01-01
      • 2013-11-08
      • 2016-05-09
      • 1970-01-01
      • 2016-01-21
      • 2020-03-24
      • 1970-01-01
      • 2015-02-20
      • 2022-03-06
      相关资源
      最近更新 更多