在Wordpress中如何为CF7设置自定义响应消息

时间:2020-01-21 13:33:48

标签: wordpress api

我想为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设置为自定义响应消息。

1 个答案:

答案 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;
    }

}