wpcf7_before_send_mail 中的自定义错误消息

问题描述 投票:0回答:5

在发送电子邮件之前,我使用联系表单 7 及其

wpcf7_before_send_mail
操作与 API 进行交互。如果 API 返回错误,我希望能够捕获该错误,将其显示为错误并阻止提交表单。

我似乎无法在网上找到我要找的东西。我能做的最好的事情就是使用

mail_sent_ok
消息字符串并显示其中的错误(这显然不是解决方案)。

基本上,最终的解决方案是强制表单提交失败。

还有同样的情况吗?

wordpress contact-form-7
5个回答
4
投票

我不确定您提出问题时是否可能,但 wpcf7_before_send_mail 挂钩有一个中止标志,您只需设置该标志即可避免发送邮件。

例如在伪 PHP 中

add_action('wpcf7_before_send_mail', 'your_function', 10, 3);
function your_function($form, &$abort, $object){
  $error = 1;
  if($error != 0) {
      $abort = true;
      $object->set_response("An error happened");
  }
}

1
投票

根据 Louise-Philippe 的回答,我用这段代码解决了,因为 $object 参数恰好总是 null:

add_action('wpcf7_before_send_mail', 'your_function', 10, 3);
function your_function($form, &$abort, $object){
  $error = 1;
  if($error != 0) {
      $abort = true;
      $msgs = $form->prop('messages');
      $msgs['mail_sent_ng'] = "An error happened"; //<- your custom error message
      $form->set_properties(array('messages' => $msgs));
  }
}

注意:它不是

mail_sent_ok
而是
mail_sent_ng
,因此您可以将红色边框作为预定义的错误消息。


1
投票

我不知道是否有人还需要这个。但您可以使用以下内容来完成这项工作。

$submission = WPCF7_Submission::get_instance();
$submission->set_response( 'the message' )

0
投票

您可以使用此过滤器进行自定义验证:

add_filter("wpcf7_validate", function ($result, $tags) {

    $valid = FALSE; // here you can do your API call to calculate the validation

    if (!$valid) {

        $result->offsetSet(
              "reason"
            , ["your-name" => "error message for this field"]
        );

    }


    return $result;

}, 10, 2);

your-name
必须是此表单的现有字段的名称。


0
投票
add_action('wpcf7_before_send_mail', 'your_function', 10, 3);
function your_function($form, &$abort, $object){
  $error = 1;
  /*if($error != 0) {
      $abort = true;
      $msgs = $form->prop('messages');
      $msgs['mail_sent_ng'] = "An error happened"; //<- your custom error message
      $form->set_properties(array('messages' => $msgs));
  }*/
  //echo "<pre>";
  //print_r($_SERVER);
  $current_site_ip_country_code = $_SERVER['HTTP_CF_IPCOUNTRY'];
  $blocked_countries = array( 'CA', 'UK', 'RU', 'NL', 'CN', 'AC', 'AD', 'AE', 'AF', 'AT', 'BD', 'BR', 'CF', 'CG', 'DK', 'ES','IN' );

    if (  in_array( $current_site_ip_country_code, $blocked_countries ) ) {
       // echo "here";
    //    die();
        $abort = true;
      $msgs = $form->prop('messages');
      $msgs['mail_sent_ng'] = "Not Allowed"; //<- your custom error message
      $form->set_properties(array('messages' => $msgs));
    }
    
}
© www.soinside.com 2019 - 2024. All rights reserved.