ワードプレス:コメント投稿が承認待ち表示されない!改訂版

製作 プログラム

2017/03/12(日)

コメント投稿が承認待ち表示されない!改訂版

今回はコメント投稿について、メールアドレス入力不要と承認待ちを両立するための方法がありましたので、サンプルコードも入れながら紹介してます。

解決方法を教えてくださった方へ。この場を借りてお礼をさせてください。本当にありがとうございました。さっそくこのブログでも導入させていただいています。

そもそもの問題点はこちら(コメント機能で「承認待ち」が表示されない?)をお読みください。

「あなたのコメントは承認待ちです。」が表示される仕組み

ワードプレスはコメントをメールアドレスと紐付けてサーバ上のデータベースに保存しています。またそれとは別にコメントを書き込んだ方のブラウザのクッキー(Cookie)にも、コメントフォームに入力した名前とメールアドレスを保存します。

クッキーの中身はこんな感じ:


blog.dododori.com comment_author 入力した名前
blog.dododori.com comment_author_email 入力したメールアドレス

クッキーが保存されたブラウザで再度コメントを書き込んだページを見ると、クッキー内のメールアドレスとワードプレスのデータベース内のメールアドレスを比較します。

同じメールアドレスが見つかって、かつ、そのコメントがまだ承認されてなかったら、ココで始めて「あなたのコメントは承認待ちです。」が表示される仕組みとなっています。

なのでワードプレスで「承認待ちです。」を表示するには必ずメールアドレスが必要になる、というコトになります。

メールアドレス入力不要と承認待ちを両立!

んじゃメールアドレス入力不要と承認待ちメッセージの両立はできないの?

いや、そんなコトはない!というのが今回教えてもらった方法です。ちょっとだけソースコードをいじる必要があるので、難しく感じたら詳しい人に手伝ってもらうほうがいいかもしれません。

ではやっていきますね!

ワードプレスの自身が使っているテーマを編集します。管理画面左の「外観」→「テーマの編集」から「comments.php」という名前のファイルを探してください。「comments.php」を開くとややこしい英文がたくさん表示されますが、その中に一箇所だけ「comment_form();」という単語があると思います。この「comment_form();」を以下と置き換えてください。

※実際に作業される前にはcomments.phpをまるまるコピーするなどしていつでももとの状態に戻せるようにしておきましょう。

※下記コード内の[好きな文字列]と[好きなドメイン名]は[]ごと消して、自身が持っている独自ドメインなんかを入れ込んでくださいね。

設定例はこんなかんじ

substr(md5($_SERVER["REMOTE_ADDR"].'ramuneg'), 11, 10) . '@dododori.com'


comment_form(array('fields' => array(
'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' . '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30" maxlength="245"' . $aria_req . $html_req . ' /></p>',
'email'  => '<input id="email" name="email" type="hidden" value="' . substr(md5($_SERVER["REMOTE_ADDR"].'[好きな文字列]'), 11, 10) . '@[好きなドメイン名]' . '" />',
'url'    => '',
)));

あとは編集を保存するだけでコメント欄からメールアドレスとウェブサイトの入力欄がなくなり、またコメント後は「承認待ちです。」が表示されるようになります。

修正コードでやっていること

修正コード内の「author、email、url」はそれぞれコメントフォームに表示する「名前、メールアドレス、ウェブサイト」に対応しています。各項目を編集することでコメントフォームの表示を変えられます。

修正コードではauthorはデフォルト設定、emailはメールアドレスをランダムに生成、urlは表示しない、と設定しています。

メールアドレスを入力してもらうんじゃなくこちらでダミーのメールアドレスを用意し、まるで識別用IDのように使うことでメールアドレスの入力不要と「承認待ちです。」の両立をしています。

ランダムなメールアドレス
修正コードではコメントを書き込んでくれた方のIPアドレスを使ってランダムなメールアドレスを作っています。今回の場合作ったメールアドレスはどこにも公開されないので、「IPアドレスがばれちゃうかも…」みたいにセキュリティは気にしなくていいんです。

…でも、やっぱりなんとなくモヤモヤしちゃうもんです。なので今回はちょっとでもモヤモヤを減らすコードにしました。

具体的にはIPアドレスに[好きな文字列]を追加して、さらにその合体した文字列を特別な法則で変換し、さらにさらにその変換後文字列の一部のみを使用することで絶対に元のIPアドレスを辿れないようにしてあります。

ココまでしなくてホントはいいんですが安心して使える、という気持ちの問題も大事ですよね。

メールアドレス入力不要と承認待ちを両立できた!

今回はワードプレスのコメント投稿でメールアドレス入力不要と承認待ちを両立する方法をサンプルコードを交えて紹介しました。

テーマの編集をしなければいけないのでチョット敷居が高く感じますが、やってみればコピペするだけなので案外スグできると思います。元のcomments.phpをまるまるコピペしておくなどしていつでも戻せるようにしてぜひ試してみてくださいね!