コンテキスト: 訪問者が Wordpress でコメント フォームを送信したときに、preprocess_comment のデータを検証したいと考えています。特定のパラメーターが満たされていない場合、次の 3 つのことを実行したいと考えています。
- コメントは保存されません
- 訪問者がフォームを含むページに戻り、そのフィールドに送信された値が事前入力されます
- コメント フォームが変更され、CAPTCHA を含むフォーム要素が追加されます。
私はこのようなことをしようとしました:
function myplugin_validate($comment) {
add_action('comment_form_logged_in_after', 'comment_form_captcha_field');
return $comment;
}
add_action('preprocess_comment', 'myplugin_validate');
function comment_form_captcha_field() {
echo "....";
}
ただし、このアプローチは機能しません。
preprocess_comment でフローを停止する方法はありません。comment_form_captcha_field() が呼び出されることはないため、ユーザーが送信した値が事前入力されたコメント フォームに戻ることはありません。
もちろん、送信された値をセッションに保存する、ユーザーを preprocess_comment (wp_redirect) からリダイレクトする、ページをリロードした後にセッションから値を取得するなどの「汚い」代替手段があります。または、JS を介して送信ハンドラーをインターセプトし、そこから移動することもできます。
WordPress のコメント システムにフックして、javascript やセッションなどに頼らずにこれを行う方法があるのだろうかと思います。