私がやりたいことは、少なくとも1つの投稿に貢献したユーザーのリストを持っていることです。
次のことを示す必要があります。
[ユーザー写真] | [ユーザー名] | [ユーザー投稿数]
例えば.
[写真]ジョーブログ(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>';
}
?>
_編集_
私は早い回答をしたようです。あなたの質問と私の答えの中のコードはあなたが達成したいものへの出発点です。
私は今ラグビーを見るためにコードを書く時間がありませんが、これは作者と彼らの投稿数を表示するために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();
Pieter Goosen が指摘したように、WordPressにデフォルトの方法はありません。 can postを持つユーザーではなく、 can postを返すget_users()
の引数who
が存在します。 = /が投稿されました。
ただし、'pre_user_query'
を使用してJOIN
SQL句を追加すると、少なくとも1つの投稿があるユーザーのみを取得できます。
正直に言うと、投稿数でそれらを並べ替えるユーザーを照会すると、結合は既に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' );
バージョン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 );
}
リソース