---
title: "Snow Monkeyで任意の条件の時だけ独自に作ったウィジェットエリアを表示させるための方法"
canonical_url: "https://olein-design.com/blog/how-to-make-new-widget-area-in-snow-monkey-under-certain-conditions"
language: "ja"
date_published: "2021-08-26T11:18:05+09:00"
date_modified: "2021-08-26T11:18:05+09:00"
content_type: "post"
author: "久野晃司"
taxonomies:
  category:
    - "Snow Monkey"
    - "WordPress"
  post_tag:
    - "Snow Monkey"
    - "ウィジェットエリア"
    - "サイドバー"
---

# Snow Monkeyで任意の条件の時だけ独自に作ったウィジェットエリアを表示させるための方法

当方、制作業務の他にも「[いつでも個別相談室](https://olein-design.com/service/online-consulting-room)」という、いつでもどこからでもチャット（Slack）でマンツーマン相談ができるというサービスを行なっているのですが、そちらのユーザーさんからこのようなご相談を受けました。

![](https://0.gravatar.com/avatar/00000000000000000000000000000000?s=128&d=mp&r=g)ユーザーさん特定のページや条件の場合のみ、サイドバーを切り替えたいのですが、どうやって行うのが最適なのでしょうか？

そこから少しお話を詳しくお聞きしまして、現状はCSSで特定の条件下だけ非表示になるようにしているということでした。

そこで、僕からのお返事としては、

![](https://olein-design.com/wp-content/uploads/2020/05/kuno_high-quality-e1590976603694-150x150.jpg)久野PHP的なカスタマイズによりなんとかできるだろうとは思いますけど、具体的な方法としてはちょっとテストしてみないと分かりませんねぇ。

なので、簡単に実現するのであれば、CSSで対応しておく方法が一番シンプルかと思います。

というお返事をさせていただきました。（コードによるテストや検証などはオプションとなっているため）

その後、ちょっと気になりましてサポートフォーラムを漁っていたのですが、そこでこんな過去トピックを発見しました。

[埋め込みコンテンツ](https://snow-monkey.2inc.org/forums/topic/%e3%82%b5%e3%82%a4%e3%83%89%e3%83%90%e3%83%bc%e3%82%a6%e3%82%a3%e3%82%b8%e3%82%a7%e3%83%83%e3%83%88%e3%82%a8%e3%83%aa%e3%82%a2%e3%81%a8%e8%bf%bd%e5%b0%be%e3%82%b5%e3%82%a4%e3%83%89%e3%83%90%e3%83%bc/)

こちらを参考にすれば、独自のサイドバー（ウィジェットエリア）を任意の条件下でのみ表示させることはできそうでしたので、実際に試してみました！

## まずは独自のウィジェットエリアを作成

まずは、特定の条件下でのみ表示させるためのウィジェットエリアを作ります。

Snow Monkey ですので、My Snow Monkey 内のPHPファイル、もしくは子テーマの `functions.php` に以下を記述します。

```
add_action(
	'widgets_init',
	function() {
		register_sidebar(
			array(
				'name' => 'カテゴリー:テンプレート のアーカイブ一覧時のみ表示させるサイドバー',
				'id' => 'category-sidebar',
				'description' => 'カテゴリー:テンプレート のアーカイブ一覧時のみ表示させるサイドバーウィジェットエリアです',
				'before_widget' => '<div id="%1$s" class="c-widget %2$s">',
				'after_widget'  => '</div>',
				'before_title'  => '<h2 class="c-widget__title">',
				'after_title'   => '</h2>',
			)
		);
	}
);
```

`name` `id` `description` は任意のものを設定してください。`before_widget` `after_widget` `before_title` `after_title` は基本的なスタイリングとマークアップは Snow Monkey のものを継承したいので、`snow-monkey/app/setup/widget-area.php` 内のウィジェットの登録部分を参照しました。

## ウィジェットエリアの登録などなど

では、上で作ったウィジェットエリアを**特定のカテゴリー記事一覧を表示した際のみ表示させる**ようなコードを書いていこうと思います。

カテゴリーの `id` でもできますが、今回は `slug` で分岐します。例ではカテゴリースラッグを `template` と想定してコードが書いてあります。

コードはこんな感じになります。

```
add_action(
	'after_setup_theme',
	function() {
		remove_action( 'snow_monkey_sidebar', 'snow_monkey_add_archive_sidebar' );

		function my_snow_monkey_add_archive_sidebar() {
			if ( ! is_category( 'template' ) ) {
				snow_monkey_the_sidebar_widget_area();
				snow_monkey_the_sidebar_sticky_widget_area();
			} else {
				dynamic_sidebar( 'category-sidebar' );
			}
		}
		add_action( 'snow_monkey_sidebar', 'my_snow_monkey_add_archive_sidebar' );
	}
);
```

参照元のトピックにも書いてありますが、まずは `remove_action` で一旦全てのサイドバーへの設定を解除しています。

そして、任意の条件（カテゴリースラッグ `template` ）**ではないとき**は通常のウィジェットエリアを表示させますという記述をしています。

そして、`else` で任意の条件のときには `dynamic_sidebar()` で 新しく作ったウィジェットエリアを設置するようにしています。

これで、カテゴリー（スラッグ＝ `template`）の時だけ、新設したウィジェットエリアを表示させるということが実現できます。

条件分岐を変えたり増やしたりすることで、色々と作れると思います。ただし、メンテナンス性を損なうカスタマイズになる場合もあるので、その点も考慮して導入を検討してください。

## まとめ

この流れでも分かるように、Snow Monkey サポートフォーラムで検索すると、かなり膨大なトピックスのアーカイブを閲覧することができます。

ですので、そこで的確な検索ワードで調べることができれば、何か新しいことを試してみる際にもヒントになる情報を見つけることができるでしょう。

また、探せない場合には、トピックを作成してユーザーのみなさんの意見を聞いてみるということができます。これもまた素敵な体験となります。

ぜひ色々と試してみてください。
