我想为CF7设置自定义响应消息。通过CF7提交后,我将从wp_remote_post方法获取响应输出,但无法以CF7形式显示响应错误消息。我有以下代码。请指导我如何设置自定义响应错误消息。
add_filter( 'wpcf7_before_send_mail', 'create_tocken' );
function create_tocken( $contact_form ) {
global $wpdb;
if ( ! isset( $contact_form->posted_data ) && class_exists( 'WPCF7_Submission' ) ) {
$submission = WPCF7_Submission::get_instance();
if ( $submission ) {
$form_data = $submission->get_posted_data();
}
} else {
return $contact_form;
}
$body = array(
'username' => 'xxxxx',
'password' => 'xxxxxx',
'type' => 'xxxxx',
'name' => 'xxxxxx',
'phone' => 'xxxxxx',
'email' => 'xxxxxx',
'town' => 'xxxxxx',
);
$url = 'https://example.com/';
$params = array(
'headers' => array(
'Content-Type' => 'application/x-www-form-urlencoded'
),
'body' => $body
);
$response = wp_remote_post( $url, $params );
if ( is_wp_error( $response ) ) {
$error_message = $response->get_error_message();
}
}
在这里,我想将$ error_message设置为自定义响应消息。
答案 0 :(得分:0)
以下解决方案解决了这个问题。
add_action('wpcf7_before_send_mail', 'cf7_validate_api', 10, 3);
function cf7_validate_api($cf7, &$abort, $submission) {
if ($cf7->id() !== 887)
{
return;
}
$errMsg = '';
$submission = WPCF7_Submission::get_instance();
$postedData = $submission->get_posted_data();
$fields = [];
$api_username = 'xxxxxxx';
$api_key = 'xxxxxxx';
$api_url = 'xxxxxxx';
$fields['username'] = $api_username;
$fields['key'] = $api_key;
$fields['endpoint'] = 'test';
$fields['firstname'] = $postedData['firstname'];
$fields['lastname'] = $postedData['lastname'];
$fields['phone'] = $postedData['phone'];
$fields['email'] = $postedData['email'];
$params = [
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
],
'body' => $fields,
];
$response = wp_remote_post($api_url, $params);
if (is_wp_error($response)) {
$error_message = $response->get_error_message();
$errMsg = "Something went wrong:\n{$error_message}";
} else {
$api_result = json_decode($response['body'], true);
if ($api_result['success'] == 'false') {
$errMsg = $api_result['message'];
}
}
if ($errMsg) {
$abort = true;
$submission->set_response($cf7->message('validation_failed'));
$submission->set_response($cf7->filter_message($errMsg)); //custom msg;
}
}