我有一个评审插件,它覆盖了特定后类型中的注释表单。现在我试着把评论和评论分开。
我的第一步是删除修改当前评论模板的过滤器,并在第二个评论表单中使用该过滤器
插件使用此代码(简化)
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
如果有人能让我朝着正确的方向解决这个问题,那将对我有很大帮助。
我认为你可以实现这个目标,根据这个插件实例化类的方式,使用以下解决方案之一:
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'));
}
希望它能帮助你,如果你被卡住了,请告诉我。
对我来说,remove_filter在function.php中不起作用。我想删除插件的特定行为,所以我做了什么:
add_action( 'init', 'remove_filters' );
function remove_filters(){
global $wp_filter;
unset( $wp_filter["_filter_name"]);
}
试试这个:
$instance = DM_Reviews::this();
remove_filter('comment_form_defaults', array( $instance, 'reviews_form'));