2016-04-28 2 views
4

У меня есть плагин для обзора, который переопределяет форму комментария в определенном posttype. Теперь я пытаюсь отделить отзывы и комментарии.Удалить фильтр плагина

Мой первый шаг - удалить фильтр, который изменяет текущий шаблон комментария и использовать этот фильтр во второй форме комментария.

Плагин использует этот код (упрощенный)

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

Если кто-то может поставить меня в правильном направлении, о том, как решить эту проблему, это помогло бы мне много.

ответ

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

Надеется, что это помогает, пусть я знаю, если ты застрял.

+0

Пробовал, но это тоже не сработало. :( – kiarashi

+0

@kiarashi pls проверить имя функции: «reviews_form» или «review_form»? – iEmanuele

+0

Спасибо вам, это сработало.: DI сначала использовал все три, но потом я пробовал каждую из них отдельно. И этот работал : 'remove_filter ('comment_form_defaults', array (EDD_Reviews :: get_instance(), 'reviews_form'));' – kiarashi

0

Попробуйте это:

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

Боюсь, что я получил ошибку при ее использовании. 'Fatal error: Call to undefined method DM_Reviews :: this()' – kiarashi

Смежные вопросы