WordPress のサイドバーは、外観 > ウィジェットから様々なアイテムを追加してサイト上に表示するのが一般的です。今回ご紹介するのは、以下のウィジェットエリアを追加する方法です。

ウィジェットブロックエディターのウィジェットエリア 従来のウィジェットエリア
WordPress5.8以降 WordPress5.8以前

当記事では、ウィジェットエリアの登録〜サイト上に表示するまでの手順をご紹介します。各ウィジェットの詳細や基本的な使い方は、以下の記事をご覧ください。

ウィジェットエリアを追加する4つのステップ

ウィジェットエリアを追加して表示するまでの手順を以下の4つのステップで解説していきます。

  1. ウィジェットエリアの新規登録
  2. register_sidebar()の仕様を知る
  3. register_sidebar()のパラメータを調整
  4. ウィジェットエリアの出力

ウィジェットエリアの新規登録

まずは、外観 > ウィジェットの画面に新しい「ウィジェットエリア」を設置していきます。このフィールドは、register_sidebar()という関数で追加できます。試しに以下の記述をテーマの「functions.php」に記入してみてください。

add_action( 'widgets_init', function(){
  register_sidebar();
} );

これで外観 > ウィジェットを確認すると「サイドバー1」と書かれたフィールドが追加されるはずです。ただし、このままでは管理しにくいため、パラメータを指定してより使いやすい状態にしていきます。

WordPress5.8以降の場合に新しく追加したウィジェットエリア WordPress5.8以前の場合に新しく追加したウィジェットエリア
WordPress5.8以降 WordPress5.8以前
外観に「ウィジェット」と書かれたメニューが表示されていない場合は、上記を記入することで表示されるようになります。

register_sidebar()の仕様を知る

ウィジェットエリアに追加したウィジェットをサイト上に出力する時、各ウィジェットは自動的に特定のHTMLタグで囲まれます。例えば以下のような形式になりますね。(パラメータを何も指定していない場合)

<li id="各ウィジェットのID名" class="各ウィジェットに応じたクラス名">
  <h2 class="widgettitle">入力したタイトル</h2>
  <!-- ここに各ウィジェットのHTMLが反映 -->
</li>

register_sidebar()のパラメータを変更することで、上記の構造を変えることができます。register_sidebar()の代表的なパラメータをご紹介します。

register_sidebar( $args );
name ウィジェットエリアの名前
id ウィジェットエリアを識別するためのID(出力する時にも使用)
description ウィジェットエリアの説明文
before_widget ウィジェットの直前に出力されるHTML(idは%1$s、classは%2$s)
after_widget ウィジェットの直後に出力されるHTML
before_title ウィジェットタイトルの直前に出力されるHTML
after_title ウィジェットタイトルの直後に出力されるHTML

基本的には、上記のパラメータを抑えてくだけで十分です。次は、実用的な形に整えていきましょう。

register_sidebar()のパラメータを調整

それでは、register_sidebar()のパラメータを調整して実用的な形にしていきます。以下は、register_sidebar()のパラメータを汎用的な形にカスタマイズしたものです。

add_action( 'widgets_init', function(){
  register_sidebar( array(
    'name' => 'ウィジェットエリアの名前', // 管理画面のウィジェットエリアの名称
    'id' => 'my-widget', // ウィジェットエリアの識別名称(出力時にも使用)
    'description' => 'ウィジェットエリアの説明', // 管理画面のウィジェットエリアの説明文
    'before_widget' => '<div id="%1$s" class="my-widget %2$s">', // ウィジェットを囲むdivの開始タグ
    'after_widget' => '</div>', // ウィジェットを囲むdivの終了タグ
    'before_title' => '<h3 class="my-widget-title">', // ウィジェットタイトルを囲むh3の開始タグ
    'after_title' => '</h3>', // ウィジェットタイトルを囲むh3の終了タグ
  ) );
} );

基本的には、上記をベースに各パラメータを編集していただければ使い回せるはずです。次はウィジェットエリアに追加したウィジェットを表示する方法について解説します。

add_action(‘widgets_init’ function(){…})は、register_sidebar()とセットで使うものと覚えていただければ大丈夫です。これは、ウィジェットエリアの登録をいい感じのタイミングで実行してくれる関数なので、そういうものと思ってください。

ウィジェットエリアの出力

このままでは、管理画面のウィジェットエリアにアイテムを追加してもサイト上に反映されませんよね。ウィジェットを出力する時は、dynamic_sidebar()を利用します。

dynamic_sidebar( 'ウィジェットエリアのID' );

使い方は非常に簡単で、dynamic_sidebar()の引数にウィジェットエリアのIDを記入して、表示したいテンプレートファイルに記入するだけです。試しに以下の記述をsingle.phpなどに記入してみてください。

<?php
// 「my-widget」のウィジェットエリアを呼び出す
dynamic_sidebar( 'my-widget' );

// 出力結果
?>
<div id="各ウィジェットのID" class="my-widget 各ウィジェットに応じたクラス名">
  <h3 class="my-widget-title">ウィジェットタイトル</h3>
  <!-- ここに各ウィジェットのHTMLが反映 -->
</div>

追加したウィジェットが表示されるようになったはずです。(ウィジェットが何も追加されていなければ表示されません。)

ここでregister_sidebar()の「id」を利用するので、使用用途が分かるような名称にしておきましょう。

まとめ

ウィジェットエリアの登録〜表示方法までの手順を解説しました。当記事で紹介した内容をコピペするだけで使えるので、ぜひお試しください。

なお、WordPress5.8からウィジェットの操作画面は、大幅に変わりました。従来のウィジェットエリアをご利用になる場合は、以下の方法で実現できますので、ぜひお試しください。