web-dev-qa-db-ja.com

カスタム分類法ですべての投稿タイプの合計数が表示されるのはなぜですか

カスタム分類法「season」を作成しました。この分類法を使用したい3つのカスタム投稿タイプがあります。これらは

  • 人種
  • ギャラリー
  • 競合他社

さて、分類画面内で合計を見ると(つまり、wp-adminのURLには次のように表示されています。edit-tags.php?taxonomy = season&post_type = race)

合計には、このカテゴリに分類される「人種」の投稿数だけでなく、すべてのカスタム投稿にわたるこのカテゴリの投稿数の合計が表示されます。

どうしてこれなの?そして、このカスタム投稿タイプのみを表示するように分類法を取得するにはどうすればよいですか。

enter image description here

5
Ash

分類カウントがグローバルであるという事実(すべての投稿タイプを含む)について、現在 trac ticket があります。 関連トラックチケット

これを修正するには、列を削除してmanage_edit-{$taxonomy}_columnsフィルターを使用して列を追加します。

add_filter('manage_edit-season_columns','my_season_columns');
function my_season_columns($columns){
    unset($columns['posts']);
    $columns['cpt_count'] = 'Races';

    return $columns;
}

それからWordPressにmanage_{$taxonomy}_custom_columnフィルターを使ってこの列に何を入れるかを伝えます。これについては、「cpt_count」列にあることを確認し、それまでのカウント数を返します。これを行うにはカスタム関数が必要です。

add_filter('manage_season_custom_column','my_season_alter_count',10,3);
function my_season_alter_count($value, $column_name, $id ){
    if( 'cpt_count' == $column_name )
        return wpse50755_get_term_post_count_by_type($id,'season','race');

    return $value;
}

最後に、カスタム関数wpse50755_get_term_post_count_by_typeを定義します。これは この回答から とされました。

function wpse50755_get_term_post_count_by_type($term,$taxonomy,$type){

  $args = array( 
    'fields' =>'ids',
    'numberposts' => -1,
    'post_type' => $type, 
     'tax_query' => array(
        array(
            'taxonomy' => 'event-category',
            'field' => 'id',
            'terms' => intval($term)
        )
      )
   );
   $ps = get_posts( $args );

   if (count($ps) > 0){
       return count($ps);
   }else{
       return 0;
   }
 }

これはテストされていませんが、概念的にはうまくいくはずです

列をソート可能にするには、もう少し作業が必要になります。WordPressに用語をカウント順(投稿タイプ固有)にソートするよう指示する方法を検討する必要があるためです。

5
Stephen Harris