Adding filter to the Contact Form 7 response

Please find below a potential solution. It checks the status of the $id for being a \WP_Error (indicating the creation of the post failed). If it’s not a error, it’ll produce a simple message to give output the $id.

However, it should be noted that the code you’ve provided has an error and will likely produce a fatal error, because $school is undefined and you’re accessing it like an Object. My code is based on your code and doesn’t correct for this. So you’ll need to apply this solution to your particular implementation and correct this.

Also, I’ve added $abort = true; in the case of error, so the form submission will be aborted. You can keep that or remove it depending on your requirements.

add_action( 'wpcf7_before_send_mail', function ( $contact_form, &$abort, $submission ) {

    if ( $contact_form->title == "Pledge" ) {
        $name = $submission->get_posted_data( "pledge-name" );
        $schoolid = $submission->get_posted_data( "yes" );

        $id = wp_insert_post( [
            "post_type"   => "pledge",
            "post_title"  => "$school->name | $name",
            "post_status" => "draft",
        ] );

        if ( is_wp_error( $id ) ) {
            $submission->set_response( 'There was an error creating the new post.' );
            $abort = true;
        else {
            $submission->set_response( sprintf( 'A new post has been created with the ID: %s.', $id ) );
}, 10, 3 );

return !$abort;