2026年6月2日
2026年6月2日
WordPressで管理者以外が管理画面(wp-admin)に入れないようにする方法
会員登録を受け付けているサイトや、複数人で運用しているサイトでは、購読者などのユーザーがログイン後に管理画面(/wp-admin/)へ入れてしまいます。この記事では、管理者以外のユーザーが管理画面を開いたらトップページへ戻し、フロント側のツールバーも隠す方法を説明します。
コードと動作は、2026年11月時点の WordPress 7.1.3(PHP 8.3)で確かめています。
最初に: 「何ができるか」は権限グループで決まる
管理画面に入れることと、管理画面で何ができるかは別の話です。ユーザーが操作できる範囲は「権限グループ」(ロール)で決まり、管理画面を見えなくしても権限そのものは変わりません。まず権限グループが適切かを確認します。
| 権限グループ | 主にできること |
|---|---|
| 管理者 | すべての設定・プラグイン・ユーザーの管理 |
| 編集者 | 他人の投稿を含むすべての投稿・固定ページの公開と編集 |
| 投稿者 | 自分の投稿の公開と編集 |
| 寄稿者 | 自分の投稿の下書き作成(公開はできない) |
| 購読者 | 自分のプロフィールの編集のみ |
確認と変更は「ユーザー」→「ユーザー一覧」で行います。一覧の「権限グループ」列で確認し、変える場合はユーザーにチェックを入れて「権限グループを変更…」から選ぶか、ユーザーの編集画面の「権限グループ」で変更します。
WP-CLI を使う場合は次のとおりです。
# ユーザーと権限グループの一覧
wp user list --fields=ID,user_login,roles
# ユーザー sub1 を購読者にする
wp user set-role sub1 subscriber
管理者権限が必要ない人に「管理者」を付けていないかを、ここで見直しておきます。
方法1: 管理者以外を管理画面からトップページへ戻す(コード)
次のファイルを wp-content/mu-plugins/restrict-admin.php として保存します(mu-plugins フォルダーが無ければ作ります)。mu-plugins に置いた PHP ファイルは、有効化の操作なしで常に読み込まれます。テーマの functions.php に書いてもかまいませんが、その場合はテーマを変えると効かなくなります。
<?php
/**
* Plugin Name: 管理画面を管理者だけに制限する
* Description: 管理者以外が /wp-admin/ を開いたらトップページへ移動し、ツールバーも隠す。
*/
// 管理画面に入れる権限(管理者だけなら manage_options)
const MYSITE_ADMIN_CAP = 'manage_options';
add_action( 'admin_init', function () {
// Ajax(admin-ajax.php)と admin-post.php はフロント側の機能が使うので止めない
if ( wp_doing_ajax() || 'admin-post.php' === ( $GLOBALS['pagenow'] ?? '' ) ) {
return;
}
if ( ! current_user_can( MYSITE_ADMIN_CAP ) ) {
wp_safe_redirect( home_url( '/' ) );
exit;
}
} );
// 管理者以外にはフロント側のツールバー(管理バー)を表示しない
add_filter( 'show_admin_bar', function ( $show ) {
return current_user_can( MYSITE_ADMIN_CAP ) ? $show : false;
} );
コードのポイントは次のとおりです。
admin_initは管理画面の読み込み時に実行されるフックです。ここで権限を調べ、足りなければwp_safe_redirect()でトップページへ移動させます。admin-ajax.phpとadmin-post.phpにもadmin_initが実行されます。フロント側のフォームや「いいね」ボタンなど、プラグインやテーマがこれらを使っていることがあるため、除外しています。除外しないと、ログイン中のユーザーが使う機能が動かなくなることがあります。show_admin_barフィルターで、管理者以外にはフロント側の黒いツールバーを出しません。
動作の確認結果
検証環境で、購読者・編集者・管理者でログインして確かめた結果です。
| 開いたURL | 購読者 | 編集者 | 管理者 |
|---|---|---|---|
/wp-admin/ |
トップページへ移動 | トップページへ移動 | 表示される |
/wp-admin/profile.php |
トップページへ移動 | トップページへ移動 | 表示される |
/wp-admin/admin-ajax.php |
止めない(通常どおり応答) | 止めない | 止めない |
| フロントのツールバー | 表示なし | 表示なし | 表示 |
自分のサイトで試すときは、テスト用の購読者ユーザーを作り、別のブラウザーかプライベートウィンドウでログインして確かめます。
編集者や投稿者は管理画面に入れたい場合
記事を書くユーザーまで締め出すと、投稿の編集ができなくなります。購読者(や会員)だけを締め出したい場合は、1行目の権限を edit_posts に変えます。
const MYSITE_ADMIN_CAP = 'edit_posts';
edit_posts は寄稿者以上が持つ権限なので、寄稿者・投稿者・編集者・管理者は管理画面に入れ、購読者だけがトップページへ戻されます(検証環境で編集者が入れることを確認済み)。
締め出したユーザーへの配慮
- 購読者は管理画面のプロフィール画面でパスワードを変更できなくなります。ログイン画面の「パスワードをお忘れですか ?」からのパスワード再設定は引き続き使えるので、その案内をサイト内に置いておきます。
- 管理画面を見せないことは、権限を減らすことではありません。REST API など管理画面以外の経路でできることは、権限グループの権限で決まります。
方法2: IP アドレスで wp-admin を制限する(.htaccess)
社内や自宅など、決まった場所からしか管理しない場合は、Web サーバー側で /wp-admin/ へのアクセスを IP アドレスで制限する方法もあります。こちらはユーザーの権限に関係なく、許可していない IP アドレスからは管理者も入れなくなります。
Apache 2.4 の場合、wp-admin フォルダーに次の .htaccess を置きます(203.0.113.10 は自分の IP アドレスに置き換えます)。
# /wp-admin/.htaccess
# 管理画面は指定した IP アドレスからだけ開ける(Apache 2.4)
Require ip 203.0.113.10
# フロント側の機能が使うファイルはどこからでも開けるようにする
<FilesMatch "^(admin-ajax\.php|admin-post\.php)$">
Require all granted
</FilesMatch>
検証環境では、許可していない IP アドレスからの /wp-admin/ は 403、admin-ajax.php と admin-post.php は通常どおり応答することを確かめました。
注意点は次のとおりです。
Order deny,allow/Deny from allは Apache 2.2 の書き方です。Apache 2.4 ではRequireを使います。- ログイン画面の
wp-login.phpはサイトの直下にあるため、この設定では制限されません。 - CDN やロードバランサーを経由している場合、Apache から見える IP アドレスは訪問者のものではないことがあります。
- Nginx では
.htaccessは使えないため、サーバーの設定ファイルに書きます。 - 設定を間違えると管理者も入れなくなります。FTP やサーバーのファイルマネージャーで
.htaccessを消せば元に戻ります。
どちらを選ぶか
| 目的 | 向いている方法 |
|---|---|
| 会員・購読者に管理画面を見せたくない | 方法1(コード) |
| 管理する場所が決まっていて、外部からの管理画面アクセスを減らしたい | 方法2(IP 制限) |
| 両方 | 方法1と方法2を併用 |