【WordPressの基礎】テーマにウィジェットを追加する「ウィジェットかサイドバーかそれが問題だ」


こんにちは、mimiです。

昨日に引き続き、プレーンなwordpress作りにチャレンジしているのですが、ウィジェット周りの設定方法を気持ちいいくらい忘れていたので、復習がてら書いておきます。

まず、ウィジェットを追加するサイドバーを作ってあげるためにfunctions.phpにwidgets_initを追加します。

//widgetsの設定
function my_widgets_init() {

	register_sidebar( array(
		'name' => 'main sidebar',
		'id' => 'main_sidebar',
		'before_widget' => '<div>',
		'after_widget' => '</div>',
		'before_title' => '<h2>',
		'after_title' => '</h2>',
	) );

	register_sidebar( array(
		'name' => 'sub sidebar',
		'id' => 'sub_sidebar',
		'before_widget' => '<div>',
		'after_widget' => '</div>',
		'before_title' => '<h2>',
		'after_title' => '</h2>',
	) );
}
add_action( 'widgets_init', 'my_widgets_init' );

こんな感じで、複数でもサイドバーを追加できます。
追加したら、管理メニューの外観に「ウィジェット」が表示されるはずなので、普通に必要なウィジェットをドラックドロップしましょう。

メニューの3番目に「ウィジェット」が入ります。

実際にサイトにウィジェット(サイドバー)を反映させるには、sidebar.phpなどに

<?php if ( is_active_sidebar( 'main_sidebar' ) ) : ?>
<div id="main_sidebar">
	<?php dynamic_sidebar( 'main_sidebar' ); ?>
</div>
<?php endif; ?>
<?php if ( is_active_sidebar( 'sub_sidebar' ) ) : ?>
<div id="sub_sidebar">
	<?php dynamic_sidebar( 'sub_sidebar' ); ?>
</div>
<?php endif; ?>

という風にdynamic_sidebar関数によってregister_sidebarで付けたidで呼び出します。

プラス解説

register_sidebarという名前の関数でwidgets_initするというところにwordpressの歴史が垣間見えるような気がします。register_widgetsとかで良い気がするけれどregister_widgetと間違いやすいからかなあ・・・。

公式では

WordPress ウィジェットはサイドバーにコンテンツや機能を追加します。

WordPress ウィジェット – WordPress Codex 日本語版

サイドバー (sidebar) とは、テーマによって表示される縦方向のカラムであり、メインコンテンツ以外の情報を載せる。たいていのテーマは、コンテンツの右側または左側に、1個またはそれ以上のサイドバーを置くようになっている。たいていのサイドバーは、サイト管理者がカスタマイズできるウィジェットを配置できるようになっている。テーマ内には、サイドバーを生成するテンプレートファイルがあり、たいてい sidebar.php という名称になっている。

用語集 – WordPress Codex 日本語版

とあるので、sidebarに内包されるものがwidgetなはずだから、widgets_initでsidebarがinitされるのちょっと気持ち悪いというか、混乱しちゃうんですが。

ちなみに便利なウィジェットはsidebarなしでも the_widget()を使って何処でも呼び出せます。・・・もはやサイドバー要らない気もするんですが、wrapperという名前をついつい使ってしまうのと同じなのかなー。


この記事を書いた人