WordPressでプラグインを使わずにバックエンド(管理画面)へのアクセスを禁止する方法

WordPressでサイトを作る際にぜひやってみたい機能の1つが「会員制(登録制)サイト」の構築。会員専用のフォーラム(掲示板)を設置したり、会員しか見れないコンテンツを作ったり、会員しかダウンロードできないコンテンツを作ったりといろいろできることが広がりますね。

WordPressの4.6未満のバージョンではユーザー登録するにあたってフロントエンド(閲覧画面)に設置した登録フォームからユーザー登録すれば、ユーザー名とパスワードの入ったメールが送信されて登録完了!となっていましたが、4.6以降は一度メールを送信してパスワード変更画面にアクセスしてもらって更新することで登録が完了する「ダブルオプトイン」方式になりました。

これによっていわゆる捨てメールアドレスや架空のメールアドレスによる登録がしにくくなった一方で、バックエンドのログイン画面(厳密にはパスワード変更画面)へアクセスする必要が出てきました。そしてパスワード変更後は管理者が使うログイン画面が表示され、ログインするとユーザー編集画面が開くようになっているため、管理画面(バックエンド)へユーザーが間違って行ってしまわないための措置が必要になります。

何も対策をしていない場合、登録したユーザーへいきなりユーザー編集画面が表示されたらびっくりするでしょうし、故意にバックエンドへ入られてしまうと不都合が生じることがありますから、特定の権限以外のユーザーは絶対にバックエンドを表示しないという工夫が必要です。

措置としてはフロントエンドですべての作業を行ってもらうのが基本ですから

  1. 表示する権限のないユーザーは管理バーを非表示にする
  2. 表示する権限のないユーザーが管理画面の各ページを直接URL入力しても開かないようにする
  3. 表示する権限のないユーザーはログイン後にトップページへ飛ばす

ということが必要となります。

内容を簡単に説明すると、権限のないユーザーがログインしたときに3でトップページへ飛ばし、管理画面へ行けるようになる1を行います。そして、Wordpressのファイル構造を理解している人がURLを直接入力しても管理画面その他へ行けないように2を設定します。

この機能を備えたプラグインとして

Wordpressで会員制サイトを作った際に間違って、または故意に管理画面を表示させないことができないか?というのを実装できるのが、今回紹介する【Remove Dashboard Access】プラグインです

がありますが、もうこれ以上プラグインを増やしたくないという人も多いと思いますので、ここではテーマのfunctions.phpへ追記するだけで、プラグインが行っている機能を包括できるコードを3つ紹介します。

※テーマのfunctions.phpは重要なファイルなので、編集に失敗したり他のプラグインとの競合などにより不具合が生じたりして、最悪の場合画面が真っ白になって管理画面にも入れないという状況になることもありますから、編集を行う前にコードのチェックをしてくれるようになったWordpressのバージョン4.9以降に更新してから行うことをおすすめします

※同様の機能のプラグインを探すときは、Wordpressのバージョン4.9に対応していることを確認した上で、導入後に必ずテストをすることをおすすめします

※当サイトでもこのコードを使っており正常に機能していますが、環境によっては動作しない場合や不具合が生じる場合もありますから、適用後はいろいろな権限で実際に登録や管理をしてみるなど必ずテストを行ってください。

スポンサーリンク

表示する権限のないユーザーは管理バーを非表示にするコードと設定例

/******* 表示する権限のないユーザーは管理バーを非表示にする *******/
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( '「Capabilityを設定」' ) ) {
		show_admin_bar( false );
	}
}
許可される権限を限定するためのCapability例

権限レベルを判断するための機能を設定するための例です。コード内の「Capabilityを設定」という文字列を変更することで、実際に有効になる権限レベルを設定することができます

  1. 管理者だけ有効にする
  2. ‘switch_themes’

  3. 編集者・管理者だけ有効にする
  4. ‘edit_others_posts’

  5. 投稿者・編集者・管理者だけ有効にする
  6. ‘publish_posts’

  7. 寄稿者・投稿者・編集者・管理者だけ有効にする
  8. ‘edit_post’

表示する権限のないユーザーが管理画面のページを直接URL入力しても開かないようにするコードと設定例

/******* 表示する権限のないユーザーが管理画面のページを直接URL入力しても開かないようにする *******/
add_action( 'auth_redirect', 'subscriber_go_to_home' );
function subscriber_go_to_home( $user_id ) {
	$user = get_userdata( $user_id );
	if ( !$user->has_cap( '「Capabilityを設定」' ) ) {
		wp_redirect( get_home_url() );
		exit();
	}
}
許可される権限を限定するためのCapability例

権限レベルを判断するための機能を設定するための例です。コード内の「Capabilityを設定」という文字列を変更することで、実際に有効になる権限レベルを設定することができます

  1. 管理者だけ有効にする
  2. ‘switch_themes’

  3. 編集者・管理者だけ有効にする
  4. ‘edit_others_posts’

  5. 投稿者・編集者・管理者だけ有効にする
  6. ‘publish_posts’

  7. 寄稿者・投稿者・編集者・管理者だけ有効にする
  8. ‘edit_post’

表示する権限のないユーザーはログイン後にトップページへ飛ばすためのコードと設定例

/******* 管理者権限以外はログイン後にトップページへ飛ばす *******/
add_action( 'admin_init', 'disable_admin_pages' );
function disable_admin_pages() {
	if(!current_user_can('「権限名を設定」')){
		$redirect_url = get_option('home');
		header("Location: ".$redirect_url);
		exit;
	}
}
許可される権限を限定するための権限名

権限レベルを判断するための機能を設定するための例です。コード内の「権限名を設定」という文字列を変更することで、実際に有効になる権限レベルを設定することができます

  1. 管理者
  2. admimistrator

  3. 編集者・管理者
  4. editor

  5. 投稿者・編集者・管理者
  6. author

  7. 寄稿者・投稿者・編集者・管理者
  8. contributor

参考にさせていただいたサイト

今回の記事は以下の2つのページを参考にさせていただき、簡単にカスタマイズできるように再編集させていただきました

2018年1月20日「WordPress Popular Posts」の動作で不具合

このコードで実装したところ、私の環境では「WordPress Popular Posts」のアクセス数計測がストップしてしまいました。他のプラグインとの兼ね合いや環境などによるとは思いますが、「WordPress Popular Posts」だけに限らず導入後はチェックすることをおすすめします

Wordpressの本

Amazonの人気商品楽天市場の人気商品
CS Shop
WordPressによるウェブアプリケーション開発 [ Rakhitha Nimesh Ratnayake ]

WordPressによるウェブアプリケーション開発 [ Rakhitha Nimesh Ratnayake ]

4,104 円 (税込) 送料込
Rakhitha Nimesh Ratnayake プライム・ストラテジー オライリー・ジャパンワードプレスニヨルウェブアプリケーションカイハツ ラーキサ ニーメシュ ラーネヤク プライム ストラテジー 発行年月:2014年11月26日 予約締切日:2014年11月25日 ページ数:364p サイズ:単行本 I..
【中古】WordPressレッスンブック ステップバイステップ形式でマスタ-できる /ソシム/エ・ビスコム・テック・ラボ (単行本)

【中古】WordPressレッスンブック ステップバイステップ形式でマスタ-できる /ソシム/エ・ビスコム・テック・ラボ (単行本)

351 円 (税込) 送料込
◆◆◆ディスク有。中古商品のためキズ、日焼け、使用感等ある場合が御座いますが概ね良好な状態になります。迅速・丁寧な発送を心がけております。【毎日発送】商品状態著者名:エ・ビスコム・テック・ラボ発行者:ソシム発売日2010年09月
楽天ウェブサービスセンター CS Shop
トップへ戻る