会員サイトの構築にプラグイン「Wp-members」を使って、ユーザー情報にハンドル名を追加して、それをコメント欄にコメント投稿者の名前として表示させる方法をご紹介します。ログイン中ユーザーのユーザー情報の取得にはget_userdata()関数、投稿済みコメントの投稿者のユーザー情報を取得するにはget_comment()関数でコメントの情報を取得してから取得します。

コメント欄にユーザー名はセキュリティ上使えない

WordPressで会員サイトを運営しています。

サポートの一環として、コメント機能を使って、コンテンツに対して質問してもらったり不具合の報告を受け付けようと考えました。

その際に、コメント欄に質問、報告をしてくださった方の名前を表示させたいので、ユーザー名ではなく「ハンドル名」を表示させようと考えました。

ユーザー名を使いたくない理由は、WordPressへのログインIDそのものなので、それを会員サイトとは言え表示するのはセキュリティ上好ましくないと考えたからです。

ハンドル名をユーザー情報として追加する

そこで、まずはユーザー情報にはない”ハンドル名”を追加する必要があります。

会員サイトの構築にはプラグイン「Wp-members」を使っています。

そこで、Wp-membersの設定画面を使って、フィールドに”ハンドル名”を追加します。メタキーとしては”handle”を設定します。

そして、この値をコメント欄に表示させるようにします。

投稿済みコメントのユーザーとこれからコメント投稿するユーザー

コメント欄には、既に投稿済みのコメントがある場合があります。

当たり前ですが、投稿済みコメントを投稿したユーザーとログイン中のユーザーは、それぞれ取得方法が異なります。(たまたま、両方が一致する可能性はありますが)

登録済みコメントに関する情報は、get_comment()関数で、ログイン中ユーザーの情報は、get_userdata()関数で取得します。

参考ページ:https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_comment

参考ページ:https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_userdata

コメントフォームをカスタマイズする

コメントフォームをカスタマイズして、コメント投稿者のハンドル名とログイン中ユーザーのハンドル名を表示させるようにします。

コメント欄の表示カスタマイズは、comments.phpを編集しますが、投稿済みのコメントの表示をカスタマイズするためには、comments.phpで投稿済みコメント一覧を表示しているwp_list_comments関数でコールバック関数を設定します。

そして、functions.phpで、設定したコールバック関数の具体的な中身を記述します。

comments.phpを編集してコメント欄をカスタマイズする

まず、投稿済みブログを表示させる箇所には、コールバック関数を指定します。

以下では、コールバック関数を「mytheme_comment」としています。

次に、以下の様な手順で、ログイン中ユーザーのハンドル名を$handleに取得して任意の箇所に表示させます。

ハンドル名が設定されていない場合は、$handleに”(ハンドル名未設定)”と設定するようにしています。

functions.phpで指定したコールバック関数を記述する

mytheme_comment関数は、

$GLOBALS[‘comment’] = $comment;

というおまじないのような行から定義します。

おまじない行の次の行からは具体的なコードを記述しますが、変更元となるコードは、WordPressのphpファイルの中の「class-walker-comment.php」の”function comment()”からコピーしてきて貼り付けます。

そして、ハンドル名を表示させたい箇所を編集します。

コメント投稿者のハンドル名を表示したい箇所の前で、以下の方法でハンドル名を取得します。

”$comment->user_id”でコメント作成者の ID が取得できます。

(注)ログインユーザーとコメント投稿ユーザーは違う

私が勘違いしたから同じ勘違いをする人がいるという訳ではありませんが、私がやったミスをご紹介します。

functions.phpで定義するコールバック関数の中で、最初は以下の様にユーザー情報を取得しましたが、これはログイン中のユーザー情報を取得しているので間違いです。

$user = wp_get_current_user();
$user_info = get_userdata($user -> ID);

不具合修正としては、$commentに紐付いているuser_idを使ってユーザー情報を取得します。

$user_info = get_userdata($comment->user_id);

これで、$user_infoを使うことで、コメントを投稿したユーザーのハンドル名を取得することができました。