購読者は管理者ページのアクセス禁止

購読者は管理者ページのアクセス禁止 - さりげなく管理者ページにアクセスさせない

説明

購読者(subscriber)は、通常「ダッシュボード」「プロフィール」にアクセスできるが、今回はプロフィールを独自に管理する準備を兼ねて、これらのページにアクセスできないようにブロックしてみた。

購読者を登録させた登録会員向けサイトの構築を考えた際、標準の動作を少し変更したくなる。1つは、標準のログインページからログインした場合、プロフィールページに遷移することである。これに対処するのは簡単で、次に示すようにredirect_toパラメータでログイン後のURLを指定すればいい。

http://localhost/wp-login.php?redirect_to=http%3A%2F%2Flocalhost%2F
管理者ページをアクセス禁止に

上記の対応でログイン直後にプロフィールページを表示することはなくなるが、URLを指定されればそのページは開いてしまう。購読者が絶対にアクセスできないようにする場合は、もう一工夫が必要である。

具体的には、テーマのfunctions.phpに次のコードを追加し、auth_redirectアクションを利用する。

add_action( 'auth_redirect', 'subscriber_go_to_home' );
function subscriber_go_to_home( $user_id ) {
	$user = get_userdata( $user_id );
	if ( !$user->has_cap( 'edit_posts' ) ) {
		wp_redirect( get_home_url() );
		exit();
	}
}

auth_redirectアクション関数の第1パラメータはログイン済みのユーザーIDとなり、ここではget_userdata関数でそのユーザー情報を取得。ユーザーが購読者か判別するため、edit_posts権限を持っている(投稿を編集できる)かを調べている。そして購読者の場合は、ホームURLへリダイレクトしている。ユーザー権限の詳細は、「LevelとCapability」を参照。

ツールバー(admin bar)を非表示に

購読者を含むログイン済みのユーザーがアクセスしたページでは、ツールバーが表示される。このツールバーにはダッシュボードやプロフィールページのリンクメニューがあり、上記の対応に合わせて非表示にしておきたい。ここで利用するのはafter_setup_themeアクション。テーマのfunctions.phpに次のコードを追加して対応する。

add_action( 'after_setup_theme', 'subscriber_hide_admin_bar' );
function subscriber_hide_admin_bar() {
	$user = wp_get_current_user();
	if ( isset( $user->data ) && !$user->has_cap( 'edit_posts' ) ) {
		show_admin_bar( false );
	}
}

ポイントは[ad]wp_get_current_user[/af]関数で、現在ログインしているユーザー情報を取得しているところ。アクセス者が未ログインの場合は、$user->data はnullになるので、ログイン済みかどうかはこれを利用して判別している。ログイン済みで購読者の場合は、show_admin_bar関数を使ってツールバーを非表示にしていることになる。

購読者から管理者ページへのアクセスをブロックする方法は、まあこんな感じでいいのかな。

関連

  • add_action - アクション関数を追加する
  • get_home_url - 任意のブログのホームURLを取得する
  • get_userdata - ユーザIDを指定し、マッチするユーザ情報を取得する
  • show_admin_bar - ツールバー(admin bar)を強制的に表示/非表示する
  • wp_get_current_user - 現在のユーザ情報を取得する
  • wp_redirect - 指定されたURLへリダイレクトする

お勧めコンテンツ

body_class(2011年2月18日 登録)

void body_class( [ string $class = '' ] )
bodyタグのclass属性を表示する。

bloginfo_rss(2014年4月1日 登録)

void bloginfo_rss( [ string $show = '' ] )
フィード向けのブログ情報を出力する。

nocache_headers(2010年5月13日 登録)

void nocache_headers( )
ブラウザのキャッシュを無効にするHTTPヘッダーを出力する。

wp_enqueue_script(2011年12月22日 登録)

void wp_enqueue_script( string $handle [ , string $src = false [ , array $deps = array() [ , string $ver = false [ , bool $in_footer = false ] ] ] ] )
スクリプト(JavaScript)の重複出力を回避するために、使用するスクリプトを出力用のキューに入れる。パラメータ$srcが指定された場合は、グローバル変数$wp_scriptsに登録してから出力用のキューに入れる。

wp_style_add_data(2013年8月10日 登録)

bool wp_style_add_data( string $handle, string $key, mixed $value )
スクリプト(CSSファイル)にメタ情報を追加する。

最終更新日時 : 2013-11-12 14:31