如何根据帖子查看活动(查看次数)对wordpress分类类别进行排序

如何根据帖子查看活动(查看次数)对wordpress分类类别进行排序,wordpress,Wordpress,我用以下代码显示了wordpress分类类别 $video_args = array( 'hide_empty' => true, 'fields' => 'al

我用以下代码显示了wordpress分类类别

                            $video_args = array(                                        
                            'hide_empty' => true,                                       
                            'fields' => 'all',                                      
                            'hierarchical' => true,                     
                            'orderby' => 'term_order',                                      
                            'child_of' => 0,                                        
                            'get' => '',                                        
                            'name__like' => '',                                     
                            'pad_counts' => false,                                      
                            'taxonomy' => 'video-category',                                     
                            'cache_domain' => 'core'                                
                            );      
                        $v_terms = get_terms('video-category', $video_args);

现在,我想根据其内部帖子视图对类别进行排序。例如,如果类别中的音乐帖子大部分都会被查看,那么它应该成为第一个,等等。我该如何做到这一点

我带来了一个不同的解决方案,我首先想到的是一个自定义查询,它将获得每个术语的posts视图的
和。这将使每个类别有一个查询,如果您没有太多的类别,那么这个查询就不会太贪婪

首先,我们获取您的类别(这是您的原始代码,只是删除了
orderby
,因为它与此处无关):

然后我们查询每个类别的总视图数-请注意,这是一个未经测试的代码,但应该可以工作:

最后,按视图数对类别数组进行排序:

function cmp($a, $b) {
    if ($a->count_views == $b->count_views) {
        return 0;
    }
    return ($a->count_views > $b->count_views) ? -1 : 1;
}
usort($v_terms, "cmp");

你如何计算你的帖子浏览量,使用插件,或者你定义了一个自定义元?使用custom meta@vardif,如果你有一个更好的插件解决方案,没问题,告诉meCustom meta ok,但是你应该考虑为类别添加一个视图计数元,通过所有的内部帖子查询以获得总视图数,因为每个类别都是贪婪的。更好的解决方案是更改view count函数以增加类别计数。您能帮助我如何添加此功能吗?我收到一个错误,wpdb::prepare()缺少参数2,刚刚编辑了答案括号中有一个错误让我试试看我试过了但不确定它是否显示了正确的分类它显示了第一个未查看的帖子
// Query the total post count for each category
global $wpdb;
foreach($v_terms as $key => $term) {
    $count_views = $wpdb->get_results($wpdb->prepare("
        SELECT SUM(pm.meta_value) AS view_count FROM {$wpdb->postmeta} pm
        LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
        LEFT JOIN {$wpdb->term_relationships} tr ON p.ID = tr.object_id
        LEFT JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
        WHERE pm.meta_key = 'post_views_count'
        AND tt.taxonomy = 'video-category'
        AND tt.term_id = %d
    ", $term->term_id));

    // Add to the category object the result
    $v_terms[$key]->count_views = (!empty($count_views)) ? $count_views[0]->view_count : 0;
}
function cmp($a, $b) {
    if ($a->count_views == $b->count_views) {
        return 0;
    }
    return ($a->count_views > $b->count_views) ? -1 : 1;
}
usort($v_terms, "cmp");