2017-09-11 185 views
1

的插件,过滤器我有一个WordPress的后续过滤器插件名为“JobBoard包”重写使用WordPress

 function apply_job_validate($validate){ 
     $package = jb_package_get_current_package(); 

     if(!$package){ 
      jb_notice_add(esc_html__('You need to purchase a package before applying job.', 'jobboard-package'), 'error'); 
      return true; 
     } 

     $applied = JB()->candidate->count_applied_all(); 
     $limit = get_post_meta($package->ID, '_apply', true); 
     if($applied >= $limit){ 
      jb_notice_add(esc_html__('Apply job limited, you can update your package.', 'jobboard-package'), 'error'); 
      return true; 
     } 
     return $validate; 
    } 

在插件的顶部被称为如下:

private function actions(){ 
     add_action('wp_enqueue_scripts', array($this, 'add_scripts')); 
     add_action('admin_menu', array ($this, 'get_menu_notice') , 100); 
     add_action('admin_enqueue_scripts', array($this, 'add_admin_scripts')); 
     add_action('save_post_jobboard-post-jobs', array($this, 'save_post')); 

     add_filter('jobboard_query_endpoint_args', array($this, 'add_endpoint')); 
     add_filter('jobboard_query_endpoint_package_title', array($this, 'add_endpoint_package_title')); 
     add_filter('jobboard_query_endpoint_transactions_title', array($this, 'add_endpoint_transactions_title')); 
     add_filter('jobboard_employer_navigation_args', array($this, 'add_endpoint_menu')); 
     add_filter('jobboard_candidate_navigation_args', array($this, 'add_endpoint_menu')); 

     add_action('jobboard_endpoint_employer_new', array($this, 'get_template_add_new'), 0); 
     add_action('jobboard_endpoint_employer_package', array($this, 'get_template_package')); 
     add_action('jobboard_endpoint_candidate_package', array($this, 'get_template_package')); 

     add_filter('jobboard_form_handler_validate_add_job', array($this, 'add_new_job_validate')); 
     add_filter('jobboard_form_handler_validate_apply_job', array($this, 'apply_job_validate')); 
    } 

我已经尝试通过functions.php禁用apply_job_validate,并且使用下面的代码及其变体没有运气的插件作为插件,真的很感谢一些帮助。

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

我也试了一下,如下所示:

function remove_package() { 
    if (class_exists('JB_Package')) { 
    remove_filter('jobboard_form_handler_validate_apply_job', array('JB_Package', 'apply_job_validate')); 
    } 
} 
add_action('plugins_loaded','remove_package'); 

任何帮助,将不胜感激。非常感谢!

回答

1

您应该使用后面的动作钩子,如after_setup_theme。您正在关注plugins_loaded,这是在您的functions.php文件被解析之前触发的。尝试:

function remove_package() { 
    if (class_exists('JB_Package')) { 
    remove_filter('jobboard_form_handler_validate_apply_job', array('JB_Package', 'apply_job_validate')); 
    } 
} 
add_action('after_setup_theme','remove_package'); 

但是,你应该检查时看到“JB_Package”类是挂钩(如果它钩住在所有)。如果它的吸引力是init,那么你需要挂钩到像wp_loaded之类的东西。

//if class 'JB_Package' is hooked at 'init' 
add_action('wp_loaded','remove_package'); 
+0

谢谢,这工作。你有任何关于如何检查课程是否被吸引的建议?我还是个新人,但明白这是更好的做事方式。 – Cozmoz

+0

它与wp_loaded一起使用时仍然有效。 – Cozmoz

+0

我尝试删除更多,如下所示,但它似乎并没有为其他工作https://anotepad.com/notes/csi3as – Cozmoz