我试图在API调用后更改Contact Form 7结果的状态,以便在需要时可以在前端返回错误(例如,默认情况下,ajax响应中该错误将在表单下显示红色错误)

我正在使用 Forms3rdPartyIntegration 插件,但这只是给了我一个回调钩子(Hook),可以在其中尝试更改CF7输出(https://github.com/zaus/forms-3rdparty-integration)

据我所知,CF7状态是只读的?我看不到仅提供mail_sent_ok状态即可停止CF7的方法

add_action('Forms3rdPartyIntegration_service', array(&$this, 'service_callback'), 10, 2);

public function service_callback($response, $results) {

    $submission = WPCF7_Submission::get_instance();
    $cf7 = WPCF7_ContactForm::get_current();

    // check for errors (code omitted)
    // this is what I am essentially trying to do
    // but doesn't work
    $submission->status = 'mail_failed'
    $cf7->skip_mail = true;

    ...
}

如果有人能触发CF7失败响应,我将不胜感激。

这似乎是一个类似的问题
wordpress invalidate cf7 after api call

最佳答案

我知道这是一个古老的问题,但是对于任何遇到此问题的人,我认为您正在寻找的是:

if(your_condition) {
    add_filter("wpcf7_ajax_json_echo", function ($response, $result) {
        $response["status"] = "mail_sent_ng";
        $response["message"] = "Validation errors occurred. Please confirm the fields and submit it again.";
        return $response;
    });
}

这将给出状态mail_sent_ng而不是mail_ok_sent
$response["message"]还将设置显示给用户的错误/ajax消息。

由于您的代码中已经包含$cf7->skip_mail = true,因此您已停止发送邮件,并且使用上述代码,已向用户显示错误。

您还可以使用状态validation_error

09-03 22:55