Je voudrais donc obtenir le top 5 post_tags par nombre. Mais j’utilise une taxonomie supplémentaire que j’utilise pour organiser plus avant les publications appelées Issue. Je souhaite donc pouvoir obtenir les 5 meilleurs tags de publication utilisés par les publications dans une taxonomie donnée.
Je peux actuellement obtenir le top 5 des tags par nombre de postes, ce qui n’est pas un problème.
$taxonomies = array(
'post_tag'
);
$args = array(
'orderby' => 'count',
'order' => 'DESC',
'hide_empty' => true,
'exclude' => array(),
'exclude_tree' => array(),
'include' => array(),
'number' => '5',
'fields' => 'all',
'slug' => '',
'parent' => '',
'hierarchical' => true,
'child_of' => 0,
'get' => '',
'name__like' => '',
'pad_counts' => false,
'offset' => '',
'search' => '',
'cache_domain' => 'core'
);
$terms = get_terms ($taxonomies, $args);
$count = count($terms); $i=0;
if ($count > 0) {
$cape_list = '<p class="my_term-archive">';
foreach ($terms as $term) {
$i++;
$term_list .= '<a href="/term-base/' . $term->slug . '" title="' . sprintf(__('View all post filed under %s', 'my_localization_domain'), $term->name) . '">' . $term->name . '</a>';
if ($count != $i) $term_list .= ' · '; else $term_list .= '</p>';
}
echo $term_list;
}
Thats la partie facile. Des idées sur la façon de limiter cela aux publications qui se trouvent dans une taxonomie spécifique?
Je suis à peu près certain que les taxonomies n’ont vraiment rien en commun, si ce n’est les publications qu’elles partagent, aussi je pense que vous ne pouvez pas éviter d’exécuter une interrogation des publications afin de savoir quelles catégories sont candidates à vos critères.
Bien que ce ne soit peut-être pas la meilleure méthode de calcul, vous pourriez faire quelque chose comme ça ...
$args = array(
'post_type' => 'post',
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'my_required_taxonomy',
'field' => 'slug',
'terms' => 'my_required_term',
),
),
);
$loop = new WP_Query($args);
$out_array = array();
while($loop->have_posts()) : $loop->the_post();
$terms = get_the_terms($post->ID, 'my_variable_taxonomy');
foreach($terms as $term){
// note, can use term_id or whatever here instead
if(!array_key_exists($out_array[$term->term_slug])) {
$out_array[$term->term_slug] = 1;
} else {
$out_array[$term->term_slug]++;
}
}
endwhile;
wp_reset_query();
arsort($out_array); // edit: arsort is what you want
$slice = array_slice($out_array, 0, 5);
foreach($slice as $key => $value){
$term = get_term_by('slug', $key, 'my_variable_taxonomy'); // post_tag
$term_list .= '<a href="/term-base/' . $term->slug . '">'.$term->name.'</a>';
}
echo $term_list;