韓国留学、ベルリン短期ワーホリ、転職、Webデザイン、英語勉強、旅行、食べ物、ディズニーなど

WordPress ログイン時にコメントの名前入力欄を手動で入力できるようにする方法

今作っているサイトが、会員制サイトで、ログインしているユーザーのみ閲覧できるサイトです。
しかも、1つのアカウント(購読者)で、すべての会員がログインするようにします。
それで、記事にコメントを書けるようにしたいのですが、普通にコメント欄を設置すると、ログイン状態では、名前などの入力欄の替わりに、「◯◯(ユーザー名orニックネーム)としてログイン中。ログアウトしますか?」という文言が表示されます。
今回、1つのアカウントを複数人で使っているので、自動でユーザー名が入力されるのではなく、手動で任意の名前を入力できるようにしたいと思います。

まず、名前などの入力欄の替わりに、「◯◯(ユーザー名orニックネーム)としてログイン中。ログアウトしますか?」という文言が表示される部分は、コメントを出力する、comment_form関数の、「logged_in_as」というパラメータで設定できます。何も設定していないと、デフォルトでこのような文言が出るように、wp-includes/comment-template.phpで書かれています。

なので、以前書いた記事「WordPressでブログ作り14(コメント欄)」の、「2、フォーム部分をカスタマイズ」に、ソースコードを載せていますが、最後の部分に「logged_in_as」のパラメータを追記します。
中身は、今回は名前の入力欄だけにしています。
comments.phpに、以下のソースコードを記述します。

<?php if(have_comments()): ?>
<h2 id="comments">コメント</h2>
<ol class="commets-list">
    <?php wp_list_comments('callback=mytheme_comment'); ?>
</ol>
<?php endif; ?>

<?php $args = array(
    'title_reply' => '',
    'label_submit' => 'コメントを投稿',
    'comment_notes_before' => '<p class="commentNotesBefore">※入力エリアすべてが必須項目です。</p>',
    'comment_notes_after'  => '<p class="commentNotesAfter">内容をご確認の上、「送信」ボタンを押してください。</p>',
    'fields' => array(
            'author' => '<p class="comment-form-author">' .
                        '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' placeholder="お名前" /></p>',
            'email'  => '',
            'url'    => '',
            ),
    'comment_field' => '<p class="comment-form-comment">' . '<textarea id="comment" name="comment" cols="50" rows="6" aria-required="true"' . $aria_req . ' placeholder="コメントする..." /></textarea></p>',
  'logged_in_as'  => '<p class="comment-form-author">' .
                        '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' placeholder="お名前(任意)" /></p>',
    );
comment_form( $args ); ?>

これで、ログイン時にも、名前の入力欄を表示することができました。

次に、入力した名前を、コメント一覧で反映させるために、以下のコードを、functions.phpに記述します。

//ログイン時もコメントに名前を入力
function my_pre_comment_author_name($name){
  $user = wp_get_current_user();
  if($user->ID && isset($_POST['author']))
 $name = trim(strip_tags($_POST['author']));
  return $name;
}
add_filter('pre_comment_author_name', 'my_pre_comment_author_name');

※名前欄に、何も入力しなかった場合は、ユーザー名またはニックネームが表示されます。今回は、名前の入力がなかった場合、「匿名」と表示したいので、管理画面 > [プロフィール]で、「ニックネーム」を「匿名」に変更し、「ブログ上の表示名」も「匿名」に設定しました。

※前提として、管理画面 > [設定] > [ディスカッション]で、「コメントの投稿者の名前とメールアドレスの入力を必須にする」のチェックをはずし、「ユーザー登録してログインしたユーザーのみコメントをつけられるようにする」にチェックを付けています。

参考サイト:「ログイン状態でもコメントに名前を入力

こちらの参考サイト様の記事を見て作りました。
こちらのサイトでは、ログイン時にも名前の入力欄を表示させるところを、wp-includes/comment-template.phpのログイン判定の分岐を編集しています。ただ、今回私はwp-includes内のファイルを編集することができなかったので、なんとかthemesフォルダ内のファイルをいじってできないかと結構悩んだのですが、「logged_in_as」というパラメータの性質がわかれば簡単でした。
(ログイン状態のとき、名前入力欄をlogged_in_asに変更するのはどこに書いてあって、それを止めるにはどうやってPHPを書いたら良いんだろう…ってPHPの知識があまりないのにかなり悩んでしまいました。)

スポンサーリンク

内容をご確認の上、「送信」ボタンを押してください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください