web-dev-qa-db-fra.com

Pourquoi ma taxonomie personnalisée affiche-t-elle un compte total pour tous les types de publication?

J'ai créé une taxonomie personnalisée "saison". J'ai trois types de publication personnalisés pour lesquels je souhaite utiliser cette taxonomie. Ceux-ci sont

  • Les courses
  • Galeries
  • Les concurrents

Maintenant, lorsque j’affiche les totaux dans l’écran de la taxonomie (c’est-à-dire que l’URL dans wp-admin est affiché: edit-tags.php? Taxonomy = season & post_type = race)

Les totaux indiquent le nombre total de messages de cette catégorie dans tous mes messages personnalisés, et pas seulement le nombre de messages de type "course" qui entrent dans cette catégorie.

Pourquoi est-ce? et comment puis-je obtenir la taxonomie pour afficher uniquement ce type d'article personnalisé?

enter image description here

5
Ash

Il existe actuellement un ticket trac sur le fait que les comptes de taxonomie sont globaux (inclure tous les types de publication). Billet de transport connexe .

Pour résoudre ce problème, vous pouvez supprimer la colonne et ajouter la vôtre à l'aide du filtre 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;
}

Vous indiquez ensuite à WordPress quoi remplir cette colonne avec l’utilisation du filtre manage_{$taxonomy}_custom_column. Pour cela, nous vérifions que nous sommes dans la colonne 'cpt_count' et que nous renvoyons le résultat. Vous aurez besoin d'une fonction personnalisée pour le faire.

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;
}

Enfin, définissez la fonction personnalisée wpse50755_get_term_post_count_by_type. Cela a été pris de cette réponse .

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;
   }
 }

Ceci n’a pas été testé, mais cela devrait fonctionner sur le plan conceptuel}.

Vous devrez faire un peu plus de travail pour rendre la colonne triable, car vous devrez déterminer comment demander à WordPress de trier les termes par ordre de décompte (type de post).

5
Stephen Harris