Secura Vita

Category: Works , WordPress , Plugins
Works

wordrepss:管理画面のカスタム投稿一覧でカスタム分類(タクソノミー)の絞り込みをする。複数タクソノミー対応。

Tag:

wordrepss:管理画面のカスタム投稿一覧でカスタム分類(タクソノミー)の絞り込みをする。複数タクソノミー対応。

カスタム投稿タイプとカスタム分類(タクソノミー)を作った際に管理画面でタクソノミーから絞り込みたい時ってありますよね。

というよりあったほうが親切かと。

投稿とカテゴリーではデフォルトでできるんですがカスタム投稿だと自作しないといけません。

なのでそのやり方を書いていきます。

投稿タイプやタクソノミーを直接指定しなくてもいいように作ってみました。

複数のタクソノミーを1つの投稿タイプに設定してる場合でもOKです。

カスタム投稿一覧でタクソノミーで絞り込み機能を作る

投稿ではこんな感じでデフォルトでカテゴリーから絞り込みが可能です。

カスタム投稿一覧でカスタム分類(タクソノミー)の絞り込み

それをカスタム投稿とカスタム分類でやっていきます!

カスタム投稿タイプを作る

まずはカスタム投稿タイプを作成します。

ここでは仮に「製品」という投稿タイプを作成します。

functions.phpに書いても良いですがCustom Post Type UIというプラグインが簡単でわかりやすいのでおすすめです。

関数リファレンス/register post type – WordPress Codex 日本語版

めんどくさいのでいっつもこれ使ってます。

カスタム投稿一覧でカスタム分類(タクソノミー)の絞り込み

カスタム分類(タクソノミー)を作る

次にカスタム分類(タクソノミー)を作成します。

仮に「種類」というタクソノミーを作成します。

こんな感じで利用する投稿タイプにチェックを入れればその投稿タイプで使用できます。

カスタム投稿一覧でカスタム分類(タクソノミー)の絞り込み

カスタム分類「種類」にこんな感じでタームを作成しました。

カスタム投稿一覧でカスタム分類(タクソノミー)の絞り込み

カスタム投稿とカスタム分類(タクソノミー)を紐付ける

上でカスタム分類(タクソノミー)を作った際に利用する投稿タイプにチェックを入れていれば表面上はカスタム投稿タイプで使用できます。

ただ、これはタクソノミーからでしか投稿タイプを取得できないので投稿タイプからでも使用しているタクソノミーを取得できるようにします。

カスタム投稿一覧でカスタム分類(タクソノミー)の絞り込み

functions.phpに書く場合は投稿タイプ追加の記述(register_post_type)に以下を足してください。

'taxonomies' => array('classification'),

関数リファレンス/register post type – WordPress Codex 日本語版

絞り込みを作成する

あとは絞り込みを作成して完了です。

functions.phpに追加。

add_action( 'restrict_manage_posts', 'add_custom_taxonomies_term_filter' );
function add_custom_taxonomies_term_filter() {
	global $post_type;
	$object = get_post_type_object( $post_type );
	$taxonomies = $object->taxonomies;
	if( $taxonomies ) {
		foreach( $taxonomies as $taxonomy ) {
			$taxonomy = get_taxonomy( $taxonomy );
			wp_dropdown_categories(
				array(
					'show_option_all' => $taxonomy->label,
					'selected' => $taxonomy->name,
					'name' => $taxonomy->name,
					'taxonomy' => $taxonomy->name,
					'value_field' => 'slug', 
					'hide_empty' => false,
					'hierarchical' => true
				)
			);
		}
	}
}

軽く説明を。

4行目

カスタム投稿タイプの情報を取得します。

このやり方ではあえて投稿タイプを指定する必要がありません。

逆に絞り込みを表示させたくない投稿タイプがある場合は、都度投稿タイプで分岐させてください。

5行目

取得した情報から紐付いているカスタム分類(タクソノミー)を取得します。

上で説明しました「カスタム投稿とカスタム分類(タクソノミー)を紐付ける」をやっておかないとここにデータが入ってないんですよね。

7行目

カスタム分類(タクソノミー)のデータが入っていれば絞り込み用にリストを表示します。

タクソノミーのデータは配列で入っているのでforeachで取り出してやります。

9行目

タームリストは関数「wp_dropdown_categories」で表示します。

基本的にタクソノミーの情報を入れてやればいいんですが、1つだけ注意点があります。

value_fieldは必ずslugにしておいてください。

term_idやname等も指定できますがうまく絞り込みできなかったです。

テンプレートタグ/wp dropdown categories – WordPress Codex 日本語版

これでカスタム分類(タクソノミー)での絞り込みができるようになりました。

カスタム投稿一覧でカスタム分類(タクソノミー)の絞り込み

複数タクソノミーにも対応

このやり方は複数タクソノミーにも対応してます。

なので2つ以上のタクソノミーから絞り込みも可能です。

仮に「価格」というカスタム分類(タクソノミー)を追加します。

カスタム投稿一覧でカスタム分類(タクソノミー)の絞り込み

カスタム投稿「製品」に紐付け。

カスタム投稿一覧でカスタム分類(タクソノミー)の絞り込み

register_post_typeではこうなります。

'taxonomies' => array('classification','price'),

カスタム分類「価格」はこういう風にしました。

カスタム投稿一覧でカスタム分類(タクソノミー)の絞り込み

絞り込みはこうなります。

カスタム投稿一覧でカスタム分類(タクソノミー)の絞り込み

種類がアンプかつ価格が100000円~という絞り込みが可能になります。


おもしろかった・役に立った
▼ブログランキング参加中!クリック!▼
  • ブログランキング・にほんブログ村へ

Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ソースコードを記入する場合は [code]~[/code] でくくってください。
[code]
echo "Hello World";
[/code]

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください