In this guide, you will learn how to create custom validation in CF7. This guide is also the solution for programmatically making fields required.

Contact Form 7 uses the validation server-side, which means we need to hook into the PHP functions/filters in order to create custom validations.

In my scenario, I have a select field called type-of-enquiry with 2 options, Sales and Support.

If sales is selected, I am showing and validating country(select) and state(select), if support is selected, I am showing product(select), telephone(tel) and subject(text).

We start off by creating a custom file in our theme or child theme, I’ve named mine “cf7-custom-validation.php” and saved it in a custom folder called “inc” and we import it in our functions.php file using:

functions.php

require_once( get_template_directory() . '/inc/cf7-custom-validation.php' );
Code language: PHP (php)

cf7-custom-validation.php

<?php // Block direct access to the file defined( 'ABSPATH' ) || exit; /** * Each field type has its own validation filter, * so we create a function for each type */ add_filter( 'wpcf7_validate_select', 'wpharvest_custom_validation_select', 20, 2 ); add_filter( 'wpcf7_validate_tel', 'wpharvest_custom_validation_tel', 20, 2 ); add_filter( 'wpcf7_validate_text', 'wpharvest_custom_validation_text', 20, 2 ); /** * Go through all the select fields */ function wpharvest_custom_validation_select( $result, $tag ) { // Get the type of enquiry from the dropdown $enquiryType = isset( $_POST['type-of-enquiry'] ) ? trim( $_POST['type-of-enquiry'] ) : ''; // If selection is Sales if( $enquiryType == 'Sales' ){ // If current validation is your-country and is empty then invalidate field if ( 'your-country' == $tag->name && empty( $_POST['your-country'] ) ) { $result->invalidate($tag, "This field is required."); } // We can also make validation dependent on other fields // If current validation is state, the country selected is United States and is empty then invalidate field if ( 'state' == $tag->name && trim( $_POST['your-country'] ) == 'United States' && empty( $_POST['state'] ) ) { $result->invalidate($tag, "This field is required."); } } // If selection is Support if( $enquiryType == 'Support' ){ // If current validation is product and is empty then invalidate field if ( 'product' == $tag->name && empty( $_POST['product'] ) ) { $result->invalidate($tag, "This field is required."); } } return $result; } /** * Go through all the tel fields */ function wpharvest_custom_validation_tel( $result, $tag ) { // Get the type of enquiry from the dropdown $enquiryType = isset( $_POST['type-of-enquiry'] ) ? trim( $_POST['type-of-enquiry'] ) : ''; // If selection is Support if( $enquiryType == 'Support' ){ // If current validation is telephone and is empty then invalidate field if ( 'telephone' == $tag->name && empty( $_POST['telephone'] ) ) { $result->invalidate($tag, "This field is required."); } } return $result; } /** * Go through all the text fields */ function wpharvest_custom_validation_text( $result, $tag ) { // Get the type of enquiry from the dropdown $enquiryType = isset( $_POST['type-of-enquiry'] ) ? trim( $_POST['type-of-enquiry'] ) : ''; // If selection is Support if( $enquiryType == 'Support' ){ // If current validation is subject and is empty then invalidate field if ( 'subject' == $tag->name && empty( $_POST['subject'] ) ) { $result->invalidate($tag, "This field is required."); } } return $result; }
Code language: HTML, XML (xml)

Published by Dragos Micu

WooCommerce

2 Comments

  1. You can also try one plugin that allow to set custom validation message for every field.
    Plugin URL: https://wordpress.org/plugins/cf7-custom-validation-message/
    Thanks for your code it works as well..

    Reply
  2. Hey Dragos,

    I have an issue that´s similar but not as easy as that the “normal” fields.

    I have an issue with the file fields.

    Bild-Upload*
    [file* lh-img filetypes:jpg|png|jpeg class:lh-img-input]
    Dateien durchsuchen

    Video-Upload*
    [file* lh-video filetypes:mp4 class:lh-video-input]
    Dateien durchsuchen

    That´s them, so you can see there is one for a video file and one for an image.

    So when you upload a file to “lh-img”, the field “lh-video” shouldn´t be required anymore, same goes for the reversed case (video uploaded, img not required).

    Your code works for fields like mail or text, but the file fields are another thing there and I couldn´t figure it out. Maybe someone has the same Problem and that would help them as well.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

experience bliss with house of wise cbd sex gummies a comprehensive review kangaroo sex pills benefits and user reviews comprehensive review of men 39 s max life gummies analyzing effectiveness and user feedback the truth about penis enlarging gummies separating fact from fiction the benefits of better sex gummies for enhanced intimacy keto act gummies your delicious path to ketosis revolutionize your weight loss journey with keto genesis gummies unlock the power of ketosis in a d jessica simpson weight loss discover the diet and fitness regimen that worked 2 tru bio keto gummies reviews is this the ultimate solution for a low carb lifestyle revive your lifestyle with second life keto gummies a game changing health supplement exploring the world of cbd gummies in ohio a comprehensive guide to buying and using cbd products exploring the benefits of cbd gummies in missouri a comprehensive guide to cbd gummies missouri optimize your health with bioheal blood cbd gummies a comprehensive review of the cost and benefits experience the bliss of relaxation with just cbd gummies 500mg a comprehensive review what is a cbd gummy good for unlocking the potential of cbd edibles for a healthier you 27243 the best cbd gummies on amazon for relaxation focus and relief revolutionizing wellness nufarm cbd gummies shark tank a game changing product for a healthy life dr oz cbd gummies cost unlocking the secrets of a high quality cbd product the benefits and effectiveness of joint plus cbd gummies for pain relief and joint health 946 does kusher 8 hemp gummies get you high a comprehensive analysis