カスタム投稿タイプ一覧でカスタムタクソノミーのフィルターを実装するメモ。
フィルターの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("/<[^>]+>(.+)<\/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.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。