feat: 手动实现表单邮箱验证码功能

This commit is contained in:
2026-08-31 22:55:48 +08:00
parent d860a34680
commit 092f89b2a8
4 changed files with 284 additions and 0 deletions
@@ -63,6 +63,10 @@ function itstudio_join_get_default_settings() {
'photo_public_notice' => 0,
'photo_inactive' => 0,
'signup_form_shortcode' => '',
'otp_enabled' => 0,
'otp_form_id' => '',
'otp_email_field_id' => '',
'otp_code_field_id' => '',
);
}
@@ -179,6 +183,10 @@ function itstudio_join_sanitize_settings($input) {
'result_second_interview_records' => itstudio_join_sanitize_records_value($input['result_second_interview_records'] ?? ''),
'result_admission_records' => itstudio_join_sanitize_records_value($input['result_admission_records'] ?? ''),
'signup_form_shortcode' => itstudio_join_sanitize_shortcode_value($input['signup_form_shortcode'] ?? ''),
'otp_enabled' => !empty($input['otp_enabled']) ? 1 : 0,
'otp_form_id' => absint($input['otp_form_id'] ?? 0),
'otp_email_field_id' => absint($input['otp_email_field_id'] ?? 0),
'otp_code_field_id' => absint($input['otp_code_field_id'] ?? 0),
);
foreach (itstudio_join_get_photo_field_map() as $field_key) {
@@ -2385,6 +2393,23 @@ function itstudio_join_render_settings_page() {
<p class="description">示例:<code>[formidable id="12"]</code></p>
</td>
</tr>
<tr>
<th scope="row">邮箱 OTP 验证</th>
<td>
<label for="itstudio_join_otp_enabled">
<input type="checkbox" id="itstudio_join_otp_enabled" name="itstudio_join_settings[otp_enabled]" value="1" <?php checked(!empty($settings['otp_enabled'])); ?>>
在报名表单提交前启用邮箱验证码
</label>
<p class="description">启用后,前台会在指定验证码字段旁自动显示“发送验证码”按钮,不需要手动添加 HTML 按钮。</p>
<p style="margin:10px 0 4px;"><label for="itstudio_join_otp_form_id">Formidable 表单 ID</label></p>
<input type="number" min="1" step="1" id="itstudio_join_otp_form_id" name="itstudio_join_settings[otp_form_id]" value="<?php echo esc_attr((string) ($settings['otp_form_id'] ?? '')); ?>" class="small-text">
<p style="margin:10px 0 4px;"><label for="itstudio_join_otp_email_field_id">邮箱字段 ID</label></p>
<input type="number" min="1" step="1" id="itstudio_join_otp_email_field_id" name="itstudio_join_settings[otp_email_field_id]" value="<?php echo esc_attr((string) ($settings['otp_email_field_id'] ?? '')); ?>" class="small-text">
<p style="margin:10px 0 4px;"><label for="itstudio_join_otp_code_field_id">验证码字段 ID</label></p>
<input type="number" min="1" step="1" id="itstudio_join_otp_code_field_id" name="itstudio_join_settings[otp_code_field_id]" value="<?php echo esc_attr((string) ($settings['otp_code_field_id'] ?? '')); ?>" class="small-text">
<p class="description">验证码字段建议使用 Short Text,设置为仅允许数字、最大长度 6。邮箱字段必须是 Email 类型。验证码有效期 10 分钟,同一邮箱 60 秒内不能重复发送,最多尝试 5 次。</p>
</td>
</tr>
</table>
<?php submit_button('保存设置'); ?>
</form>