少なくとも1つの投稿を行ったユーザーのリストを表示する方法は?


8

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

以下を示す必要があります。

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

例えば

[写真] Joe Bloggs(8)

私はスタートしてこのルートを下りました:

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

ただし、これは投稿したユーザーではなく、ブログに登録されているすべてのユーザーを返すだけのようです。そのため、私は間違いなく正しく行っていません。

私はワードプレスとPHPを初めて使用するので、すべての助けをいただければ幸いです。


スタイルを整えたいですか?これを試してくださいwpsites.net/web-design/author-contributors-page-template
ブラッドダルトン

回答:


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>';
   }
?>

編集

素早い返事をしたようです。あなたの質問と私の答えのコードは、あなたが達成したいことの始まりです。

今はコードを書く時間がないので、ラグビーを観戦する時間はありませんが、著者とその投稿数を表示するために24で使用されている完全なコードを次に示します。お役に立てれば

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でこのタスクを実行するデフォルトの方法はありません。PieterGoosenが指摘したように、投稿したユーザーでなく、投稿できるユーザーを返すwhoための引数が存在します。get_users()

ただし、を使用'pre_user_query'してJOINSQL句を追加し、少なくとも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' );

あなたは私のバブルを破裂する必要があります、笑:-)。すばらしい答えです。その方向で正直であるとは決して考えなかった。+1
Pieter Goosen 14

知っておくと便利な情報です。ご協力いただきありがとうございます。ちょうどあなたの解決策を試してみました、そしてそれは私が私がいる必要がある場所に近づきます :)
steakpi 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 );
}

資源

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.