Standing on the Shoulder of Linus

Home / 2012 / 1月 / 23 / ページ毎のウィジェット表示非表示をfunctions.phpで制御する方法

ページ毎のウィジェット表示非表示をfunctions.phpで制御する方法

多くのテーマで、ウィジェットが用いられています。ウィジェット表示非表示をページ毎に切り替えたい、という要望があるかもしれません。

今回は、ウィジェット表示非表示を functions.php で制御する方法を紹介します。条件分岐タグと併用することで、ページ毎やカテゴリー毎のウィジェット切り替えができます。

元ネタは Disable widget areas (sidebars) without touching theme templates です。2009 年の記事です。ここでは、twenty eleven の場合で試してみます。

まず、どのようなウィジェット領域があるか、を調べます。functions.php にある register_sidebar の id 部分です。sidebar-1, sidebar-2, sidebar-3, sidebar-4, sidebar-5 だと分かります。(twentyeleven ソースコードリーディング参照。テーマ毎に異なるので、お使いのテーマで確認してください。)

sidebar-3, sidebar-4, sidebar-5 が、フッターのウィジェット領域です。sidebars_widgets フィルターにフックすると、表示するウィジェット領域を変更できます。

例えば、固定ページで sidebar-3 を非表示に、その他のページで sidebar-4 を非表示にする設定です。

add_filter( 'sidebars_widgets', 'disable_footer_widgets' );
function disable_footer_widgets( $sidebars_widgets ) {
	if ( is_page() ) {
		$sidebars_widgets['sidebar-3'] = false;
	} else {
		$sidebars_widgets['sidebar-4'] = false;
	} 
	return $sidebars_widgets;
}

こうすると、sidebar-4 を固定ページフッター、sidebar-3 を固定ページ以外用フッター、sidebar-5 は共通フッター、という使い方ができます。is_page() の部分の条件分岐を変更すれば、カテゴリーで表示方法を変える、といった工夫も可能になります。

関連

Posted in WordPress | Tagged ウィジェット
← PHPTAL で WordPress カスタムフィールド 連想配列をランダムに並べ替える →

アーカイブ

人気の投稿とページ

  • キンドル本を印刷する(PDFに変換する)方法
  • 名古屋駅から国際センターまでの道のり(徒歩)
  • AGPL ライセンス(GPLとは似ているが違いもある)
  • 6年使ったイーモバイル(Y!mobile)を解約手続。店頭でSIM返却
  • JP-Secure SiteGuard WP Pluginは不正ログイン防止に役立つか

プロフィール

水野史土:月70万PVホームページ制作会社のレスキューワーク株式会社で、PHPソフトウェアのサポートを行っている。concrete5コミュニティリーダー、Novius OSコアコード貢献者でもある。 詳しくは管理者詳細参照。
大好評WordPress書籍「WordPressユーザーのためのPHP入門 はじめから、ていねいに。」サポートページ

Copyright © 2015 Standing on the Shoulder of Linus.