この記事は最後に更新してから1年以上経過しています。
説明
購読者(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関数を使ってツールバーを非表示にしていることになる。
購読者から管理者ページへのアクセスをブロックする方法は、まあこんな感じでいいのかな。
最終更新 : 2013年11月12日 14:31
関連
お勧め
get_next_image_link(2021年7月25日 更新)
wp_after_insert_post(2020年12月11日 更新)
wp_save_post_revision(2024年1月10日 更新)
wp_debug_backtrace_summary(2012年6月15日 更新)
nocache_headers(2018年5月27日 更新)