2013-03-14

[WordPress] カスタム投稿タイプでも管理画面で絞り込み検索を可能にする

WordPress
まったく気づいていなかったのですが、カスタム投稿タイプの場合は、
通常の投稿画面では存在する、カテゴリーでの絞り込み検索がないようです。
(カスタム投稿タイプの場合はカスタムタクソノミーでの絞り込み検索)
そこで追加するやり方を調べました。

functions.phpに以下を追加しました。
カスタム投稿タイプが「shop」
カスタムタクソノミーが「shop-cat」です。


参考サイトのソースをもとに、自分なりにカスタマイズしています。
親階層が1つあるものだったので、その前提で親階層の名称を含めるようにし、
わかりやすくなるように区切り線も入れました。
ソートも親カテゴリ名を追加した後でソートしています。
親カテゴリの名前の有無はいろいろと面倒ですね。。


// カスタムタクソノミーでフィルター (絞り込み機能)
add_action( 'restrict_manage_posts', 'add_post_taxonomy_restrict_filter' );
function add_post_taxonomy_restrict_filter() {
global $post_type;
if ('shop' == $post_type) {
?>
<select name="shop-cat">
<option value="">カテゴリー指定なし</option>
<?php
$terms = get_terms('shop-cat', 'orderby=term_group');

//親タクソノミーの名称を取得して配列を変更
foreach ($terms as $term) {
if ($term->parent > 0) {
$parents = get_term($term->parent, 'shop-cat');
$parent = $parents->name . " ";
$term->name = $parent . " " . $term->name;
} else {
$term->name = $term->name;
}
}

//親タクソノミーの名称を含んだ名前でソート
function compareArray($a, $b) {
if ( $a->name < $b->name ) return -1;
if ( $a->name > $b->name ) return 1;
return 0;
}
uasort($terms, "compareArray");

foreach ($terms as $term) {
//タクソノミーを選んだときにselectedがつくようにする
if ($term->slug === $_REQUEST['shop-cat']) {
$selected = " selected";
} else {
$selected = "";
}
//親タクソノミーが変わったら区切り線をいれる
if ($term->parent == 0) {
?>
<option>--------------------</option>
<?
}
?>
<option value="<?php echo $term->slug; ?>"<?php echo $selected; ?>><?php echo $term->name; ?></option>
<?php
}
?>
</select>
<?php
}
}


参考サイト
http://bem-memo.info/coding/【WordPress】カスタムタクソノミーでフィルター (絞り込み機能)ができるようにする/

コメント / トラックバック 4 件

  1. mono より:

    こんにちは。
    こちらの記事、参考にさせていただきました。
    ありがとうございます。

    一点、お聞きしたいのですが、
    こちらのカテゴリー絞り込みの中で
    「どのカテゴリーにも属していない」のだけを絞り込む事は可能でしょうか。

  2. nishi より:

    monoさん、コメントありがとうございます。

    こちらで紹介しているやり方はrestrict_manage_postsにフックをかけるやり方なので、
    残念ながら「どのカテゴリーにも属していない」ものを絞り込むことはできないと思います。

    お役にたてず申し訳ございません。

  3. mono より:

    ご返信ありがとうございます。

    そうなのですね、わかりました。
    しかし、それでなくともこの記事には救われました。

    ありがとうございました。

  4. nishi より:

    monoさん、コメントありがとうございます。
    そう言っていただけるととてもうれしいです。ありがとうございます。

Comment:

Trackback URL: