You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Contact Form 7整表单失效验证实现问题(基于WPPB)

在Contact Form7中实现表单级全局验证并阻止提交

你当前使用的wpcf7_before_send_mail钩子可以实现需求,但更贴合表单验证逻辑的是使用wpcf7_validate钩子,以下是两种可行方案:

方案一:使用wpcf7_validate钩子(推荐,标准验证流程)

这个钩子在表单验证阶段触发,能将自定义错误和CF7原生错误统一展示,更符合用户体验。

1. 修改钩子注册

替换原有的wpcf7_before_send_mail注册:

private function define_public_hooks()
{
    $plugin_public = new Unitel_Sim_Registration_Public( $this->get_plugin_name(), $this->get_version() );
    // 注册wpcf7_validate钩子,优先级10,接收2个参数
    $this->loader->add_action( 'wpcf7_validate', $plugin_public, 'custom_form_validation', 10, 2 );
}

2. 实现验证逻辑

在Unitel_Sim_Registration_Public类中添加验证方法:

public function custom_form_validation( $result, $tag )
{
    $submission = WPCF7_Submission::get_instance();
    if ( !$submission ) {
        return $result;
    }

    // 安全获取提交数据,避免未定义索引报错
    $email = sanitize_email( $posted_data['uscr-email'] ?? '' );
    $cvr = sanitize_text_field( $posted_data['uscr-cvr'] ?? '' );

    // 执行自定义检查
    if ( !$this->customer_exists( $email, $cvr ) ) {
        // 添加表单级全局错误,null表示不绑定到单个字段
        $result->invalidate( null, '未找到客户,请检查您输入的邮箱和CVR信息' );
    }

    return $result;
}

方案二:基于原有wpcf7_before_send_mail钩子改造

如果坚持使用原有钩子,需要利用第二个引用参数$abort阻止邮件发送,并添加表单错误:

1. 修改验证方法参数

调整方法签名,接收$abort引用参数:

public function before_email_send( $contact_form, &$abort )
{
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();
    $email = sanitize_email($posted_data['uscr-email'] ?? '');
    $cvr = sanitize_text_field($posted_data['uscr-cvr'] ?? '');
    $customer = $this->customer_exists( $email, $cvr );

    if ( ! $customer )
    {
        // 添加全局错误信息到表单
        $contact_form->add_error( '未找到客户,请检查您输入的邮箱和CVR信息' );
        // 设置$abort为true,阻止邮件发送和提交流程
        $abort = true;
    }
}

注意事项

  • 确保customer_exists方法能正确处理空值情况,避免数据库查询报错;
  • 两种方案都会在表单顶部显示自定义错误信息,和CF7原生错误样式一致;
  • 若需要自定义错误样式,可通过CSS定位CF7的.wpcf7-response-output元素修改。

内容的提问来源于stack exchange,提问作者Roland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 04:44:56