あまり案件で使うことはないですが、ブログなどの記事ページで記事作成者情報を表示したい場合があります。
今回は作成者情報の表示についてメモしました。
「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(); ?>