【WordPress】管理者にのみ管理バーを表示する方法|個人のツールバー設定を尊重する実装

WordPressサイトの管理バー(ツールバー)を、管理者にのみ表示する方法を解説します。単純に「管理者かどうか」だけで判定する方法と、管理者本人のプロフィール設定(ツールバー表示のON/OFF)も尊重する方法の2通りを紹介します。

この記事でわかること

  • 管理者にのみ管理バーを表示する完全なコード
  • 個人のツールバー表示設定を尊重する理由と実装
  • current_user_can('administrator') より推奨される書き方
スポンサーリンク

管理者にのみ管理バーを表示する(完全なコード)

テーマの functions.php に以下のコードを追加します。show_admin_bar フィルターに、管理バーを表示するかどうかを判定する関数を登録します。

functions.php:管理者かつ個人設定がONの場合のみ管理バーを表示
function my_show_admin_bar() {
    $result = false;

    // 現在のユーザーが「administrator」権限を持っているかどうかを確認
    if ( current_user_can( 'administrator' ) ) {
        $user_id = get_current_user_id();

        // ユーザー本人のツールバー表示設定を取得('true' または 'false' の文字列で保存されている)
        $show_admin_bar = get_user_meta( $user_id, 'show_admin_bar_front', true );

        // 管理バー表示設定が明示的に'false'でない場合のみ表示する
        if ( $show_admin_bar !== 'false' ) {
            $result = true;
        }
    }

    return $result;
}
add_filter( 'show_admin_bar', 'my_show_admin_bar' );

なぜ個人のツールバー設定も確認するのか

current_user_can()だけの判定では個人設定を上書きしてしまう
add_filter('show_admin_bar', function () { return current_user_can('administrator'); }); のようなシンプルな1行だけの実装もよく紹介されますが、この場合管理者本人がプロフィール画面で「ツールバーを表示する」のチェックを外していても、強制的に表示されてしまいますget_user_meta()show_admin_bar_front をあわせて確認することで、「管理者には表示する。ただし本人が個別にOFFにしていればそれを優先する」という、より丁寧な制御ができます。個人設定を気にせず一律で管理者に強制表示したいだけなら、シンプルな1行版でも構いません。

current_user_can(‘administrator’)よりmanage_optionsが推奨される理由

ロール名でなく権限(Capability)で判定するのがWP推奨
current_user_can('administrator') のようにロール名を直接指定する書き方は動作はしますが、WordPressの開発者向けドキュメントでは、current_user_can('manage_options') のように具体的な権限(Capability)で判定することが推奨されています。ロール名は将来的にカスタムロールへ変更・追加される可能性があり、権限ベースの判定の方が「管理者相当の操作ができるかどうか」をより正確かつ柔軟に表現できるためです。manage_optionsは既定でadministratorロールのみが持つ権限のため、既定のサイト構成であればadministrator指定と同じ結果になります。

関連する管理バーのカスタマイズ

自分だけ非表示にしたい・全員非表示にしたいなど、他のパターンについてはサイト上部のツールバー(管理バー)を非表示にする方法(全員・管理者以外・ユーザー別)で解説しています。個人設定を気にしないシンプルな「管理者以外だけ非表示」の1行実装もこちらで紹介しています。

よくある質問(FAQ)

Q特定のユーザーロールにだけ管理バーを表示する方法は?
Acurrent_user_can()でチェックするロールを変更します。例えばcurrent_user_can('editor')にするとエディター以上に表示、そうでなければ非表示になります。
Qログインしていないユーザーに管理バーが表示される場合の対処法は?
A通常ゲストには管理バーは表示されませんが、show_admin_barフィルターが別のコードで上書きされている可能性があります。プラグインの影響も確認してください。is_user_logged_in()との組み合わせで確実に制御できます。
Q個人設定を無視して管理者に強制表示したいだけの場合は?
Aadd_filter('show_admin_bar', function () { return current_user_can('manage_options'); }); のようなシンプルな1行で十分です。個人のツールバー表示設定を考慮する必要が無い場合はこちらで構いません。

まとめ

  • 基本show_admin_barフィルターに管理者判定の関数を登録する
  • 丁寧にshow_admin_bar_frontで個人のツールバー設定も尊重する
  • 推奨:ロール名でなくmanage_options等の権限で判定する

個人設定を尊重したいかどうかで、今回のコードとシンプルな1行版を使い分けてください。