著者一覧

ワードプレス

ユーザー一覧を出力し、それぞれに著者名、プロフィール、アバター、記事一覧へのリンクを表示します。

サンプルソース

<?php
$args = array(
	'role'         => 'author',
	'exclude'	=> array(),
//	'orderby'	=> 'ID',
	'orderby'	=> 'post_count',
	'order'		=> 'DESC'
);
$users = get_users( $args );
foreach( $users as $user ){
	$user_id = $user->ID;
	$author_name = get_the_author_meta( 'display_name', $user_id );
	$author_archive_link = esc_url( get_author_posts_url( $user->ID ) );
	$author_img = get_avatar( $user_id );
	$author_img_tag = '/<img.*?src=(["\'])(.+?)\1.*?>/i';
	if( preg_match( $author_img_tag, $author_img, $imgurl ) ){
		$author_img_url = $imgurl[2];
	}
?>
		<article class="author-profile">
			<div class="article-image author-thumbanil" style="background-image: url( <?php echo $author_img_url; ?> );"><?php /* <?php echo get_avatar( $user_id, 300 ); ?> */ ?></div>
			<div class="loop-content">
				<p class="author-name"><?php echo $author_name; ?></p>
				<div class="author-description"><?php echo wpautop( get_the_author_meta( 'description', $user_id ) ); ?></div>
				<p class="link-related"><a href="<?php echo $author_archive_link; ?>"><?php echo $author_name; ?>の記事を読む</a></p>
			</div>
		</article>
<?php } ?>

著者取得のパラメーター

権限グループで絞り込み

「role = XXX」

  • administrator
  • editor
  • author
  • contributor

マルチサイトで使われる「特権管理者」は、スラッグが分かりませんでした。

SuperAdmin、super_admin,、super-adminあたりだとは思うけど。

 

また、複数の権限を指定することは出来ないみたい。

'role'         => array( 'author', 'editor' )

こういうことをすると、何も出力しなくなります。

ので、権限ごとにサブループを回すとか、ユーザーを個別に除外するとか、配列を連結するとか、一工夫必要みたい。

除外

特定のユーザーを除外するには、ユーザーIDを指定します。

こっちは複数指定可。

'exclude'	=> array( 1, 2 )

条件分岐

一覧を取得した後「投稿があるならば」などの条件を加えて、管理者など投稿しないユーザーを除外しておけば、個別にIDで除外する手間がなくなるケースがあるかもしれません。

~略~
$get_posts_args = array(
		'post_type'        => 'post',
		'author'	   => $user_id
	);
	if( get_posts( $get_posts_args ) ){
?>
		<article class="author-profile">
			<?php /* 表示内容 */ ?>
		</article>
<?php }
~略~

「標準投稿に記事を書いていない人は著者一覧に出さないよ」という感じです。

ソート

ユーザー登録順、名前順、投稿数順等で並べ替えできます。

  • 古株から:「registered」「ASC」
  • 投稿の多い順:「post_count」「DESC」

任意の並べ替えは、カスタムフィールドを使えば出来るっぽい。

「専務が先で」「係長は最後で」とか面倒くさいことを言われた場合はこれでどうにかしないとならないですね。

アバター

例では標準の「Gravatar」から引っ張っています。

なんでこういうめんどくさい仕様になっているんだろうか???

これもカスタムフィールドを使えばいろいろ簡単になると思います。特にACF Proを使えば。

また、サイト内で完結できるようにするプラグインもあったはず。

カスタム投稿

ここまで、すべて標準投稿(post)でのお話。

「カスタム投稿タイプは除外したい」ケースがほとんどと思いますが、

  • 「カスタム投稿タイプ = コラム(column)」なんてのが追加してある
  • 標準投稿(post)と併用しているので、投稿タイプ串刺しで一覧出力したい

こういう場合、メインクエリーに細工が必要です。

 

「post」と「column」を串刺しにしたければこうなります。

/* ---------- functions.php ---------- */
function custom_pre_get_posts( $query ){
	if( is_admin() || !$query->is_main_query() ){
		return;
	}
	if( $query->is_author() ){
		$query->set( 'post_type', array( 'post', 'column' ) );
	}
}
add_action('pre_get_posts', 'custom_pre_get_posts');