2017-09-11 186 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