2026年7月19日

2026年7月19日

WordPressの管理バーが表示されない問題を解決する方法

はじめに

WordPressにログインしているにもかかわらずサイトのフロントエンドに管理バー(上部の黒いツールバー)が表示されない・プロフィール設定で「サイトを見るときにツールバーを表示する」をオンにしているのに効かない・テーマをカスタムテーマに変更したら管理バーが出なくなった・管理者ユーザーでは表示されるが編集者ユーザーでは表示されないといった問題は、テーマのwp_body_open()呼び出し忘れ・show_admin_bar(false)の誤設定・CSSによる非表示が原因です。

症状・原因

  • カスタムテーマのheader.phpwp_head()の呼び出しがなく管理バーのCSSが読み込まれない
  • functions.phpまたはプラグインがadd_filter('show_admin_bar', '__return_false')を設定している
  • テーマがタグの直後にwp_body_open()を呼んでおらず管理バーのDOMが挿入されない
  • カスタムCSSで#wpadminbar { display: none; }が設定されている

解決手順

ステップ1:管理バーが非表示になっている原因を診断する

# WP-CLIで管理バーの設定を確認
wp eval "
// ログインユーザーの管理バー設定
\$user = wp_get_current_user();
echo 'Current user: '       . (\$user->ID ? \$user->user_login : 'not logged in') . PHP_EOL;
echo 'show_admin_bar: '     . (is_admin_bar_showing() ? 'true' : 'false') . PHP_EOL;

// ユーザープロフィールの設定確認
if (\$user->ID) {
    \$show_bar = get_user_meta(\$user->ID, 'show_admin_bar_front', true);
    echo 'User preference: '  . (\$show_bar === 'true' ? 'show' : (\$show_bar === 'false' ? 'hide' : 'not set')) . PHP_EOL;
}

// フィルターで無効化されているか確認
\$enabled = apply_filters('show_admin_bar', true);
echo 'After filter: ' . (\$enabled ? 'true' : 'false') . PHP_EOL;
"

# テーマに必要な関数呼び出しが含まれているか確認
wp eval "
\$theme_dir = get_template_directory();
\$header_file = \$theme_dir . '/header.php';
if (file_exists(\$header_file)) {
    \$content = file_get_contents(\$header_file);
    echo 'wp_head(): '        . (str_contains(\$content, 'wp_head()')        ? 'found' : 'MISSING') . PHP_EOL;
    echo 'wp_body_open(): '   . (str_contains(\$content, 'wp_body_open()')   ? 'found' : 'MISSING') . PHP_EOL;
    echo 'body_class(): '     . (str_contains(\$content, 'body_class()')     ? 'found' : 'MISSING') . PHP_EOL;
}
"

ステップ2:テーマのテンプレートを修正する

// header.php: 管理バーに必要な関数を追加

<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
    <meta charset="<?php bloginfo('charset'); ?>">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <?php wp_head(); ?>  <!-- 管理バーのCSSはここで読み込まれる -->
</head>
<!-- body_class()を必ず付ける(admin-barクラスが追加される) -->
<body <?php body_class(); ?>>
<?php wp_body_open(); ?>  <!-- 管理バーのDOMはここに挿入される -->
// footer.php: wp_footer()の確認
<?php wp_footer(); ?>  <!-- 管理バーのJSはここで読み込まれる -->
</body>
</html>

ステップ3:show_admin_barフィルターの問題を修正する

# show_admin_barフィルターを設定しているプラグインを確認
wp eval "
global \$wp_filter;
if (isset(\$wp_filter['show_admin_bar'])) {
    foreach (\$wp_filter['show_admin_bar']->callbacks as \$priority => \$callbacks) {
        foreach (\$callbacks as \$cb) {
            \$func = \$cb['function'];
            if (is_string(\$func)) {
                echo 'Priority ' . \$priority . ': ' . \$func . PHP_EOL;
            } elseif (is_array(\$func)) {
                echo 'Priority ' . \$priority . ': ' . get_class(\$func[0]) . '::' . \$func[1] . PHP_EOL;
            }
        }
    }
}
"
// functions.php: 管理バーの表示制御

// ① 管理者・編集者にのみ管理バーを表示
add_filter('show_admin_bar', function(bool $show): bool {
    if (!is_user_logged_in()) {
        return false;
    }
    // 管理者と編集者以上に表示
    return current_user_can('edit_posts');
});

// ② 特定のページタイプでは非表示
add_filter('show_admin_bar', function(bool $show): bool {
    // ランディングページでは非表示
    if (is_page_template('page-landing.php')) {
        return false;
    }
    return $show;
});

// ③ show_admin_barをプログラムで有効化(他のプラグインが無効化している場合)
// プラグインよりも後に実行するため優先度を高く設定
add_filter('show_admin_bar', '__return_true', 100);

ステップ4:管理バーのスタイル問題を修正する

// functions.php: 管理バーのスタイル修正

// ① テーマのCSSと管理バーの競合を修正
add_action('wp_head', function(): void {
    if (!is_admin_bar_showing()) {
        return;
    }
    ?>
    <style>
    /* 管理バー分のスペースを確保 */
    html {
        margin-top: 32px !important;
    }
    @media screen and (max-width: 782px) {
        html {
            margin-top: 46px !important;
        }
    }
    /* 固定ヘッダーがある場合の調整 */
    .site-header.fixed {
        top: 32px;
    }
    </style>
    <?php
});

// ② モバイルでの管理バー表示を最適化
add_action('wp_enqueue_scripts', function(): void {
    if (is_admin_bar_showing()) {
        wp_add_inline_style('admin-bar', '
            @media screen and (max-width: 600px) {
                #wpadminbar { position: fixed; }
            }
        ');
    }
});

// ③ 管理バーにカスタムリンクを追加
add_action('admin_bar_menu', function(WP_Admin_Bar $wp_admin_bar): void {
    if (!current_user_can('edit_posts')) {
        return;
    }
    $wp_admin_bar->add_node([
        'id'    => 'my-custom-link',
        'title' => 'カスタムリンク',
        'href'  => admin_url('edit.php'),
        'meta'  => ['class' => 'my-custom-link'],
    ]);
}, 999);

ステップ5:ユーザー設定と権限の問題を修正する

# 全ユーザーの管理バー設定を確認・修正
wp eval "
\$users = get_users(['fields' => ['ID', 'user_login']]);
foreach (\$users as \$user) {
    \$show = get_user_meta(\$user->ID, 'show_admin_bar_front', true);
    echo \$user->user_login . ': ' . (\$show ?: 'not set') . PHP_EOL;
}
"

# 管理者ユーザーの管理バーを強制的に有効化
wp user meta update 1 show_admin_bar_front true

# 全管理者ユーザーの管理バーを有効化
wp eval "
\$admins = get_users(['role' => 'administrator']);
foreach (\$admins as \$admin) {
    update_user_meta(\$admin->ID, 'show_admin_bar_front', 'true');
    echo 'Enabled admin bar for: ' . \$admin->user_login . PHP_EOL;
}
"

注意事項

  • wp_body_open()はWordPress 5.2以降で利用可能です。古いテーマではbodyタグの直後に以下のコードを追加してください:
  • パフォーマンス最適化プラグインの中にはCSSを最適化する際に管理バーのスタイルを削除するものがあります。管理バーが消えた場合は最適化プラグインの除外リストにadmin-barを追加してください
  • add_filter('show_admin_bar', '__return_false')をコアや他のプラグインが設定している場合があります。__return_trueを優先度100で設定することで上書きできますが、その設定が適切かどうかを確認してください

まとめ

WordPress管理バー非表示問題の解決は①is_admin_bar_showing()確認・show_admin_barフィルターコールバックの一覧確認・ユーザープロフィールの表示設定確認、②header.phpwp_head()body_class()wp_body_open()を追加・footer.phpwp_footer()を確認、③show_admin_barフィルターを__return_true(優先度100)で上書き・権限ベースの表示制御・特定テンプレートでの非表示設定、④html { margin-top: 32px }で管理バー分のスペースを確保・固定ヘッダーとの位置調整・admin_bar_menuフックでカスタムリンクを追加、⑤update_user_metaで管理者のshow_admin_bar_fronttrueに設定の手順で解決します。

お気軽にご相談ください

お見積りへ お問い合わせへ