カスタムタクソノミーを使ったフィルター : WordPress

Pocket

カスタム投稿タイプ一覧でカスタムタクソノミーのフィルターを実装するメモ。

フィルターのsubmitボタンはGETメソッドをリクエストする。リクエストはwp-includes/query.phpで処理される。restrict_manage_postsはフィルターのsubmitボタンの前に挿入される。フォーム要素を使って適切なパラメータを設定する。

» WordPressの投稿一覧でタグのフィルタリングを追加する | Simple Colors

/**
 * カスタム投稿タイプcustompostにはカスタムタクソノミーcustomtaxonomyを設定している
 * カスタム投稿タイプ一覧でカスタムタクソノミーでフィルターを行う
 */
add_action( 'init', 'create_customtpost' );
function create_custompost () {
    // カスタム投稿タイプ設定
    $labels = array(
        'name' => 'サンプル',
        'singular_name' => 'サンプル',
        'add_new' => 'サンプルを追加',
        'add_new_item' => '新しいサンプルを追加',
        'edit_item' => 'サンプルを編集',
        'new_item' => '新しいサンプル',
        'view_item' => 'サンプルを編集',
        'search_items' => 'サンプルを探す',
        'not_found' => 'サンプルはありません',
        'not_found_in_trash' => 'ゴミ箱にサンプルはありません',
        'parent_item_colon' => ''
    ); 
    $args = array(
        'labels' => $labels,
        'public' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'has_archive' => true,
        'supports' => array(
            'title',
            'editor'
        )
    );
    register_post_type('custompost', $args);
    // カスタムタクソノミー設定
    register_taxonomy(
        'custompost',
        'customtaxonomy',
        array(
            'hierarchical' => true, // カテゴリー形式
            'update_count_callback' => '_update_post_term_count',
            'label' => '分類',
            'singular_label' => '分類',
            'public' => true,
        )
    );
}


// 投稿一覧にカスタムタクソノミーによる分類を追加
function manage_example_columns ( $columns ) {
    $columns['tax'] = '分類';
    return $columns;
}
function add_custompost_column ($column, $post_id) {
    if ( 'tax' == $column ) {
        $value = get_the_term_list($post_id, 'customtaxonomy');
        $value = preg_replace("/<&#91;^>]+>(.+)<\/a>/","$1",$value);
        echo esc_attr($value);
    }
}
add_filter('manage_edit-costompost_columns', 'manage_custompost_columns');
add_action('manage_posts_custom_column', 'add_custompost_column', 10, 2);


// カスタムタクソノミーでフィルター
add_action( 'restrict_manage_posts', 'add_post_taxonomy_restrict_filter' );
function add_post_taxonomy_restrict_filter() {
    global $post_type;
    if ( 'custompost' == $post_type ) {
        ?>
        <select name="custompost">
            <option value="">--</option>
            <?php
            $terms = get_terms('customtaxonomy');
            foreach ($terms as $term) { ?>
                <option value="<?php echo $term->slug; ?>"><?php echo $term->name; ?></option>
            <?php } ?>
        </select>
        <?php
    }
}
?>

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。