WordPressテーマの拡張でよくあるのがカテゴリーによる条件分岐。
僕が開発しているWordPressテーマ「4536」でも、選択したカテゴリーをサイトマップから除外したり、noindexにしたり、多くの設定項目を用意しています。
そんなカテゴリー設定でよく使う関数と言えば、get_categoriesやwp_terms_checklistですが、実はもっと便利な関数があるのをご存知ですか?
それが今回紹介するwp_category_checklist関数です。
以下、使い方などを詳しくお話ししますね。
概要と使いどころ
この関数は文字通りカテゴリーのチェックリストを表示しますが、それだけであればget_categories関数をループ処理するのと大差ありません。
この関数の便利なところは、以下の処理もしてくれるところです。
- グループ化してくれる
- 親子関係を維持したままチェックボックスを表示する
- nameやidが簡単に変更できる
引数を指定するだけでこれらの設定が簡単に変更できるのは使い勝手が良いですよね。
基本の使い方
この関数の使い方はすごくシンプルです。
基本の形はこんな感じ。
<ul>
<?php wp_category_checklist( 0, 0, $selected_cats, false, $walker, false ); ?>
</ul>
※引数の詳細は関数リファレンスをご覧ください。
これだけでチェックボックス付きのカテゴリーの一覧が表示されます。
※子カテゴリーのclass属性にはデフォルトで「children」が付与されているので、階層にする場合は.children{padding:.5em 0 0 1em}
などを指定すると見やすいと思います。
後はこれをform内などに設置して、POST時に値を配列で受け取り、それを使ってゴニョゴニョ…って感じですね。
チェック済みカテゴリーを反映させる
重要な引数についても触れておきます。
チェック済みのカテゴリーをチェックボックスに反映させるには、3つ目の引数にカテゴリーIDの配列(受け取った値)を指定します。
例えば、get_option関数を使って管理画面で操作するには以下のようなコードになります。
<form method="post" action="">
<ul>
<?php wp_category_checklist( 0, 0, get_option( 'category_ids_4536' ), false, $walker, false ); ?>
</ul>
<?php submit_button(); ?>
</form>
※保存処理などは割愛しています。
後は、この値を使いたいところでget_option( 'category_ids_4536' )
を呼び出すだけです。
チェックされたカテゴリーにだけ特定の処理をしたい場合は以下のようなコードになります。
if( is_category( get_option( 'category_ids_4536' ) ) ) {
//チェックされたカテゴリーのアーカイブページにだけ処理をする
}
if( in_category( get_option( 'category_ids_4536' ) ) ) {
//チェックされたカテゴリーに属する記事にだけ処理をする
}
name属性(とid属性)を変更する
デフォルトではname属性に「post_category」が指定されていますが、これは自由に変更できます。
(ちなみに、idも変更できます)
変更するのは5つ目の引数で、Walkerクラスを操作します。
例えば、name属性をデフォルトの「post_category」から「category_ids_4536」に変更する場合は以下のコードになります。
$walker = new Walker_Category_Checklist_Widget (
'category_ids_4536'
);
wp_category_checklist( 0, 0, $selected_cats, false, $walker, false );
idも変更する場合は、Walkerクラスの2番目の引数に指定します。
id属性をname属性と同じにする場合は以下のコードになります。
$walker = new Walker_Category_Checklist_Widget (
'category_ids_4536', //name属性
'category_ids_4536' //id属性
);
wp_category_checklist( 0, 0, $selected_cats, false, $walker, false );
※配列ではないので、Walkerクラスの最後のカンマは不要です。
以上、wp_category_checklist関数の紹介でした。
何かわからないことがあればお気軽にコメントどうぞ:D