WordPressの管理画面で、通常の投稿一覧で行える「カテゴリーの絞り込み検索」。これをカスタム投稿でも行えるようにするサンプルを紹介します。
カテゴリー(ターム)による投稿の絞り込みは、ユーザー要望の多いカスタムの一つですね。
サンプルでは商品情報にみたてたカスタム投稿’product’、その商品カテゴリーのタクソノミーを’product_cat’としています。サンプルを利用する場合は任意のものに変えて使ってください。
関数作成
functions.phpにタームによる絞り込みを行えるようにする関数を記述します。
functions.php
今回は親子関係がある2階層目までを表示する仕組みにしています。
使う関数はget_terms()くらいです。
// 管理画面:投稿一覧でタームでの絞り込みを可能にする
add_action( 'restrict_manage_posts', 'add_post_product_cat_restrict_filter' );
function add_post_product_cat_restrict_filter() {
/* カスタム投稿タイプを取得 */
global $post_type;
/* タームで絞り込みを行いたいカスタム投稿タイプの場合 */
if ( 'product' == $post_type ) {
/* 検索's'の変数がセットされている場合 */
if ( isset( $_GET['s'] ) ) {
/* 選択されたターム情報を取得し、変数へ代入 */
$select_product_cat = $_GET['product_cat'];
}
/* タームのセレクトボックスを生成 */ ?>
<select name="product_cat">
<option value="">カテゴリー指定なし</option>
<?php
/* 最上位のターム一覧を取得。空のタームも含む。 */
$terms = get_terms( 'product_cat',
array( 'hide_empty' => false, 'parent' => 0 )
);
/* 取得したタームをオプションに変換 */
foreach ( $terms as $term ) {
/* 選択されたタームと同じタームの場合 */
( $term->slug == $select_product_cat ) ? $selected = 'selected' : $selected = '';
?>
<option value="<?php echo $term->slug; ?>" <?php echo $selected; ?>><?php echo $term->name; ?></option>
<?php /* 今回は2階層目まで表示したいので子を持っているターム一覧も取得 */
$child_terms = get_terms( 'product_cat',
array( 'hide_empty' => false, 'parent' => $term->term_id )
);
/* 子タームを取得できた場合 */
if( !empty( $child_terms ) ) {
/* 子タームをオプションに変換 */
foreach( $child_terms as $child_term ) {
/* 選択されたタームと同じタームの場合 */
( $child_term->slug == $select_product_cat ) ? $selected = 'selected' : $selected = '';
?>
<option value="<?php echo $child_term->slug; ?>" <?php echo $selected; ?>>ー <?php echo $child_term->name; ?></option>
<?php
}
}
} ?>
</select>
<?php
}
}
コメントを残す