问题描述

我想做的是有至少贡献一个帖子的用户列表。

我需要显示以下内容:

[用户照片] | [用户名] | [用户帖子数]

例如

[照片] Joe Bloggs(8)

我做了一个开始,走了这条路线:

<?php
   $blogusers = get_users( 'orderby=post_count' );
      foreach ( $blogusers as $user ) {
      echo '<li>' . esc_html( $user->display_name ) . '</li>';
   }
?>

然而,这似乎只是返回所有注册到博客的用户,而不是那些贡献的用户,所以我当然不是正确的。

我是新来的 wordpress 和 PHP 所以所有的帮助将不胜感激。

最佳解决方法

您需要在 get_users 中设置 who 参数

<?php
   $blogusers = get_users( 'orderby=post_count&who=authors' );
      foreach ( $blogusers as $user ) {
      echo '<li>' . esc_html( $user->display_name ) . '</li>';
   }
?>

编辑

好像我正在快速回答。您的问题和答案中的代码是您想要实现的开始。

我现在没有时间去编码,不要看橄榄球,但是这里是二十四版中用来显示作者和他们的帖子数的完整代码。希望这可以帮助

function twentyfourteen_list_authors() {
    $contributor_ids = get_users( array(
        'fields'  => 'ID',
        'orderby' => 'post_count',
        'order'   => 'DESC',
        'who'     => 'authors',
    ) );

    foreach ( $contributor_ids as $contributor_id ) :
        $post_count = count_user_posts( $contributor_id );

        // Move on if user has not published a post (yet).
        if ( ! $post_count ) {
            continue;
        }
    ?>

    <div class="contributor">
        <div class="contributor-info">
            <div class="contributor-avatar"><?php echo get_avatar( $contributor_id, 132 ); ?></div>
            <div class="contributor-summary">
                <h2 class="contributor-name"><?php echo get_the_author_meta( 'display_name', $contributor_id ); ?></h2>
                <p class="contributor-bio">
                    <?php echo get_the_author_meta( 'description', $contributor_id ); ?>
                </p>
                <a class="button contributor-posts-link" href="<?php echo esc_url( get_author_posts_url( $contributor_id ) ); ?>">
                    <?php printf( _n( '%d Article', '%d Articles', $post_count, 'twentyfourteen' ), $post_count ); ?>
                </a>
            </div><!-- .contributor-summary -->
        </div><!-- .contributor-info -->
    </div><!-- .contributor -->

    <?php
    endforeach;
}

只需在模板文件中调用它即可

twentyfourteen_list_authors();

次佳解决方法

WordPress 中没有默认的方式来执行此任务,正如 Pieter Goosen 指出的那样,存在参与者 for get_users() 返回可以发布的用户,而不是发布的用户。

但是,您可以使用'pre_user_query'JOIN SQL 子句添加到只能获取至少有一个帖子的用户。

说实话,当你查询用户通过邮寄计算订购它们的时候,这个连接是由 WordPress 创建的,但是使用 OUTER LEFT JOIN,所以即使没有帖子的用户也可以返回,所以你需要的只是将 OUTER LEFT JOIN 替换为 INNER JOIN

function filter_users_have_posted( $user_query ) {
   $user_query->query_from = str_replace( 'LEFT OUTER', 'INNER', $user_query->query_from );
   remove_action( current_filter(), __FUNCTION__ );
}

add_action( 'pre_user_query', 'filter_users_have_posted' );

$blogusers = get_users( 'orderby=post_count&order=desc' );

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。