お問い合わせはコチラから

ウィジェットエリアにウィジェットがあるか確認する方法

サイト運営

WordPressでウィジェットエリアを自分で追加するカスタマイズをすることがあるかもしれません。ウィジェットの追加方法は検索すると沢山出来てきますのでコピペすればできると思います。

しかし、そのウィジェットエリアにウィジェットが設置されているかどうかを判定して、何か別の処理をしたいとします。その判定はどうしたらよいでしょうか?

スマホ用ウィジェットエリアに設置されていない時はPC用のウィジェットを使用したい場合に、ウィジェットが設置されているかどうか知りたくなります。

この記事ではウィジェットエリアにウィジェットが設置されているかどうかの判定の方法についてまとめています。

ウィジェットエリアにウィジェットが設置されているか判定するには?

実はウィジェットエリアを追加する時の記述にすでに答えが含まれています。

is_active_sidebarで判定できます。

ウィジェットエリアを追加する記述

ウィジェットエリアを追加する時には以下のように記述すると思います。

この書き方は定番になっていて、is_active_sidebarで最初に判定しています。

	<?php if(is_active_sidebar('widget_id001')) : ?>
		<?php dynamic_sidebar('widget_id001'); ?>
	<?php endif; ?>

この記述は、ウィジェット領域を定義するregister_sidebarの存在を確認しているのかと思っていたのですが、実は違っていてウィジェット領域にウィジェットが設置されているかどうかを確認している記述でした。

ウィジェットエリアにウィジェットが設置さていない場合はウィジェットエリアのHTMLそのものを出力しないという意味の記述なのだろうと思います。

is_active_sidebarを使ってウィジェットエリアを出し分ける

ウィジェットエリアwidget_id001があって、そのスマホ用としてsp_widget_id001があったとします。

sp_widget_id001にウィジェットが設置されていればsp_widget_id001を出力し、設置されていなければPC用のwidget_id001を出力する、という記述は以下のスニペットで実現できます。

<--- スマホウィジェットエリアを確認 --->
<?php if(is_active_sidebar('sp_widget_id001')) : ?>
<--- スマホウィジェットエリアを出力 --->
		<?php dynamic_sidebar('sp_widget_id001'); ?>
<?php else: ?>
<--- PCウィジェットエリアを確認 --->
    <?php if(is_active_sidebar('widget_id001')) : ?>
<--- PCウィジェットエリアを出力 --->
		   <?php dynamic_sidebar('widget_id001'); ?>
    <?php endif; ?>
<?php endif; ?>

プラグインを使う方が簡単かもしれない

ウィジェットエリアは簡単に追加できるのでPCとスマホ用にウィジェットエリアをわけると、ウィジェットエリアだらけになってしまいます。

PCとスマホでウィジェットを出し分けたいだけであれば、プラグインを使う方が簡単です。

widget logicというプラグインを使うと、一つのウィジェットエリアで表示する条件を複雑に指定できるようになります。

ウィジェットエリアが増えすぎて困る場合は検討してみてもいいかもしれません。

まとめ

ウィジェットエリア周りは、コピペで済ますことが多いので、記述の意味を理解していないまま使用していることが多いです。

今回も自分がやりたいことが、コピペしている記述ですでに実現されていることに気が付いていませんでした。

タイトルとURLをコピーしました