管理画面のカスタム投稿でカテゴリーとタグの絞り込み検索を実装

  • 2015年11月2日
管理画面のカスタム投稿でカテゴリーとタグの絞り込み検索を実装

カスタムタクソノミーを利用した投稿画面でカテゴリーから絞り込み検索をしたいと思ったことはありませんか?そんな場合にプラグインなしでfunction.phpにコピーペーストするだけで実装できる方法をご紹介いたします。

絞り込み検索の表示部分の作成

投稿一覧にカテゴリーとタグの絞り込みのドロップダウンで作成します。

この機能の主だったところは「wp_dropdown_categories」というwordpress標準で用意された関数です。
この関数だけでは表示だけで実際に絞り込みできないため、さらに実際に絞り込みもできるように別の関数を制作し拡張します。

add_action( 'restrict_manage_posts', 'refineSearchPosts' );
// 投稿で絞り込み項目の表示
function refineSearchPosts() {
	global $typenow;
	$args =array( 'public' => true, '_builtin' => false );
	$post_types = get_post_types($args);
	if ( in_array($typenow, $post_types) ) {
		$filters = get_object_taxonomies($typenow);
		foreach ($filters as $tax_slug) {
			$tax_obj = get_taxonomy($tax_slug);

			// 値が入っているか確認する
			if (isset($_GET[$tax_obj->query_var])){
				$var = $_GET[$tax_obj->query_var];
			}else{
				$var = $tax_obj->query_var;
			}
			wp_dropdown_categories(array(
				'show_option_all' => __('すべての'.$tax_obj->label ),
				'taxonomy' => $tax_slug,
				'name' => $tax_obj->name,
				'orderby' => 'term_order',
				'selected' => $var,
				'hierarchical' => $tax_obj->hierarchical,
				'show_count' => true,	//カテゴリーに属する投稿数の表示
				'hide_empty' => false, //カテゴリー・タグが存在しなくても項目を表示する(何もない場合空のフォームができてしまうため)
			));
		}
	}
}

絞り込み機能の作成

絞り込みで選択されたカテゴリーとタグで実際に仕分けされるように下記の関数を配置します。
「add_filter」で「parse_query」を呼び出し、作成したパラメータを渡すことで選択したカテゴリー・タグで絞り込み機能を実装します。

// 絞り込み検索内容の変換処理
add_filter('parse_query','convertRefineContent');
function convertRefineContent($query) {
	global $pagenow;
	global $typenow;
	if ($pagenow=='edit.php') {
		$filters = get_object_taxonomies($typenow);
		foreach ($filters as $tax_slug) {
			$var =& $query->query_vars[$tax_slug];
			if ( isset($var) && $var>0)  {
				$term = get_term_by('id',$var,$tax_slug);
				$var = $term->slug;
			}
		}
	}
	return $query;
}