私は以下のコードを使用して、すべての作者とその投稿を表示しています( "publication"というカスタム投稿タイプで)。これは動作しますが、投稿がないユーザーもリストします。投稿がある著者のみを表示するようにこのコードを変更する方法を教えてください。
ありがとうございました!
<h1>Articles by Author</h1>
<?php
$allUsers = get_users('orderby=title&order=ASC&post_type=publication');
$users = array();
// Remove subscribers from the list as they won't write any articles
foreach($allUsers as $currentUser)
{
if(!in_array( 'subscriber', $currentUser->roles ))
{
$users[] = $currentUser;
}
}
?>
<?php foreach($users as $user) { ?>
<div class="authorInfo">
<h2 class="authorName"><?php echo $user->display_name; ?></h2>
<?php query_posts( array( 'post_type' => 'publication', 'showposts' => -1, 'author'=>$user->ID ) ); while (have_posts()) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; ?>
</div>
<?php } ?>
更新:以下の答えからの関数と私が昨夜読んだいくつかのものを使って、ここに私が持っているものがある(まだ上で要求されたように働いていないが、あなたに私の最新のコードを渡したかった):
<?php
// count number of Articles (CPT) written by a user
function count_user_posts_by_type( $userid, $post_type = 'publication' ) {
global $wpdb;
$where = get_posts_by_author_sql( $post_type, true, $userid );
$count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" );
return $count;
$post_count = count_user_posts_by_type($userid, $post_type);
$allUsers = get_users('orderby=title&order=ASC&post_type=publication&role=author');
$users = array();
// CONDITIONAL -- IS THIS CORRECT?
if ($post_count > 0 ) {
// Remove subscribers from the list as they won't write any articles
foreach($allUsers as $currentUser)
{
if(!in_array( 'subscriber', $currentUser->roles ))
{
$users[] = $currentUser;
}
}
foreach($users as $user) { ?>
<h2 class="authorName"><?php echo $user->display_name; ?></h2>
<?php query_posts( array( 'post_type' => 'publication', 'showposts' => -1, 'author'=>$user->ID, 'orderby' => 'date', 'order' => 'DESC' ) );
while (have_posts()) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; ?>
<?php } } ?>
WordPress関数のデフォルトバージョンは、下記のようにデフォルトの投稿タイプ 'POST'の数を提供します。
<?php
$post_count = count_user_posts($userid);
?>
投稿タイプに基づいて投稿数を取得するには、以下のカスタム関数が必要です。
<?php
function count_user_posts_by_type( $userid, $post_type = 'post' ) {
global $wpdb;
$where = get_posts_by_author_sql( $post_type, true, $userid );
$count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" );
return $count;
}
?>
上記の関数の使い方
<?php
$post_count = count_user_posts_by_type($userid, $post_type);
?>
投稿数が増えたので、コードを条件付きループでラップします。
あなたの機能で使用する方法:
<?php
// count number of Articles (CPT) written by a user
function count_user_posts_by_type( $userid, $post_type = 'publication' ) {
global $wpdb;
$where = get_posts_by_author_sql( $post_type, true, $userid );
$count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" );
return $count;
}
$allUsers = get_users('orderby=title&order=ASC&post_type=publication');
$users = array();
// Remove subscribers from the list as they won't write any articles
foreach($allUsers as $currentUser)
{
if(!in_array( 'subscriber', $currentUser->roles ))
{
$users[] = $currentUser;
}
}
foreach($users as $user) {
$post_count = count_user_posts_by_type($user->id);
if ($post_count > 0 { ?>
<div class="authorInfo">
<h2 class="authorName"><?php echo $user->display_name; ?></h2>
<?php query_posts( array( 'post_type' => 'publication', 'showposts' => -1, 'author'=>$user->ID ) );
while (have_posts()) : the_post();
the_content();
endwhile; ?>
</div>
<?php }
}
?>