2020年04月10日

WordPressで管理者以外のアカウントを制限する方法

WordPressで管理者以外のアカウントを制限する方法

お世話になっております。SeekNextの佐藤です。
今回は「WordPressで管理者以外のアカウントを制限する方法」について解説していきたいと思います。

管理画面のアクセスを管理者以外は制限する方法

これにはWordPressで用意されているアクションフック「admin init」を使用することで簡単に実装することが可能です。

方法1(エラーメッセージを表示させ、処理を止める)

function restrict_admin() {
  if ( ! current_user_can( 'manage_options' ) && ( ! defined('DOING_AJAX' ) || ! DOING_AJAX ) ) {
    wp_die( __( 'You are not allowed to access this part of the site' ) );
  }
}
add_action( 'admin_init', 'restrict_admin', 1 );

これによって管理画面にアクセスした際に管理者アカウント以外なら「You are not allowed to access this part of the site」というメッセージを表示させ、処理を停止させます。

方法2(リダイレクトさせ、処理を止める)

function restrict_admin_with_redirect() {
  if ( ! current_user_can( 'manage_options' ) && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {
    wp_redirect( site_url() ); 
    exit;
  }
}
add_action( 'admin_init', 'restrict_admin_with_redirect', 1 );

上記のコードを実行すれば、任意のURLにリダイレクトさせることが可能です。
(wp_redirect( site_url() );)の部分の任意のURLを設定します。

注意すべき点

どちらのコードも「DOING_AJAX」の記述があると思いますが、これがないとプラグインによっては正常に動かなくなることもありますので、必ず記載してください。

応用編

「current_user_can( ‘manage_options’ )」の部分を変更することによって、管理者以外も設定することが可能です。「manage_options」の部分にはユーザーIDを指定することも可能なので、柔軟に設定することが可能です。便利な関数なので是非ご利用ください。

実際の使用例

これを重宝したのは以下のような条件の案件でした。

  • WordPressで会員サイトを制作。
  • セキュリティを強化したい。
  • 固定のIPアドレスが存在しない。
  • パスワード再設定画面を使用したい。

本来であれば「.htaccess」にて管理画面のセキュリティを高めることが最善ですが、「/wp-admin/」のファイルに制限をかけてしまうと「wp-login.php」まで制限がかかってしまい「パスワード再設定画面を使用したい。」の要望を実現出来ませんでした。もし、「wp-login.php」だけを外して「/wp-admin/」だけに制限をかける方法がわかる方がいらっしゃいましたらコメントにてご教授頂きたいのですが、複雑にコードが絡み合っているので、上記の方法にて対応致しました。

WordPressは便利なツールですが、セキュリティには細心の注意を払わないといけませんので、是非この際にセキュリティを強化してみて下さい。