問題描述

我想做的是有至少貢獻一個帖子的使用者列表。

我需要顯示以下內容:

[使用者照片] | [使用者名稱] | [使用者帖子數]

例如

[照片] 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。