【WordPress】ログインし直さずに「管理者じゃない人からどう見えるか」を確認する方法(WP-CLI)

権限の設定を直したので確認したいんですがー、非管理者アカウントでログインし直すのが地味に面倒でー。
そんな人向けの方法があります。

何がしたいのか

「管理者には全部見せるけど、それ以外の人には一部のメニューを隠す」のような、権限によって見え方が変わる場所を直したとき、本当に効いているかを確認したくなります。

一番確実なのは非管理者アカウントで実際にログインすることですが、ログアウト→ログイン→確認→また戻す、を毎回やるのは正直だるいです。サーバーにSSHでつなげる環境があるなら、WP-CLIでもっと手早く確認できます。

wp eval で「そのユーザーになりきる」

WP-CLIには wp eval という、任意のPHPコードをその場で実行できるコマンドがあります。これと wp_set_current_user() という関数を組み合わせます。

wp eval '
wp_set_current_user(3); // 3 は確認したいユーザーのID
echo wp_get_current_user()->user_login;
echo implode(",", wp_get_current_user()->roles);
'

wp_set_current_user() は「今アクセスしているのはこのユーザーですよ」とWordPressに教える関数です。ブラウザでログインしなくても、このコマンドを実行した瞬間だけ、そのユーザーになりきった状態でPHPが動きます。

ユーザーIDがわからない場合は、先に一覧を見ておきます。

wp user list --fields=ID,user_login,roles

実際の判定結果を確認する

なりきった状態のまま、確認したい権限判定をそのまま呼び出します。

wp eval '
wp_set_current_user(3);
var_dump( current_user_can("manage_options") ); // 管理者だけ true になるはず
var_dump( current_user_can("edit_posts") );      // 投稿者以上なら true
'

自分でテーマに書いた関数(権限判定をまとめた自作関数など)があれば、それも同じように呼び出して結果を見られます。

wp eval 'wp_set_current_user(3); var_dump( my_theme_is_site_admin() );'

「管理者アカウントで見たときは true、投稿者アカウントで見たときは false」が狙った通りになっていれば、権限判定そのものは正しく動いている、と確認できます。

これでわかること・わからないこと

ここまでで確認できるのは、「権限判定のロジックが正しい値を返しているか」です。

一方で、これだけでは確認できないこともあります。

  • 管理画面の見た目(メニューが実際に消えているか、レイアウトが崩れていないか)
  • JavaScriptが絡む挙動(ボタンの表示・非表示など)

これらは最終的に、そのアカウントで実際にブラウザからログインして目で見る必要があります。wp eval はあくまで「ロジックの部分だけを高速に確認する」ための手段で、見た目の確認を完全に代わりにするものではない、というのは覚えておくといいです。

とはいえ、コードを直すたびに毎回ログイン・ログアウトを繰り返すよりは、「まずコマンドでロジックを確認 → 最後に1回だけ目視確認」の順にすると、確認作業がかなり減ります。

さいごに(シリーズ最終回)

「WordPress最適化やってみた」、今回で4回になりました。

  1. 複数サイトの新着記事を更新順にまとめる
  2. サイト紹介バナーの作り方
  3. 本番サーバーに安全にファイルを上げる手順
  4. 非管理者からどう見えるかをログインせずに確認する方法

どれも派手な機能追加ではなく、「動いてはいるけど、ちゃんとは動いていない」ものを1つずつ直していく地味な作業でした。同じように地味な作業をしている人の、何かのヒントになれば嬉しいです。

なりきり、得意ですかー?
苦手です。だからコマンドに任せてますー
Author

デザコト

あ、いいな、と思うWebデザインを紹介しています。デザインの参考に。やさしいデザインが多いです。Webデザインギャラリー『デザインのこと - Web design gallery』を運営しています。