获取前10名用户列表并按姓氏排序

时间:2013-03-14 作者:Squrler

我想根据他们的帖子数量显示前10位作者的列表,然后按姓氏排序。据我所知,这并不简单,因为用户的姓氏驻留在用户元表中。

我已经成功地编写了代码,以实现我所寻找的,请参阅下面的代码。然而,我想知道是否有可能优化这段代码,使其使用更少的db查询。有人有什么建议吗?

        <?php /* 1. Get list of 10 users with the most posts, sorted by post count. */ ?>
        <?php $blogusers = get_users(\'exclude=1,2&order=DESC&orderby=post_count&number=10\'); ?>

        <?php /* 2. Set up array with author ID\'s and user last names from the user meta table */ ?>
        <?php foreach($blogusers as $t){
            $user_info = get_userdata($t->ID);

            // Sanitises connecting words in last names to enable proper sorting
            $lastname = $user_info->user_lastname;
            $patterns = array();
            $patterns[0] = \'/van /\';
            $patterns[1] = \'/het /\';
            $patterns[2] = \'/de /\';
            $patterns[3] = \'/der /\';
            $patterns[4] = \'/\\\'t /\';
            $replacements = array();
            $replacements[0] = \'\';
            $replacements[1] = \'\';
            $replacements[2] = \'\';
            $replacements[3] = \'\';
            $replacements[4] = \'\';
            $cleaned_lastname = preg_replace($patterns, $replacements, $lastname);

            // Store cleaned last name with author ID key in array
            $poep[$t->ID] = $cleaned_lastname;
        } ?>

        <?php /* 4. Sort array based on last name */ ?>
        <?php asort($poep); ?>

        <?php /* 5. Display tiles */ ?>
        <?php $count =1;?>          

        <?php foreach ( $poep as $key => $val ) : ?>
        <?php $user = get_user_meta($key); ?>

        <a href="<?php echo get_author_posts_url($key); ?>" class="tile author_tile_link author_tile<?php if ($count % 5 == 0) { echo \' last\'; } ?>">
            <?php echo get_wp_user_avatar($key, \'thumbnail\'); ?>
            <div class=\'tile_content\'>
                <h2><?php echo get_the_author_meta(\'first_name\',$key).\' \'.get_the_author_meta(\'last_name\',$key); ?></h2>
                <span class="button">Zie alle artikelen</span>
            </div>
        </a>
        <?php $count++; ?>
        <?php endforeach; ?>

2 个回复
SO网友:sakibmoon

您正在foreach块中安排用户。你为什么不先把它们排列好,然后循环显示信息呢。如果这样做,您将只需要一个查询。

按以下顺序执行-
1。使用执行查询get_users. 可以添加额外的参数who=author. 这将强制只搜索作者。我相信反应会更好。这将返回WP_user 对象
2。使用foreach 要清洁的回路lastname
3。根据对象的lastname. 您可以使用usort() 为此
4。最后,使用另一个foreach 用于显示所有内容。

SO网友:Hasin Hayder

$data = $wpdb->get->results("SELECT * FROM (SELECT wp_users.ID, display_name, user_login, user_nicename, count(wp_posts.ID) AS n, substring_index(display_name,\' \',-1) AS lastname  FROM wp_users JOIN wp_posts ON wp_posts.post_author = wp_users.ID GROUP BY wp_posts.post_author ORDER BY n DESC LIMIT 10 ) AS SortedByCount ORDER BY lastname");
现在,您拥有了$数据数组中的所有内容。按帖子数量正确排序,然后按姓氏正确排序(自动计算)

这是一个简单的问题

选择*FROM(选择wp\\u users.ID、display\\u name、user\\u login、user\\u nicename、count(wp\\u posts.ID)作为n,substring\\u index(display\\u name,,-1)作为来自wp\\u的lastname。用户在wp\\u posts上加入wp\\u posts。post\\u author=wp\\u用户。ID按wp\\U帖子分组。post\\u author ORDER BY n DESC LIMIT 10)作为SortedByCount ORDER BY lastname

最好的

结束

相关推荐

How can i list random author?

Im列出所有作者列表的当前类别,但我想列出当前类别中的随机作者列表。我尝试了“order”=>“RAND”,RAND代码不起作用。我的代码:function getCurrentCatID(){ global $wp_query; if(is_category() || is_single()){ $cat_ID = get_query_var(\'cat\'); } return $cat_ID; } $cu