[Plugin: Contact Form 7] Suggested code patch to allow form field validation
-
Hi,
I would like to suggest a code patch to make the form field validation filters usable.
Currently the class
WPCF7_ContactForm
functionvalidate()
contains the following line:
$result = apply_filters( 'wpcf7_validate', $result );
Changing this filter to also pass
$this
will allow validation on a per form basis, here is the change:
$result = apply_filters( 'wpcf7_validate', $result, $this );
Here is an example of its usage:
Within the Contact form editor page, for the specific form you wish to add custom validation add a line toAdditional Settings
section:
my_custom_form: signup
This additional custom setting lets us check which form we are validating later, in this case we have named our form
signup
.// Add a filter so we can handle our form validation. add_filter( 'wpcf7_validate', 'example_cf7_validate', 10, 2 ); // Add an action so we can complete an alternative action add_action( 'wpcf7_before_send_mail', 'example_cf7_before_send_mail' ) );
// Function which actually does the validation function example_cf7_validate( $result, $cf7 ) { // If it's not the sign up form - do nothing. $form = $cf7->additional_setting( 'my_custom_form', false ); if ( empty( $form ) || $form[0] !== 'signup' ) { return $result; } // We are validing our form so customise any output messages: add_filter( 'wpcf7_display_message', 'example_cf7_display_message', 10, 2 ); // Already invalid? if ( !$result['valid'] ) { return $result; } // Add some specific validation: //$email = $cf7->posted_data["email"]; $username = $cf7->posted_data["username"]; if ( $username === 'rubbish') { $result['valid'] = false; $result['reason']['username'] = 'Your username is rubbish'; } return $result; }
function example_cf7_before_send_mail( $cf7 ) { // If it's not the sign up form - do nothing. $form = $cf7->additional_setting( 'my_custom_form', false ); if ( empty( $form ) || $form[0] !== 'signup' ) { return; } // We don't actually want CF7 to send mail. $cf7->skip_mail = true; // TODO: Complete your action here perhaps add a user //$email = $cf7->posted_data["email"]; //$username = $cf7->posted_data["username"]; }
function example_cf7_display_message( $message, $status ) { switch ( $status ) { case 'mail_sent_ok': $message = sprintf( '<h2>%s</h2><p>%s</p><p>%s</p><p>%s</p>', sprintf( __( '%s is your new username' ), $signup_username ), __( 'But, before you can start using your new username, <strong>you must activate it</strong>.' ), sprintf( __( 'Check your inbox at <strong>%1$s</strong> and click the link given.' ), $this->_signup_email ), __( 'If you do not activate your username within two days, you will have to sign up again.' ) ); break; case 'mail_sent_ng': $message = __( 'Failed to register user account. Please try later or contact the administrator by another method.' ); break; } return $message; }
Cheers,
Dean.
- The topic ‘[Plugin: Contact Form 7] Suggested code patch to allow form field validation’ is closed to new replies.