在WordPress按角色获取可分页的用户列表并显示最新文章这篇文章中我们已经介绍了获取单个角色的用户列表,如果想获取多个角色的用户列表呢,get_users函数中的role并不支持数组,这时我们就要把多个数组进行合并,使用array_merge()将两个或多个数组的单元合并起来,使用array_slice() 函数在数组中根据条件取出一段值,并返回。

多个角色的排列顺序将以array_merge()函数中单元的排列为顺序,比如:array_merge($editors,$authors,$contributors);,顺序则为编辑、作者和投稿者,每个角色中可以再进行排序。

完整的获取多个角色的代码,添加到模板页面即可:


<section class="user_content">
    <?php $number = 8;//定义每页要显示的用户数量 ?>
    <!-- 作者 -->
    <ul>
        <?php
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;//查明当前页码数
        $offset = ($paged - 1) * $number;//计算应该在页面(偏移)被传递过来的用户数量,这将在第二页开始生效
        $editors = get_users(
            array(
                'blog_id'=> 1,
                'orderby' => 'post_count',
                'order' => 'DESC',
                'role' => 'editor'
            )
        );//获取编辑
        $authors = get_users(
            array(
                'blog_id' => 1,
                'orderby' => 'post_count',
                'order' => 'DESC',
                'role' => 'author'
            )
        );//获取作者
        $contributors = get_users(
            array(
                'blog_id' => 1,
                'orderby' => 'post_count',
                'order' => 'DESC',
                'role' => 'contributor'
            )
        );//获取投稿者
        $users = array_merge($editors,$authors,$contributors);//使用array_merge()将两个或多个数组的单元合并起来
        $query = array_slice($users, $offset, $number);//array_slice() 函数在数组中根据条件取出一段值,并返回
        $total_users = count($users);//使用 count() 这个PHP函数来获取用户总数
        $total_query = count($query);//当前用户数量
        $total_pages = intval($total_users / $number) + 1;//计算应创建的总页数
        foreach ($query as $user) { ?>
        <?php global $wp_query; $display_name = $user->display_name; ?>
        <li>
            <?php echo $display_name; ?>
        </li>
        <?php } ?>
    </ul>
    <!--分页-->
    <?php if ($total_users > $total_query) {echo '<div class="wp-pagenavi">';$current_page = max(1, get_query_var('paged'));echo paginate_links(array('base' => get_pagenum_link(1) . '%_%','format' => '/page/%#%/','current' => $current_page,'total' => $total_pages));echo '</div>';}?>
</section>