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

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

ユーザーさん

特定のページや条件の場合のみ、サイドバーを切り替えたいのですが、どうやって行うのが最適なのでしょうか?

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

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

久野

PHP的なカスタマイズによりなんとかできるだろうとは思いますけど、具体的な方法としてはちょっとテストしてみないと分かりませんねぇ。


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

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

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

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

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

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

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 サポートフォーラムで検索すると、かなり膨大なトピックスのアーカイブを閲覧することができます。

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

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

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

WordPress 6.5.x 対応版を出版しました

WordPress デフォルトテーマ Twenty Twenty-Four を使って、シンプルなブログやポートフォリオサイト、そしてコーポレートサイトを作りながら、ブロックテーマやサイトエディターの基本を理解することができます。