プラグイン無しでWordPressのページで権限別に管理バーを表示させる方法

管理バーの表示のイラスト

管理バーは、管理画面からログインすることで、各ページの最上部に黒い帯のような形状で表示されadminバーとも呼びます。

この管理バーは、WordPressのデフォルトのテーマや、有料で配布されているテーマの場合は管理バーが上部に表示されている場合がほとんですが、自作のテーマの場合、自分で設定しなければ管理バーは表示されません。

管理バーのキャプチャ

今回は、WordPressのページで権限別に管理バーを表示させる方法についてご紹介します。

wp_headとwp_footerを記述する

そもそもですが、wp_headとwp_footerが記述されていないと、管理バーが表示されません。

これは管理バーに関わらず、WordPress全体に影響するコードなので記述しましょう。

wp_head()は</head>タグの直前に記述し、wp_footer()は</body>タグの直前に記述されているか確認しましょう。

php

<?php wp_head() ?>
</head>
 
--------省略--------
 
<?php wp_footer() ?>
</body>

管理画面のプロフィールから設定

管理画面のメニューの ユーザー>あなたのプロフィールのページにある、ツールバーの項目サイトを見るときにツールバーを表示するにチェックを入れましょう。

管理画面のプロフィール設定

functions.phpにフィルターを追加する

wp_headとwp_footerの記述と、プロフィールの設定が完了したらfunctions.phpへ以下を追加することで、管理者・編集者・投稿者・寄稿者に管理バーが表示できます。

functions.php

//管理バー表示
add_filter( 'show_admin_bar', 'set_adminbar' );
 
function set_adminbar( $adminbar ) {
 $adminbar  = true; /* true:表示 false:非表示 */
 return $adminbar;
}
if (! current_user_can('edit_posts')){
    show_admin_bar(false);
}

注意
functions.phpをいじる場合、ftpで必ずバックアップを取ってから行い、テーマ本体ではなく子テーマの方に関数をコピペするようにしましょう。

管理者権限によって管理バーの表示・非表示を分ける

上記functions.phpの下3行目

if (! current_user_can('edit_posts')){
    show_admin_bar(false);
}

の部分を以下のそれぞれに変更して記述することで、管理者のみに管理バーを表示させたり、管理者・編集者のみに表示させたりすることができます。

管理者のみ管理バー表示

functions.php

//管理バー表示
add_filter( 'show_admin_bar', 'set_adminbar' );
 
function set_adminbar( $adminbar ) {
 $adminbar  = true; /* true:表示 false:非表示 */
 return $adminbar;
}
if (! current_user_can('delete_users')){
    show_admin_bar(false);
}

管理者・編集者で管理バー表示

functions.php

//管理バー表示
add_filter( 'show_admin_bar', 'set_adminbar' );
 
function set_adminbar( $adminbar ) {
 $adminbar  = true; /* true:表示 false:非表示 */
 return $adminbar;
}
if (! current_user_can('delete_private_posts')){
    show_admin_bar(false);
}

管理者・編集者・投稿者で管理バー表示

functions.php

//管理バー表示
add_filter( 'show_admin_bar', 'set_adminbar' );
 
function set_adminbar( $adminbar ) {
 $adminbar  = true; /* true:表示 false:非表示 */
 return $adminbar;
}
if (! current_user_can('publish_posts')){
    show_admin_bar(false);
}

管理バーとヘッダーが重ならないようにする方法

管理バーのheightは32pxなので、ヘッダーをその高さの分だけ下げればよいので、margin-top: 32px;を指定します。

ただし、それだけだとWordPressにログインしていない一般ユーザーの方がサイトを見た時にヘッダーの上に不自然な隙間が開いてしまいます。

そこで、WordPressにログインしている時にのみCSSが挿入されるようなコードを使用します。

具体的には、下記のコードをhead区間に挿入しましょう。

functions.php

<?php if( is_user_logged_in() ) : ?>
<style type="text/css">
.header {
  margin-top: 32px;
}
</style>
<?php endif; ?>

.headerはヘッダーを指定するセレクタなので、各自のサイトで指定しているclassに変更しましょう。

管理バーを完全非表示

管理バーを非表示にしたいユーザーが、ユーザー>あなたのプロフィール のチェックを外すことで管理バーの非表示が可能ですが、そのような設定をすることなく管理バーを完全非表示にもできます。

その場合、functions.php に以下の一文を記述しましょう。

functions.php

add_filter( 'show_admin_bar', '__return_false' );

これだけで、管理バーが完全非表示になりますが、プロフィール画面には表示非表示のチェック項目が残ってしまいので、同じくfunctions.php に以下の一文を追加して、プロフィール画面の項目も非表示にしましょう。

functions.php

add_action('admin_print_styles-profile.php', 'disable_admin_bar_prefs');
function disable_admin_bar_prefs(){ ?>
  <style type="text/css">
    .show-admin-bar {display:none;}
  </style><?php
}