記事ページでの投稿者情報の取得と表示

2024.06.13

あまり案件で使うことはないですが、ブログなどの記事ページで記事作成者情報を表示したい場合があります。
今回は作成者情報の表示についてメモしました。
「single.php」の記事ページで使うことを想定しています。

ユーザーIDをもとにユーザーデータの取得をする。

表示されている記事ページのユーザーIDをもとにユーザー詳細情報を取得して表示します。

// ユーザーデータからユーザーログイン名(ユーザー名)を取得
$userID = get_post_field( 'post_author', get_the_ID() );
$userData = get_userdata($userID);
$username = $userData->user_login;

//カスタムフィールドから取得することも可能。第二引数にユーザーIDを指定する必要があり、通常のACFとは異なるので注意
$userInfoFrigana = get_field('userInfo_hiragana', 'user_' . $userID);
$userInfoKanji = get_field('userInfo_knaji', 'user_' . $userID);

別の方法では「$user_info->ID;」でユーザー情報を取得する方法もあります。上記とは異なったユーザー情報を取得できるそうです。
具体的にどんなデータが取れるかは未検証です。

// 記事の投稿者のIDを取得
$post_author_id = get_post_field( 'post_author', get_the_ID() );
// IDからユーザー情報を取得
$user_info = get_userdata( $post_author_id );
// ユーザーIDを変数に代入
$user_id = $user_info->ID;
// ユーザーの表示名を表示
$username = $user_info->user_login;

get_userdata(ユーザーID)で取得できる情報

<?php
// 現在の投稿のIDを取得
$post_id = get_the_ID();

// 投稿の著者IDを取得
$post_author_id = get_post_field('post_author', $post_id);

// 著者のユーザー情報を取得
$user_info = get_userdata($post_author_id);

// ユーザーIDを取得
$user_id = $user_info->ID;

// ユーザーのログイン名を取得
$username = $user_info->user_login;

// メールアドレスを取得
$email = $user_info->user_email;

// 表示名を取得
$display_name = $user_info->display_name;

// ユーザーページへのURLを取得
$user_url = get_author_posts_url($user_id);
?>

<!-- 著者情報を表示 -->
<div class="author-info">
    <p>ユーザーID: <?php echo esc_html($user_id); ?></p>
    <p>ユーザー名: <?php echo esc_html($username); ?></p>
    <p>メールアドレス: <?php echo esc_html($email); ?></p>
    <p>表示名: <?php echo esc_html($display_name); ?></p>
    <p>ユーザーページ: <a href="<?php echo esc_url($user_url); ?>">プロフィールページ</a></p>
</div>

現在の記事作者の別の記事を表示する。

たまにサイトで見たことがあるかもしれません。記事ページの下部でよく使われています。
authorでIDを指定して記事を絞り込み、表示をします。

現在表示してる記事の除外もしています。

<?php
	// 現在の投稿のIDを取得
	$post_id = get_the_ID();

	// 投稿の著者IDを取得
	$post_author_id = get_post_field('post_author', $post_id);

	$args = array(
			'post_type' => 'blog',
			'author' => $post_author_id, // 著者のID
			'post__not_in' => array(get_the_ID()), // 現在の投稿を除外
			'posts_per_page' => 3, // 表示する投稿数
	);
	$the_query_news = new WP_Query($args);
?>
<ul class="activityList">
<?php if ( $the_query_news->have_posts() ) : ?>
	<?php while ($the_query_news->have_posts()) : $the_query_news->the_post(); ?>
		<li>
			<a href="<?php the_permalink(); ?>">
				<?php if (has_post_thumbnail()) : ?>
					<?php the_post_thumbnail(); ?>
				<?php else: ?>
					<img src="<?php echo get_template_directory_uri(); ?>/" alt="" >
				<?php endif ; ?>
				<div>
					<span class="title"><?php the_title(); ?></span>
				</div>
			</a>
		</li>
	<?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
totop Page Top