2026年5月20日

2026年5月20日

WordPressのウィジェットが表示されない場合の解決方法

はじめに

WordPressのウィジェットが表示されない主な原因は「テーマにウィジェットエリアが登録されていない」「テンプレートで dynamic_sidebar() が呼ばれていない」「テーマ変更後にウィジェットが未割り当てになっている」のいずれかです。

症状・原因

  • ウィジェットを設定したのにサイドバーに表示されない
  • テーマを変更したらウィジェットが消えた
  • 管理画面のウィジェット設定画面にサイドバーが表示されない
  • ブロックエディター対応テーマでウィジェットの設定場所がわからない

解決手順

ステップ1:ウィジェットエリアの登録状況を確認する

# 登録されているウィジェットエリアを確認
wp eval "
global \$wp_registered_sidebars;
foreach (\$wp_registered_sidebars as \$id => \$sidebar) {
    echo \$id . ': ' . \$sidebar['name'] . PHP_EOL;
}"

# ウィジェットエリアにウィジェットが割り当てられているか確認
wp widget list sidebar-1 --format=table

# すべてのウィジェットエリアのウィジェットを確認
wp eval "
\$sidebars = get_option('sidebars_widgets');
foreach (\$sidebars as \$sidebar_id => \$widgets) {
    if (is_array(\$widgets) && !empty(\$widgets)) {
        echo \$sidebar_id . ': ' . implode(', ', \$widgets) . PHP_EOL;
    }
}"

ステップ2:ウィジェットエリアをfunctions.phpに登録する

// 子テーマの functions.php
add_action('widgets_init', function(): void {
    // メインサイドバー
    register_sidebar([
        'name'          => 'メインサイドバー',
        'id'            => 'sidebar-1',
        'description'   => '記事一覧・記事詳細のサイドバー',
        'before_widget' => '<section id="%1$s" class="widget %2$s">',
        'after_widget'  => '</section>',
        'before_title'  => '<h3 class="widget-title">',
        'after_title'   => '</h3>',
    ]);

    // フッターウィジェットエリア
    register_sidebar([
        'name'          => 'フッターウィジェット',
        'id'            => 'footer-widgets',
        'description'   => 'フッターエリア',
        'before_widget' => '<div class="footer-widget %2$s">',
        'after_widget'  => '</div>',
        'before_title'  => '<h4 class="footer-widget-title">',
        'after_title'   => '</h4>',
    ]);
});

ステップ3:テンプレートに dynamic_sidebar() を追加する

// sidebar.php または テンプレートの任意の場所
if (is_active_sidebar('sidebar-1')) {
    ?>
    <aside class="widget-area">
        <?php dynamic_sidebar('sidebar-1'); ?>
    </aside>
    <?php
}

// フッターウィジェット
if (is_active_sidebar('footer-widgets')) {
    dynamic_sidebar('footer-widgets');
}

ステップ4:テーマ変更後にウィジェットを再設定する

# テーマ変更前のウィジェット設定をバックアップ
wp option get sidebars_widgets --format=json > sidebars-backup.json

# テーマ変更後に新しいサイドバーIDを確認
wp eval "global \$wp_registered_sidebars; print_r(array_keys(\$wp_registered_sidebars));"

# WP-CLIでウィジェットを追加
wp widget add search sidebar-1 1
wp widget add recent-posts sidebar-1 2 --title="最新記事" --number=5
wp widget add categories sidebar-1 3 --title="カテゴリー"
wp widget add tag_cloud sidebar-1 4 --title="タグ"

# テキストウィジェットを追加
wp widget add text sidebar-1 5 --title="プロフィール" --text="サイト管理者の紹介文"

# ウィジェット一覧を確認
wp widget list sidebar-1 --format=table

ステップ5:ブロックウィジェットとクラシックウィジェットの確認

# WordPressのバージョンを確認(5.8以降はブロックウィジェット)
wp core version

# クラシックウィジェットプラグインが有効か確認
wp plugin list | grep -i widget

# ブロックウィジェットを使用している場合の確認
wp eval "
\$sidebars = get_option('widget_block');
if (!empty(\$sidebars)) {
    echo 'ブロックウィジェットが使用されています' . PHP_EOL;
}"

ステップ6:ウィジェットのデバッグ

// テンプレートにデバッグコードを追加(一時的)
add_action('wp_footer', function(): void {
    if (current_user_can('administrator')) {
        global $wp_registered_sidebars, $wp_registered_widgets;
        echo '<!-- Registered sidebars: ' . implode(', ', array_keys($wp_registered_sidebars)) . ' -->';
        echo '<!-- Active sidebar-1: ' . (is_active_sidebar('sidebar-1') ? 'yes' : 'no') . ' -->';
    }
});

注意事項

  • テーマを変更するとウィジェットのサイドバーIDが変わる場合があります。新テーマの register_sidebar() で定義されたIDと一致しているか確認してください
  • WordPress 5.8以降のブロックテーマではウィジェットはブロックエディターで管理されます
  • register_sidebar()before_widget / after_widget のHTML構造はテーマのCSSと一致させてください

まとめ

ウィジェットが表示されない場合は「register_sidebar() でエリアを登録 → dynamic_sidebar() をテンプレートに追加 → 管理画面またはWP-CLIでウィジェットを割り当て」の順に確認します。

お気軽にご相談ください

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