我试图在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
。