閉じる

WordPress get_sidebarの使い方:引数による複数サイドバーの出し分けとカスタマイズ手順

WordPressのテーマ開発において、サイドバーはコンテンツの補助情報を表示したり、ナビゲーションを強化したりするために欠かせない要素です。

WordPressにはサイドバーを呼び出すための専用のテンプレートタグとしてget_sidebar()が用意されています。

この関数を正しく理解し、引数を活用することで、特定のページごとに異なるサイドバーを表示させる「出し分け」も容易に実現できます。

本記事では、get_sidebar()の基本的な使い方から、引数を用いた複数サイドバーの管理方法、そして実務で役立つカスタマイズ手順について詳しく解説します。

get_sidebar関数の基本概念

get_sidebar()は、テーマファイル内でsidebar.phpという名前のテンプレートファイルを読み込むための関数です。

WordPressのテンプレートタグの中でも「インクルードタグ」と呼ばれるカテゴリーに属しており、ヘッダーを呼び出すget_header()やフッターを呼び出すget_footer()と同じ仲間です。

この関数を使用する最大のメリットは、共通のサイドバーパーツを一箇所で管理できる点にあります。

例えば、ブログ投稿ページと固定ページで同じサイドバーを表示したい場合、それぞれのテンプレートファイルに直接HTMLを書くのではなく、sidebar.phpを作成してget_sidebar()で呼び出すことで、メンテナンス性が大幅に向上します。

基本的な記述方法

最もシンプルな使い方は、引数を指定せずに呼び出す方法です。

PHP
<?php
// 基本的なサイドバーの呼び出し
get_sidebar();
?>

このコードを実行すると、WordPressはテーマフォルダの直下にあるsidebar.phpを探しに行きます。

もしファイルが存在しない場合は、WordPress本体がデフォルトで持っているサイドバーの構造が出力されることがありますが、現在のテーマ開発では必ず自前のsidebar.phpを用意するのが一般的です。

引数を使用した複数サイドバーの出し分け

サイトの規模が大きくなると、「ブログ記事には最新記事一覧を表示したいが、商品紹介ページには商品カテゴリー一覧を表示したい」といった要望が出てきます。

このような場合に便利なのが、get_sidebar()第一引数を活用する方法です。

命名規則とファイル構成

引数に名前を指定すると、WordPressはsidebar-{name}.phpというファイルを探します。

引数の指定読み込まれるファイル名
get\_sidebar();sidebar.php
get\_sidebar('shop');sidebar-shop.php
get\_sidebar('blog');sidebar-blog.php

例えば、ショップページ専用のサイドバーを作成したい場合は、まずsidebar-shop.phpというファイルを作成し、その中に専用のコードを記述します。

そして、ショップのテンプレートファイル(例: archive-product.phpなど)で以下のように記述します。

PHP
<?php
// shop専用のサイドバーを読み込む
get_sidebar('shop');
?>

このように、命名規則に従ってファイルを用意するだけで、複雑な条件分岐を書かずにサイドバーを切り替えることができます。

予備のテンプレート読み込み挙動

もしget_sidebar('shop');と記述したにもかかわらず、テーマフォルダ内にsidebar-shop.phpが存在しなかった場合、WordPressは自動的にデフォルトのsidebar.phpを読み込むという賢い挙動をします。

これにより、特定のページだけデザインを変えたいが、ファイル作成が間に合っていない場合でもサイトが崩れるリスクを低減できます。

条件分岐タグを組み合わせた柔軟な制御

テンプレートファイル側で明示的に呼び出すだけでなく、index.phpsingle.phpの中でWordPressの「条件分岐タグ」を使用して、表示するサイドバーを制御することもよくあります。

固定ページと投稿ページでサイドバーを分ける例

以下のコードは、表示されているページが「固定ページ(page)」か「それ以外(投稿など)」かで読み込むファイルを変更する例です。

PHP
<?php
if ( is_page() ) {
    // 固定ページの場合は sidebar-page.php を読み込む
    get_sidebar('page');
} else {
    // それ以外(投稿ページなど)は通常の sidebar.php を読み込む
    get_sidebar();
}
?>

特定のカテゴリーのみ異なるサイドバーを表示する

特定のカテゴリーに属する投稿の場合に、特別なサイドバーを出したい場合はin_category()を使用します。

PHP
<?php
if ( in_category('news') ) {
    // ニュースカテゴリーの場合
    get_sidebar('news');
} else {
    // 通常のサイドバー
    get_sidebar();
}
?>

このように条件分岐と引数を組み合わせることで、1つのテンプレートファイルを使い回しながらも、コンテンツに最適化されたサイドバーを提供することが可能になります。

サイドバー内部のカスタマイズ:ウィジェットの有効化

get_sidebar()で呼び出されるファイルの中身は、静的なHTMLでも構いませんが、管理画面から操作できるようにウィジェット(動的サイドバー)に対応させるのが標準的です。

ウィジェットを表示するためには、まずfunctions.phpでサイドバーの登録を行う必要があります。

1. functions.phpでのサイドバー登録

PHP
<?php
function my_theme_widgets_init() {
    register_sidebar( array(
        'name'          => 'メインサイドバー',
        'id'            => 'main-sidebar',
        'before_widget' => '<section id="%1$s" class="widget %2$s">',
        'after_widget'  => '</section>',
        'before_title'  => '<h2 class="widget-title">',
        'after_title'   => '</h2>',
    ) );
}
add_action( 'widgets_init', 'my_theme_widgets_init' );
?>

2. sidebar.phpでの出力処理

登録したサイドバーを実際に表示するには、sidebar.php内でdynamic_sidebar()関数を使用します。

PHP
<aside id="secondary" class="widget-area">
    <?php
    if ( is_active_sidebar( 'main-sidebar' ) ) :
        // ウィジェットがセットされている場合のみ出力
        dynamic_sidebar( 'main-sidebar' );
    else :
        // ウィジェットがない場合のデフォルト表示(任意)
        echo '<p>ウィジェットが設定されていません。</p>';
    endif;
    ?>
</aside>

この実装を行うことで、get_sidebar()を呼び出した場所に、管理画面の「外観 > ウィジェット」で配置したコンテンツが表示されるようになります。

実務で役立つカスタマイズ手順と注意点

サイドバーをカスタマイズする際には、HTML構造やCSSの設計にも気を配る必要があります。

特に2026年現在のモダンなWeb制作では、レスポンシブ対応やアクセシビリティへの配慮が不可欠です。

適切なHTMLタグの選択

サイドバーを構築する際は、セマンティックなHTMLを意識しましょう。

<aside>タグは、メインコンテンツとは関連があるものの、切り離しても成立する内容(補足情報)を示すために最適です。

PHP
<!-- sidebar.php の推奨構造例 -->
<aside id="sidebar" class="site-sidebar" role="complementary">
    <?php get_search_form(); // 検索フォームの読み込み ?>
    
    <nav class="sidebar-navigation">
        <?php get_sidebar('nav'); // ナビゲーション専用サイドバーの呼び出し例 ?>
    </nav>

    <div class="sidebar-widgets">
        <?php dynamic_sidebar('main-sidebar'); ?>
    </div>
</aside>

サイドバーを表示させない選択肢

ページのデザインによっては、1カラム構成にするためにサイドバーを表示したくない場合があります。

その際、単にget_sidebar()を書かないという方法もありますが、CSSのクラス名でレイアウトを制御するのが一般的です。

PHP
<div id="content" class="<?php echo is_active_sidebar('main-sidebar') ? 'has-sidebar' : 'full-width'; ?>">
    <!-- コンテンツの内容 -->
</div>

<?php
if ( is_active_sidebar('main-sidebar') ) {
    get_sidebar();
}
?>

このように、is_active_sidebar()を使用して「ウィジェットが入っているときだけサイドバーを表示し、レイアウトクラスを切り替える」という手法をとると、運用の柔軟性が高まります

get_sidebar() の第2引数:argsの活用(上級編)

あまり知られていませんが、get_sidebar()には第2引数として$argsを渡すことができます。

これは、読み込まれるテンプレートファイルに変数を渡したい場合に役立ちます。

PHP
// 呼び出し側 (index.phpなど)
$args = array(
    'class' => 'special-style',
    'show_title' => true
);
get_sidebar( 'custom', $args );
PHP
// 読み込まれる側 (sidebar-custom.php)
$class_name = $args['class']; // 'special-style' が取得できる
?>
<aside class="<?php echo esc_attr( $class_name ); ?>">
    <?php if ( $args['show_title'] ) : ?>
        <h2>カスタムサイドバー</h2>
    <?php endif; ?>
    <!-- コンテンツ -->
</aside>

このように、同じテンプレートファイルを使用しつつ、呼び出し元に応じて微妙に表示内容を微調整するといった高度な使い方が可能です。

よくあるトラブルと解決策

get_sidebar()を実装する際によく遭遇する問題とその対策をまとめました。

1. サイドバーが表示されない

  • 原因: sidebar.phpのファイル名が間違っている、またはファイルが正しい階層(テーマのルート)にない。
  • 対策: ファイル名がsidebar.phpであることを確認してください。子テーマを使用している場合は、親テーマの設定が優先されていないか確認します。

2. デザインが崩れる

  • 原因: サイドバー内のHTMLタグが閉じられていない、またはメインコンテンツの
    タグの外に出ている。
  • 対策: 開発者ツール(F12)を使用して、DOM構造が意図した通りになっているか確認してください。特にフロート(float)やフレックスボックス(flexbox)を使用している場合、親要素の閉じタグのタイミングが重要です。

3. 引数付きのサイドバーが反映されない

  • 原因: sidebar-{name}.phpのハイフンを忘れている、あるいは引数のスペルミス。
  • 対策: get_sidebar('shop')と呼び出すなら、ファイル名はsidebar-shop.phpです。sidebar_shop.php(アンダーバー)ではないことに注意してください。

まとめ

get_sidebar()は、WordPressテーマのレイアウトを構築する上で非常にシンプルかつ強力なツールです。

単にサイドバーを表示するだけでなく、引数を利用したファイルの出し分けや、条件分岐タグとの組み合わせによって、ユーザーにとって最適な情報提示が可能になります。

今回のポイントを整理すると以下の通りです。

  • get_sidebar()は標準でsidebar.phpを読み込む。
  • 引数に名前を渡すことで、sidebar-name.phpのような複数ファイルの使い分けができる。
  • is_page()などの条件分岐タグを併用して、表示するサイドバーを制御する。
  • 内部ではdynamic_sidebar()を使い、ウィジェット機能と連携させるのが一般的。
  • 第2引数の$argsを使えば、テンプレート間でデータを受け渡しできる。

テンプレート階層と関数の仕組みを正しく理解し、サイトの構造に合わせた最適なサイドバー実装を行ってください。

これにより、ユーザービリティの向上とサイト管理の効率化を同時に実現できるはずです。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!