remove・add_filter


Content Update Scheduler で更新用に作成した投稿は管理者は見ることができるが、編集者権限では見ることができない。*誰でも見ることができるように設定はできるが、それでは都合が悪いので、編集者権限の担当者が見られるようにしたい。

プラグインファイルを見ると、if(!current_user_can(‘administrator’)){ という箇所があり、ここを書き換えれば変更できるのだが、できればテーマ関数で上書きしたいので、オーバーライドについて調べてみた。

プラグインファイルはclass ContentUpdateScheduler { から始まり、最後にadd_action とadd_filter が並んでいて、ユーザー権限に関する部分はadd_filter になっているので、これをremove して、新たな関数で上書きすればよい、ということのようだ。

class My_ContentUpdateScheduler extends ContentUpdateScheduler {
	public static function user_restriction_scheduled_content()
	{
		global $post;
		if(!current_user_can('edit_pages')){
			$cus_sc_publish_pubdate = get_post_meta($post->ID, 'cus_sc_publish_pubdate', true);
			if(!empty($cus_sc_publish_pubdate)){
				global $wp_query;
				$wp_query->set_404();
				status_header(404);
				get_template_part(404); 
				//wp_redirect( esc_url(get_permalink($post->post_parent)) 
				exit();
			}
		}
	}
}
remove_filter( 'template_redirect', array( 'ContentUpdateScheduler', 'user_restriction_scheduled_content' ), 1, 3);
add_filter( 'template_redirect', array( 'My_ContentUpdateScheduler', 'user_restriction_scheduled_content' ), 10, 1);