問題描述
我想做的是有至少貢獻一個帖子的用户列表。
我需要顯示以下內容:
[用户照片] | [用户名] | [用户帖子數]
例如
[照片] 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="http://<?php%20echo%20esc_url(%20get_author_posts_url(%20$contributor_id%20)%20);%20?>">
<?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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。