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でウィジェットを割り当て」の順に確認します。