it-swarm.com.de

Verwenden Sie get_terms, um post_tags abzurufen, aber beschränken Sie sich auf eine Taxonomie

Also möchte ich die Top 5 post_tags nach Anzahl erhalten. Aber ich habe eine zusätzliche Taxonomie, die ich verwende, um Posts namens Issue weiter zu organisieren. Ich möchte also in der Lage sein, die Top-5-Post-Tags zu erhalten, die von Posts in einer bestimmten Taxonomie verwendet werden.

Ich kann momentan die Top 5 Posts Tags nach Anzahl der Systemweiten bekommen, das ist kein Problem.

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

Das ist der einfache Teil. Irgendwelche Ideen, wie dies auf Posts beschränkt werden kann, die sich in einer bestimmten Taxonomie befinden?

1
Seth Rubenstein

Ich bin mir ziemlich sicher, dass die Taxonomien wirklich nichts gemeinsam haben, außer Posts, die sie gemeinsam nutzen. Ich denke, Sie können es nicht vermeiden, eine tatsächliche Abfrage von Posts durchzuführen, um herauszufinden, welche Kategorien für Ihre Kriterien in Frage kommen.

Es ist zwar möglicherweise nicht die rechnerisch beste Methode, aber Sie könnten so etwas tun ...

$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