1. ホーム
  2. WordPress

【WordPress】get_the_author_meta で投稿者情報を取得・表示する方法

Share

WordPress のテーマで「記事を書いた人の名前」や「プロフィール文」を表示したいとき、よく使うのが get_the_author_meta()the_author_meta() です。投稿者の表示名・メールアドレス・自己紹介・サイト URL など、ユーザーが持つさまざまな情報を取り出せます。この記事では、2つの関数の違い、指定できるフィールドの種類、ループ内とループ外での書き分け、第2引数でのユーザー指定、そして実際の表示でつまずきやすい点までを、初心者にも分かるように解説します。

get_the_author_meta で何ができるか

get_the_author_meta() は、投稿者(WordPress に登録されたユーザー)の情報を1つ取得するための関数です。第1引数に「どの情報がほしいか」を表すフィールド名を渡すと、その値が返ってきます。たとえば表示名がほしければ 'display_name'、プロフィール文がほしければ 'description' を指定します。

取得できる情報は、ユーザーの基本情報(名前・メール・サイト URL)と、プロフィール画面で入力する自己紹介文などです。記事の著者欄やプロフィールボックス、著者アーカイブページなどを作るときに欠かせません。

the_author_meta との違い

よく似た名前の関数に the_author_meta() があります。違いはシンプルで、get_the_author_meta() は値を「返す」、the_author_meta() は値を「その場で出力(echo)する」という点です。get_ が付くほうは値を受け取って加工したり条件分岐に使ったりでき、付かないほうはテンプレートにそのまま書き出すのに向いています。

single.php
<?php
// 値を「返す」: 変数に入れて加工できる
$display_name = get_the_author_meta( 'display_name' );
echo esc_html( $display_name );

// 値を「出力する」: 自分で echo しない
the_author_meta( 'display_name' );
?>

つまり「あとで if で分岐したい」「文字を加工したい」場合は get_the_author_meta()、「取得した値をそのまま画面に出すだけ」なら the_author_meta() を選ぶ、と覚えておくと迷いません。

指定できる主なフィールド

第1引数に渡すフィールド名で、取得する情報が決まります。よく使うものを下の表にまとめました。フィールド名はすべて小文字で、アンダースコア区切りです。

フィールド名取得できる内容
IDユーザーの ID(数値)
display_nameブログ上の表示名(投稿者名として表示される名前)
user_loginログイン時のユーザー名(ログイン ID)
user_emailメールアドレス
user_urlプロフィールに登録したサイト URL
descriptionプロフィール文(自己紹介)
first_name名(ファーストネーム)
last_name姓(ラストネーム)
nicknameニックネーム

記事の著者名として画面に出すのは、ほとんどの場合 display_name です。user_login はログイン用のユーザー名なので、セキュリティ上、表に出さないほうがよい情報です。first_namelast_namenickname はユーザーが未入力だと空文字になる点に注意してください。

ループ内での基本の使い方

メインループや WP_Query のループの中では、第2引数を省略できます。省略すると、いま表示している投稿の投稿者が自動的に対象になります。single.php など、記事1件を表示するテンプレートでは、これがいちばん多い書き方です。

single.php
<?php while ( have_posts() ) : the_post(); ?>

  <p class="author">
    この記事を書いた人:
    <?php the_author_meta( 'display_name' ); ?>
  </p>

<?php endwhile; ?>

第2引数を省略したときに「現在の投稿者」を判定できるのは、ループ内でだけ機能する仕組みのためです。次に説明するループ外では、誰を対象にするかを自分で指定する必要があります。

ループ外や任意のユーザーを指定する

ループの外で使う場合や、「特定のユーザーの情報がほしい」場合は、第2引数にユーザー ID を渡します。ID を渡せば、いま表示している投稿とは関係なく、そのユーザーの情報を取得できます。

single.php
<?php
// ユーザーID が 1 の人の表示名を取得する
$name = get_the_author_meta( 'display_name', 1 );
echo esc_html( $name );

// 著者アーカイブページなら、表示中の著者IDを取得して渡せる
$author_id = get_queried_object_id();
$bio = get_the_author_meta( 'description', $author_id );
echo esc_html( $bio );
?>

著者アーカイブ(author.php)では、get_queried_object_id() で「いまアーカイブを表示している著者の ID」が取れます。これを第2引数に渡せば、ループに入る前でもその著者の情報を確実に取得できます。

プロフィールボックスを作る実践例

実際の記事下によくある「著者プロフィール」ボックスを作ってみましょう。アバター画像(get_avatar())、表示名、プロフィール文、サイトへのリンクを組み合わせます。アバターはユーザーのメールアドレスかユーザー ID を渡すと取得できるので、ここではメールアドレスを使います。

single.php
<?php
// ループ内で実行する想定
$author_url   = get_the_author_meta( 'user_url' );
$author_email = get_the_author_meta( 'user_email' );
?>
<div class="author-box">
  <?php echo get_avatar( $author_email, 80 ); ?>

  <p class="author-box__name">
    <?php the_author_meta( 'display_name' ); ?>
  </p>

  <p class="author-box__bio">
    <?php echo esc_html( get_the_author_meta( 'description' ) ); ?>
  </p>

  <?php if ( $author_url ) : ?>
    <a href="<?php echo esc_url( $author_url ); ?>">
      サイトを見る
    </a>
  <?php endif; ?>
</div>

ポイントは、user_url が空かどうかを if で確かめてからリンクを出していることです。サイト URL を登録していないユーザーもいるため、空のリンクが出ないように分岐しています。こうした「値を取得して条件分岐する」場面では、出力ではなく値を返す get_the_author_meta() が役立ちます。

メールアドレスをそのまま出力しない

user_email で取得したメールアドレスを画面にそのまま echo するのは避けましょう。メールアドレスがプレーンテキストでページに載っていると、迷惑メール送信業者のプログラム(スパムボット)に収集される恐れがあります。

どうしても表示する必要があるときは、WordPress の antispambot() を通すと、メールアドレスの文字を HTML の文字参照に変換して読み取られにくくできます。また、HTML として安全に出力するために esc_html() も併用します。

single.php
<?php
$email = get_the_author_meta( 'user_email' );
// 文字参照に変換してスパム対策しつつ出力する
echo esc_html( antispambot( $email ) );
?>

そもそも、訪問者にメールアドレスを見せる必要がないことも多いので、表示しないという選択も検討してください。

プロフィール文に改行や HTML を入れたいとき

description(プロフィール文)は、ユーザーが入力したテキストがそのまま保存されます。改行を入れても、出力時に <br> へ自動変換されるわけではないため、そのまま出すと改行が反映されません。投稿本文のように整形したい場合は、wpautop() を通すと段落や改行が補われます。

single.php
<?php
$bio = get_the_author_meta( 'description' );
// 改行を <p> や <br> に整形してから出力する
echo wpautop( esc_html( $bio ) );
?>

ここで注意したいのは、esc_html() を先に通している点です。プロフィール文に書かれたタグをそのまま HTML として解釈させると、意図しない表示崩れやセキュリティ上の問題につながります。テキストとして安全に処理してから整形するのが基本です。

the_author_meta が空になるとき

the_author_meta() を第2引数なしで使ったのに何も表示されない、という場合は、ループの外で呼んでいる可能性が高いです。第2引数を省略した the_author_meta() は「現在の投稿者」を前提にしているため、ループの外では対象が定まらず、空になることがあります。

ヘッダーやサイドバーなど、ループの外で投稿者情報を出したいときは、対象のユーザー ID を第2引数で明示してください。著者アーカイブなら get_queried_object_id()、特定のユーザーなら直接 ID を渡せば、ループの内外を問わず確実に値を取得できます。

まとめ

投稿者情報の取得は、2つの関数の違いと第2引数を押さえれば難しくありません。要点を振り返ります。

  • get_the_author_meta() は値を返し、the_author_meta() は値を echo する
  • 第1引数のフィールド名(display_namedescriptionuser_url など)で取得する情報を選ぶ
  • ループ内なら第2引数を省略すると現在の投稿者が対象になる
  • ループ外や任意のユーザーは、第2引数にユーザー ID を渡す
  • メールアドレスは antispambot()、プロフィール文は esc_html() など、出力時のエスケープを忘れない

まずは single.phpdisplay_name を表示するところから始め、必要に応じてプロフィールボックスや著者アーカイブへ広げていくのがおすすめです。

参考ページ