web-dev-qa-db-ja.com

少なくとも1投稿したユーザーの一覧を表示する方法?

私がやりたいことは、少なくとも1つの投稿に貢献したユーザーのリストを持っていることです。

次のことを示す必要があります。

[ユーザー写真] | [ユーザー名] | [ユーザー投稿数]

例えば.

[写真]ジョーブログ(8)

私はスタートを切ってこの道を進んだ:

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

しかし、これは投稿した人ではなくブログに登録されているすべてのユーザーを返すように思われるので、私は確かに正しくやっていない。

私はwordpressとPHPに慣れていないので、すべての助けをいただければ幸いです。

8
steakpi

get_userswhoパラメータを設定する必要があります。

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

_編集_

私は早い回答をしたようです。あなたの質問と私の答えの中のコードはあなたが達成したいものへの出発点です。

私は今ラグビーを見るためにコードを書く時間がありませんが、これは作者と彼らの投稿数を表示するために14で使用される完全なコードです。お役に立てれば

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();
8
Pieter Goosen

Pieter Goosen が指摘したように、WordPressにデフォルトの方法はありません。 can postを持つユーザーではなく、 can postを返すget_users()の引数whoが存在します。 = /が投稿されました。

ただし、'pre_user_query'を使用してJOIN SQL句を追加すると、少なくとも1つの投稿があるユーザーのみを取得できます。

正直に言うと、投稿数でそれらを並べ替えるユーザーを照会すると、結合は既に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' );
6
gmazzap

バージョン4.3.0以降、get_users();関数呼び出しにパラメータhas_published_postsを指定できるようになりました。

投稿タイプの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 );
}

リソース

2
Michael Ecklund