[WP]カスタム・ポスト・タイプでのカテゴリー絞り込み

投稿者 admin on October 5, 2012

カスタム・ポスト・タイプは、WordpressをよりDB的に使いこなす場合に大変重宝する機能だ。

カスタム・タクソノミーと合わせて使えば、無理矢理投稿にpostmetaを付けてデータを管理するようなやり方を取らなくても、大量のデータを分類出来る。ただし、困った事に、アドミン画面に一覧表示した際に「絞り込み」ボタンが表示されない。これは、恐らくコアの作り込み不足が原因で、チケットを出しておけば、いずれは解決されるのかもしれない。

当面の解法としては、以下のコードを見つけたので紹介する。

add_action( 'restrict_manage_posts', 'my_restrict_manage_posts' );
function my_restrict_manage_posts() {
    global $typenow;//現在のカスタムポストタイプ
    if( $typenow != "page" && $typenow != "post" ){
        $filters = array($typenow);
        foreach ($filters as $tax_slug) {
            $tax_obj = get_taxonomy('place');//placeというタクソノミー
            $tax_name = $tax_obj->labels->name;
            $terms = get_terms('place' ,  array(
                 'hide_empty' => 0
            ));

            echo "<select name='$tax_slug' id='$tax_slug' class='postform'>";
            echo "<option value=''>Show All $tax_name";
            foreach ($terms as $term) { echo '<option value='. $term->slug, $_GET[$tax_slug] == $term->slug ? ' selected="selected"' : '','>' . $term->name .' (' . $term->count .')'; }
            echo "";
        }
    }
}

実際使ってみると階層のあるカテゴリーの場合、ドロップダウンには予想外のカテゴリーが並んでいるので、少々のチューンアップが必要?。get_termsの仕様

面白い事に、このコードでは実際の絞り込みは全く行なわれていない。カテゴリー(タクソノミー・ターム名)を列挙したselectフィールドを用意しているだけだ。こうすると検索クエリのGET値にタクソノミー関連のパラメータが追加され、勝手に絞り込まれる。つまり、元々コアが持っている機能をうまく利用している。まずは

add_action( 'restrict_manage_posts', 'my_restrict_manage_posts' )

これを調べられるかがポイントで、このフックを見つけない事には始まらない。アクションフックやフィルターの当たりを付けるのは大変難しい。

コメントをどうぞ

コメントを残す



(このメールアドレスは表示されません。)


Captcha認証コード

Captchaをクリックすると違う文字候補が出てきます。


Tags