メールアドレスを入れないコメントは、後からサイトを訪れたときに、自分のコメントかどうか確かめようがないと思いますよ。
> gblsm さん
コメントありがとうございます。
cookieが効いている限り、メールアドレスを入れなくても承認待ちは表示されるのではないでしょうか?
もしそうでなかったとしても、コメントをした時にだけ「あなたのコメントは承認待ちです」と表示されれば問題はありません。
メールアドレスを入れないと「あなたのコメントは承認待ちです」は表示されないのでしょうか?
すでに承認されたコメントの投稿者のコメントを許可し、
WordPressが同じコメント投稿者だと判断する条件は「投稿者名とメールアドレスの両方が一致する」です。cookieは使っていません。
> gblsm さん
すでにコメントを許可したコメントについては問題ないです。
問題はその前の承認する以前の段階で、投稿者がコメントした時に「あなたのコメントは承認待ちです」と表示されないといった点というわけです。
「あなたのコメントは承認待ちです」の表示については、メールアドレスを入れなくても表示されると思うのですが、自分のブログには表示されないといった事です。
ごめんなさい、確認不足でした。cookieは使われていますが、テーマがコメント一覧を表示するときにテンプレートタグ comments_template を使っているなら、「ログインしていないコメント投稿者の未承認コメント」を表示する条件は以下のとおりです。
- メールアドレスが空文字列ではない、かつ
- 直前にコメント入力フォームを送信したときのメールアドレス(cookieに保存されます)と、未承認コメントのメールアドレスが一致する
テンプレートタグ comments_template は、WordPress本体の wp-includes/comment-template.php の中にあり、下記のようなコードが使われています。
/*
* Comment author information fetched from the comment cookies.
*/
$commenter = wp_get_current_commenter();
// 中略
/*
* The email address of the current comment author escaped for use in attributes.
* Escaped by sanitize_comment_cookies().
*/
$comment_author_email = $commenter['comment_author_email'];
// 中略
if ( $user_ID ) {
$comment_args['include_unapproved'] = array( $user_ID );
} elseif ( ! empty( $comment_author_email ) ) {
$comment_args['include_unapproved'] = array( $comment_author_email );
}
$comments = get_comments( $comment_args );
こんにちは、
間違っていましたので、全文訂正
functions.php
function validate_message( $approved , $commentdata ){
if( empty( $commentdata['comment_author_email'] ) ) {
wp_die( '<p>メール書いてないので、ちょっと待ってね</p>' );
}
}
add_filter( 'pre_comment_approved' , 'validate_message' , '99', 2 );
で、どうでしょうか?
訂正の訂正
function validate_message( $approved , $commentdata ){
if( empty( $commentdata['comment_author_email'] ) ) {
wp_die( '<p>メール書いてないので、ちょっと待ってね</p>' );
}
return $approved;
}
add_filter( 'pre_comment_approved' , 'validate_message' , '99', 2 );
> gblsm さん
どうもありがとうございます。
なるほど、comments_templateを使ってる時点で、メールアドレスを何かしら入れないと承認待ちコメントは表示されないわけですね。
ちょっと対応策を考えてみます…。
> notia さん
コメントありがとうございます。
メールアドレスが無かった場合にエラーを出すという事でしょうか?
基本的にはメールアドレスを必須項目にはしないようにしようと思ってます。
コメント一覧を取得する関数 get_comments の中にアクションフック pre_get_comments があり、pre_get_posts フックみたいに使えるそうです。もしかすると利用できるかも(調べていませんが)。
Reference / Hooks / WP_Comment_Query::get_comments / pre_get_comments
基本的にはメールアドレスを必須項目にはしないようにしようと思ってます。
あくまで推定ですが、
たぶん、ご使用になっているテーマでは、
add_theme_support( 'html5', array(
'search-form', 'comment-form', 'comment-list', 'gallery', 'caption'
) );
のような指定がされていなくて、html4形式でのコメントフォームが使われていると思います。
なので、必須項目を未記入でもエラーが表示されていないんじゃないかと想像しています。
なんで、エラー表示として表示したのかというと、
4.3にアップデートした場合、上記のhtml5サポートをしていない状態でも、
ERROR: please fill the required fields (name, email).
としてはじかれるようになるためです。
tested 4.3-alpha-32711 + Twentyfifteen
line115 add_theme_support(…)をコメントアウトした状態で、フォーム入力をチェックして確認(ちょっとしかテストしていないので、確認してみてください)
いろいろやり方は、あると思いますが、その辺りも視野に入れて頑張ってください
> nobita さん
返信ありがとうございます。
何もいじってない他のテーマ(ワードプレス公式テーマ)などを使ってみも、インストールしたばかりのワードプレスでも同様の事が起こってます。
メールアドレスを入力しないと、承認待ちのコメントが出ない状況です…。
皆さん色々とご提案ありがとうございます。
現在の所、原因が掴めないですが、もうちょっと頑張ってみます。
もしくは、メールアドレスを入れなかった人に対して、
「コメントありがとうございます。 現在承認中です」
なるコメントを出せれば…と考えて色々調べてます…。
takeshi29さん、「メールアドレスを入力しないと、承認待ちのコメントが出ない」原因は、WordPressのテンプレートタグ comments_template がそういう仕様だからです。(少なくともコードを確かめた結果からは、そうだと思います)
対策は、comments_template の代わりをする関数を自作して、それをテーマで使えばよいと思います。関数 get_comments は承認待ちのコメントも取得できるので。
> gblsm さん
ありがとうございます!
comments_templateをなんとかカスタマイズしてみて頑張ってみます!