web-dev-qa-db-ja.com

Get_termsを使用してpost_tagsを取得しますが、分類法に限定します

だから私はカウントでトップ5のpost_tagsを取得したいのですが。ただし、Issueという投稿をさらに整理するために使用する追加の分類法があります。だから私は特定の分類法で投稿によって使用される上位5つの投稿タグを取得できるようにしたいです。

私は現在、カウントシステム全体で上位5件の投稿タグを取得することができますが、問題ありません。

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

簡単な部分です。これを特定の分類法の範囲内にある投稿に制限する方法についてのアイデアはありますか?

1
Seth Rubenstein

分類法が共有する投稿以外には、本当に共通点がないと確信しています。そのため、どのカテゴリが基準の候補であるかを知るために、実際の投稿のクエリを実行することは避けられません。

それは計算的には最善の方法ではないかもしれませんが、あなたはこのようなことをすることができます...

$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