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_ が付くほうは値を受け取って加工したり条件分岐に使ったりでき、付かないほうはテンプレートにそのまま書き出すのに向いています。
<?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_name や last_name、nickname はユーザーが未入力だと空文字になる点に注意してください。
ループ内での基本の使い方
メインループや WP_Query のループの中では、第2引数を省略できます。省略すると、いま表示している投稿の投稿者が自動的に対象になります。single.php など、記事1件を表示するテンプレートでは、これがいちばん多い書き方です。
<?php while ( have_posts() ) : the_post(); ?>
<p class="author">
この記事を書いた人:
<?php the_author_meta( 'display_name' ); ?>
</p>
<?php endwhile; ?>
第2引数を省略したときに「現在の投稿者」を判定できるのは、ループ内でだけ機能する仕組みのためです。次に説明するループ外では、誰を対象にするかを自分で指定する必要があります。
ループ外や任意のユーザーを指定する
ループの外で使う場合や、「特定のユーザーの情報がほしい」場合は、第2引数にユーザー ID を渡します。ID を渡せば、いま表示している投稿とは関係なく、そのユーザーの情報を取得できます。
<?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 を渡すと取得できるので、ここではメールアドレスを使います。
<?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() も併用します。
<?php
$email = get_the_author_meta( 'user_email' );
// 文字参照に変換してスパム対策しつつ出力する
echo esc_html( antispambot( $email ) );
?>
そもそも、訪問者にメールアドレスを見せる必要がないことも多いので、表示しないという選択も検討してください。
プロフィール文に改行や HTML を入れたいとき
description(プロフィール文)は、ユーザーが入力したテキストがそのまま保存されます。改行を入れても、出力時に <br> へ自動変換されるわけではないため、そのまま出すと改行が反映されません。投稿本文のように整形したい場合は、wpautop() を通すと段落や改行が補われます。
<?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_name・description・user_urlなど)で取得する情報を選ぶ - ループ内なら第2引数を省略すると現在の投稿者が対象になる
- ループ外や任意のユーザーは、第2引数にユーザー ID を渡す
- メールアドレスは
antispambot()、プロフィール文はesc_html()など、出力時のエスケープを忘れない
まずは single.php で display_name を表示するところから始め、必要に応じてプロフィールボックスや著者アーカイブへ広げていくのがおすすめです。