多くのテーマで、ウィジェットが用いられています。ウィジェット表示非表示をページ毎に切り替えたい、という要望があるかもしれません。
今回は、ウィジェット表示非表示を 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()
の部分の条件分岐を変更すれば、カテゴリーで表示方法を変える、といった工夫も可能になります。