2015年7月8日水曜日

WordPress管理画面の絞り込み検索をカスタマイズする

WordPressにカスタム投稿を追加しても、管理画面の一覧で「絞り込み検索」ができるのは「日付」だけだったのですが、これもカスタマイズできるということなので、やってみました。

タクソノミーで絞り込み検索する場合の例


カスタム投稿を survey 、タクソノミーを jobtype とすると、

add_action('restrict_manage_posts', 'restrict_listings_by_jobtype');
function restrict_listings_by_jobtype() {
    global $typenow;
    if ($typenow == 'survey') {
        $taxonomy = 'jobtype';
        $jobtype_taxonomy = get_taxonomy($taxonomy);
        wp_dropdown_categories(array(
            'show_option_all' =>  "すべての{$jobtype_taxonomy->label}",
            'taxonomy'        =>  $taxonomy,
            'name'            =>  $jobtype_taxonomy->name,
            'orderby'         =>  'term_order',
            'selected'        =>  $_GET[$jobtype_taxonomy->query_var],
            'hierarchical'    =>  $jobtype_taxonomy->hierarchical,
            'depth'           =>  3,
            'show_count'      =>  false,
            'hide_empty'      =>  true,
        ));
    }
}
add_filter('parse_query', 'convert_jobtype_id_to_taxonomy_term_in_query');
function convert_jobtype_id_to_taxonomy_term_in_query($query) {
global $pagenow;
  global $typenow;
  if ($pagenow == 'edit.php') {
  $filters = get_object_taxonomies($typenow);
  foreach ($filters as $tax_slug) {
    $var = &$query->query_vars[$tax_slug];
    if ( isset($var) && $var>0)  {
    $term = get_term_by('id', $var, $tax_slug);
    $var = $term->slug;
    }
  }
  }
  return $query;
}
 参考

カスタムフィールドで絞り込み検索する場合の例


カスタム投稿を {my-post-type} 、カスタムフィールドを {gender} とすると、

add_action('restrict_manage_posts', 'restrict_listings_by_gender');
function restrict_listings_by_gender() {
global $typenow;
$selected = array();
if ($typenow == '{my-post-type}') {
echo '<select name="filter_gender">';
echo '<option value="">すべての性別</option>';
$selected[$_GET['filter_gender']] = 'selected';
echo '<option value="male" '. $selected["male"] . '>男</option>';
echo '<option value="female" '. $selected["female"] . '>女</option>';
echo '</select>';
}
}
add_filter('parse_query', 'gender_query');
function gender_query($query) {
global $pagenow;
global $typenow;
if ($pagenow == 'edit.php' && $typenow == '{my-post-type}' && $_GET['filter_gender']) {
$query->query_vars[ 'meta_key' ] = '{gender}';
$query->query_vars[ 'meta_value' ] = $_GET['filter_gender'];
}
return $query;
}

デフォルトで表示されている投稿日付で絞り込み検索を非表示にする


カスタム投稿を {my-post-type} とすると、

add_action( 'load-edit.php' , 'custom_load_edit' );
function custom_load_edit() {
add_filter( 'disable_months_dropdown' , 'custom_disable_months_dropdown' , 10 , 2 );
function custom_disable_months_dropdown( $false , $post_type ) {
$disable_months_dropdown = $false;
$disable_post_types = array( '{my-post-type}' );
if( in_array( $post_type , $disable_post_types ) ) {
$disable_months_dropdown = true;
}
return $disable_months_dropdown;
}
}

0 件のコメント:

コメントを投稿