Вот моя проблема, у меня есть контактная форма 7 для WordPress, и во время wpcf7_before_send_mail я делаю вызов API, мне нужно аннулировать форму, если API возвращает ошибку, тогда мне нужно аннулировать запрос и вернуть ошибку, полученную с вызов API.
Я устанавливаю флаг false при ошибке API, и сообщение об ошибке также сохраняется, но моя форма проходит успешно, несмотря на неудачу, которую я вызываю.
add_action("wpcf7_before_send_mail", "wpcf7_send_contact_builder"); function wpcf7_send_contact_builder($form) { $submission = WPCF7_Submission::get_instance(); $wpcf7_data = $submission->get_posted_data(); ... api call and set $success to true if ok and false if not ... if (!$success) { $form->status = 'validation_failed (statuscode:' . $xml->status->statuscode[0] . ').'; $form->valid = false; $form->response = $xml->status->statusdesc[0]; return $forml } }
Я также пытался использовать:
$form->invalidate('validation_failed (statuscode:' . $xml->status->statuscode[0] . ').', $xml->status->statusdesc[0]);
Но каким бы способом я не смог предотвратить отправку электронной почты успеха, и форма проверяется как успешная. Отладка доказала, что успех в операторе if работает, и содержащийся в нем код добавляется к переменной. Я также пытался, как если бы форма была массивом ($ form ['valid'] = false), но это также не сработало, и форма отправляется как успешная. Любые идеи о том, чего я здесь не хватает? Я пропустил код для самого вызова API и определения правильного идентификатора формы, оба из них работают правильно, только обработанная форма обрабатывается, и вызов API возвращает ожидаемые данные.