2017-09-11 2 views
1

を使用して、プラグインでフィルタ私は名前の「JobBoardパッケージ」次のようにプラグインの上部に呼び出されてワードプレス

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

をfeatures.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