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

Contact Form 7 条件触发免发信跳转时出现invalid_json错误如何解决

问题排查与修复方案

核心问题原因

  • 判断逻辑误用赋值运算符:你代码中if判断里的$service = "Full Package for Single"是赋值操作,不是等值判断,无论用户选的是什么service,这里都会被赋值为目标值,判断逻辑完全失效,正确应该用==或者===做等值判断。
  • 重定向逻辑不符合CF7的提交机制:当前版本Contact Form 7默认走REST API接口提交表单,前端提交后要求返回标准JSON格式响应,你直接在服务端执行wp_redirect+exit会打断CF7的响应生成流程,直接返回302重定向响应,前端无法解析自然会报invalid_json错误。
  • 潜在字段类型不匹配问题:表单提交的applicant_pin默认是字符串类型,你预设的邮编数组是数字类型,部分严格场景下会出现匹配失败的问题。

修复后的完整实现

第一步:服务端代码(添加到主题functions.php或自定义插件中)

add_action( 'wpcf7_before_send_mail', 'wpcf7_check_redirection', 10, 1 );
function wpcf7_check_redirection( $contact_form ) {
    // 只处理目标表单
    if( $contact_form->id() != 2852 ) {
        return;
    }
    
    $submission = WPCF7_Submission::get_instance();
    if ( ! $submission ) {
        return;
    }
    
    $cf7_data = $submission->get_posted_data();
    $service = $cf7_data['service'] ?? '';
    $pincode = intval( $cf7_data['applicant_pin'] ?? 0 );
    $saltLake = array(700064, 700091, 700097, 700098, 700105, 700106, 700059, 700101, 700135, 700102, 700157, 700159);

    // 匹配条件:服务符合+邮编在列表内
    if ( in_array( $service, array("Full Package for Single", "Full Package for Couples") ) && in_array( $pincode, $saltLake ) ) { 
        // 跳过邮件发送
        $contact_form->skip_mail = true;
        // 给提交实例加标记,后续用来加跳转参数
        $submission->add_custom_property( 'need_redirect', true );
    }
}

// 向CF7响应中添加重定向参数
add_filter( 'wpcf7_feedback_response', 'wpcf7_add_redirect_param', 10, 2 );
function wpcf7_add_redirect_param( $response, $result ) {
    $submission = WPCF7_Submission::get_instance();
    if ( $submission && $submission->get_custom_property( 'need_redirect' ) ) {
        $response['redirect_url'] = "https://example.com/services/";
    }
    return $response;
}

第二步:前端JS代码(添加到表单页页脚或主题自定义JS文件中)

document.addEventListener( 'wpcf7submit', function( event ) {
    // 检查响应中是否有重定向地址
    if ( event.detail.response && event.detail.response.redirect_url ) {
        window.location.href = event.detail.response.redirect_url;
    }
}, false );

验证说明

修改后提交表单如果满足匹配条件,CF7会正常返回JSON响应,前端接收到响应中的redirect_url参数后自动执行跳转,不会再出现JSON解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:06:04