如何显示至少发表过1条帖子的用户列表?


8

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

我需要显示以下内容:

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

例如

[照片]乔·博格斯(8)

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

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

但是,这似乎只会使所有注册的用户返回博客,而不是返回已贡献用户,因此我当然不能正确地做到这一点。

我是wordpress和PHP的新手,因此将不胜感激。


Answers:


8

您需要在中设置who参数get_users

<?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();


IIRC显示具有发布功能的用户,而不是有效发布内容的用户。
gmazzap

我指的是是否已发布帖子if(!$ post_count){继续;
布拉德·道尔顿

彼得,我想我可以改善您的功能,看看我的回答;)
gmazzap

count_many_users_posts()计算一组多个用户时,应使用此功能以提高效率。
罗斯特(Rarst)2015年

6

有在WordPress没有默认的方式做这个任务,如彼得·古森指出,存在争论whoget_users()是回报用户即可以发布,而不是用户已经公布。

但是,您可以使用'pre_user_query'添加JOINSQL子句以仅获取具有至少一个帖子的用户。

老实说,当您查询按帖子数排序的用户时,该联接已经由WordPress创建,但是使用了OUTER LEFT JOIN,因此即使没有帖子的用户也会返回,因此您唯一需要做的就是将替换OUTER LEFT JOININNER 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' );

你必须打破我的泡沫,大声笑:-)。好答案,必须说。从来没有想过要诚实。+1
Pieter Goosen 2014年

多数民众赞成在知道的信息!谢谢你的帮助。刚刚尝试了您的解决方案,那也使我接近需要的地方。:)
Steakhousepi 2014年

3

从version开始4.3.0,您现在has_published_posts可以为get_users();函数调用指定参数。

array帖子类型传递给,以将结果过滤到以这些帖子类型发布过帖子的用户。true是所有公开帖子类型的别名。


if ( $users = get_users( array(
    'orderby'             => 'nicename',
    'order'               => 'ASC',
    'has_published_posts' => array( 'post' ),
    'blog_id'             => absint( get_current_blog_id() )
) ) ) {
    print_r( $users );
}

资源资源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.