web-dev-qa-db-fra.com

Utilisez get_terms pour obtenir post_tags mais limiter à une taxonomie

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 .= ' &middot; '; 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?

1
Seth Rubenstein

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;
1
GhostToast