Contact Form 7에서 입력 값을 처리한 문자열을 자동 회신 메일에 부여
11482 단어 ContactForm7WordPress
그러한 경우에 예를 들어 hidden인 필드에 JS로 랜덤 캐릭터 라인을 생성해 두어 그것을 사용하는 것 같은 것을 하려고 하면,
그게 뭐야, ,,,
이번에는 이를 피하기 위해 이메일 주소와 같은 계정 관련 정보의 해시 값을 사용하는 방법을 소개합니다.
예상되는 흐름은 다음과 같습니다.
(문외 한이므로 다른 모범 사례가 있으면 가르쳐 주었으면 합니다)
임시 등록 양식 (ContactForm7)
メールアドレス:
[email* email]
[submit "仮登録する"]
임시 등록에 대한 회신 메일 본문 (ContactForm7)
仮登録フォームからの自動返信メールです
本登録URLはこちら
https://example.com/application?secret-id=[secret-id]
※URL流出時のリスクが増えるが、ユーザー的にはemailも自動で入力されていてくれた方が嬉しいかもしれない
-> https://example.com/application?secret-id=[secret-id]&email=[email]
function.php
// ハッシュ生成関数
// $srcに応じて一意に決まるものならなんでも良い
function wpcf7_make_hash($src) {
// 単にハッシュするだけだと推測されるかもしれないので適当に何か固定のデータをくっつけとく
return sha1("some-unguessable-string".$src);
}
// 仮登録用メール送信前フック
add_action("wpcf7_before_send_mail", "wpcf7_replace_secret_id");
function wpcf7_replace_secret_id($WPCF7_ContactForm) {
// もしフォーム毎に処理を変えたいならid()をチェック
if(your-form-id == $WPCF7_ContactForm->id()) {
$wpcf7 = WPCF7_ContactForm::get_current();
$submission = WPCF7_Submission::get_instance();
if ($submission) {
$data = $submission->get_posted_data();
$secretID = wpcf7_make_hash($data['email']);
$mail = $wpcf7->prop('mail'); // もし「メール2」の方を使うなら$mail = $wpcf7->prop('mail_2');
// メール本文中の[secret-id]を$secretIDで置換
$mail['body'] = str_replace('[secret-id]', $secretID, $mail['body']);
$wpcf7->set_properties(array(
"mail" => $mail // "mail_2" => $mail
));
return $wpcf7;
}
}
}
본 등록 양식 (ContactForm7)
[hidden secret-id default:get readonly] // ここにURLクエリパラメータのsecret-idが入力される
アカウント名:
[text* account-name]
メールアドレス:
[email* email]
; [email* email default:get] // URLクエリパラメータにemailというデータがあれば自動入力される
; [hidden* email default:get] // 自動入力するなら、場合によってはhiddenでも良いかもしれない
[submit "本登録する"]
function.php
// 本登録用バリデーション
add_filter( 'wpcf7_validate', 'wpcf7_validation_login_with_tmp_secret_id', 11, 2 );
function wpcf7_validation_login_with_tmp_secret_id( $result, $tags ) {
// secret-idという値が存在しないなら関係ないフォーム
if(is_null($_POST['secret-id'])) {
return $result;
}
foreach( $tags as $tag ) {
$name = $tag['name'];
if($name == 'email') {
// メールアドレスからハッシュを再生成して一致をチェック
if(wpcf7_make_hash($_POST[$name]) != $_POST['secret-id']) {
$result->invalidate( $tag, '仮登録の返信メールに記載のURL以外からアクセスしているか、またはメールアドレスが間違っています。');
}
// 実用的には、登録済みメールアドレスかどうかのチェックもこのあたりに入れておきたい
}
}
return $result;
}
참고로 한 페이지
해시 문자열 생성 : htps //w w. php. 네 t / 마누아 l / 그럼 / 훙 c 치온. 샤 1. php
메일 본문의 일부 대체 : htps //w w. 366세 rゔぃ세. 이 m/jp/쿠우/580아78아79에16c3193f02179822fb799d
메일 2는 mail_2 : htps //w w. Ret t. 이 m/r/을 rdp 렛 s/코멘 ts/3hljb8/이런 ct_후 rm_7_도 ぢfy_마이 l_오 f_세콘 d_레시피엔 t/
URL 매개 변수를 양식 항목에 자동 입력 : h tps : // 에카키 j. 코 m / wp - 난 ct - rm - 7 - 게 t 파라 r /
양식 데이터의 사용자 지정 유효성 검사 : htps : // 이 m/kd9951/이고 ms/1717fc384c16에00d6458
Reference
이 문제에 관하여(Contact Form 7에서 입력 값을 처리한 문자열을 자동 회신 메일에 부여), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nariakiiwatani/items/0637c39e41d3d0159fbc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)