问题描述
我想做的是有至少贡献一个帖子的用户列表。
我需要显示以下内容:
[用户照片] | [用户名] | [用户帖子数]
例如
[照片] 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。