WordPressのコメントの重複規制をカスタマイズ
所沢でWebサイト制作や欧州輸入品販売を行っているRishunTradingです。
Wordpressで、ヤフオクのような「オークションサイト」を制作するに辺り、Wordpressの【コメント】機能を流用して、入札機能を実装しました。
ただ、Wordpressの【コメント】機能は、標準でスパム対策として「重複規制」がかかっております。そのため、連続で入札すると(同じコメントを投稿すると)、「重複しているコメントが見つかりました。同じコメントをすでに投稿しているようです。」と表示されてしまいます。
「オークションサイト」を制作するにあたっては、コメント機能(入札)の「重複規制」を許容する必要があり、一方でスパムも防ぎたいため、連続した「重複コメント」は許可しないが、しばらく経ってからの「重複コメント」は許容する。という形での実装が必要でした。
また、「重複コメント」を検出した場合の文言も、標準の文言ではなく、「連続の入札は禁止されています。しばらく経ってから入札して下さい。」という文言に変更する必要がありました。
そのため、今回は、連続した「重複コメント」は許可しないが、しばらく経って(今回は10分)からの「重複コメント」は許容するといったオリジナルの「重複規制」の実装方法と、「重複コメント」検出時の文言変更方法についてご紹介させて頂こうかと思います。
1.オリジナルの重複規制作成に利用できる「duplicate_comment_id」フィルター
入力されたコメントが重複しているかどうかは、「duplicate_comment_id」フィルターを利用することができます。
Wordpressの「comment.php」の中を見るとわかりますが、「duplicate_comment_id」フィルターの返り値($dupe_id)に「コメントID」が入っていると、重複コメントの確認処理に入っていきますので、直前の「duplicate_comment_id」フィルターにフックをかけて、必要な確認処理を実装し、問題なければ、「$dupe_id」をNLLにして返却してあげれば、重複コメントの確認処理に入っていきません。
comment.php in WordPress 6.0(688行目~718行目)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | $dupe_id = apply_filters( 'duplicate_comment_id', $dupe_id, $commentdata ); if ( $dupe_id ) { /** * Fires immediately after a duplicate comment is detected. * * @since 3.0.0 * * @param array $commentdata Comment data. */ do_action( 'comment_duplicate_trigger', $commentdata ); /** * Filters duplicate comment error message. * * @since 5.2.0 * * @param string $comment_duplicate_message Duplicate comment error message. */ $comment_duplicate_message = apply_filters( 'comment_duplicate_message', __( 'Duplicate comment detected; it looks as though you’ve already said that!' ) ); if ( $wp_error ) { return new WP_Error( 'comment_duplicate', $comment_duplicate_message, 409 ); } else { if ( wp_doing_ajax() ) { die( $comment_duplicate_message ); } wp_die( $comment_duplicate_message, 409 ); } } |
そこで、この「duplicate_comment_id」フィルターフックをかけて、オリジナルの重複規制を作成すれば良いわけです。
また、重複コメント検出時のエラーメッセージの内容も、本ソースを見るとわかりますが、20行目辺りの「comment_duplicate_message」フィルターフックをかければ、変更できる事がわかります。
2.「duplicate_comment_id」にフィルターフックをかけて、オリジナルの重複規制を作成
今回は、1度入札した場合には、10分は待たせる仕組みを設けるために、重複規制間隔は10分間としました。
今回制作したオリジナルの重複規制では、入札した時間から10分経過していない場合には、$dupe_idを返却し、10分以上経過している場合には、NULLを返却する事で、1度入札してから10分間は重複規制をかけ、10分経過後は、重複規制を外す事ができます。
functions.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //オリジナルの重複規制 add_filter('duplicate_comment_id', 'customize_duplicate_comment_id', 10, 2 ); function customize_duplicate_comment_id($dupe_id,$comment_data){ global $wpdb; $thisQuery = $wpdb->prepare( "SELECT comment_date FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_content = %s ORDER BY comment_ID DESC LIMIT 1", wp_unslash( $comment_data['comment_post_ID'] ), wp_unslash( $comment_data['comment_content'] ) ); $previoustime = $wpdb->get_var($thisQuery); $prevTime = strtotime($previoustime); $currentTime = current_time('timestamp'); $compareTime = $currentTime - $prevTime; if($compareTime > 600){ //10minutes return ; } return $dupe_id; } |
3.「重複コメント」検出時の文言変更
1.で記載した通り、「comment_duplicate_message」フィルターフックをかけてエラーメッセージを返却してあげれば完了です。
1 2 3 4 5 | add_filter('comment_duplicate_message', 'my_comment_duplicate_message', 10, 2 ); function my_comment_duplicate_message($message){ $error_message = "連続の入札は禁止されています。しばらく経ってから入札下さい。"; return $error_message; } |
以上、皆さまのお役に立てれば幸いです。
WEB DESIGN全てお任せ!ホームページ制作
RishunTradingでは、日本にはないコンセプトや高いデザイン性をもったヨーロッパ製品の輸入販売、及び、Webサイト制作事業などをおこなっております。
「全てお任せ!ホームページ制作」は、ドメイン取得からサーバー設定、レスポンシブルデザイン(スマホ、タブレット対応)、SEO対策がすべて含まれたお得なホームページを制作するサービス商品です。
運用開始後に「Webサイト運用管理サービス(保守)」と組み合わせて購入しますと、メンテナンス、更新も含めてすべて弊社で実施しますので、お客様は安心して本業に集中する事ができます。
しかもなんと、「全てお任せ!ホームページ制作」は、¥100,000!で提供しております。
本業が忙しい中小企業様に大変ご好評を頂いている商品です。
独自ドメイン取得
サーバー開設&設定
レイアウト設計
レスポンシブルデザイン
(*1)検索エンジン最適化
(SEO対策)場所Maps
お問い合わせフォーム
SSL化
各種SNS連携
運用マニュアル