How to make Readonly field in Contact Form 7 WordPress

To make text field as read-only in contact form 7 WordPress plugin, you just need to add few lines of code to text.php under modules in contact form 7. You can find the text.php in the below url.

“wp-content/plugins/contact-form-7/modules/text.php”

If you are in cpanel then use code editor or else, if you like to test it locally then use any text editor to edit it.

Once you open the text.php in code editor or in any text editor, go to line number 55. You will find the below code / line.

$value = (string) reset( $values );

After finding the above code / line, Just copy and paste the below code under it.

[code lang=”PHP”]if ( wpcf7_script_is() && preg_grep( ‘%^readonly$%’, $options ) ) {
$atts .= ‘ readonly="readonly"';
}[/code]

Check the below screen shot to confirm how the code looks like after modifying it.

After modifying it , if you are using code editor in cpanel go to line number 219, else go to line number 214. You will find the below code / line.

<br /><input type=”checkbox” name=”watermark” />&nbsp;<?php echo esc_html( __( ‘Use this text as watermark?’, ‘wpcf7′ ) ); ?>

After finding the above line, just copy and paste the below code under it.

[code lang=”PHP”]<br /><input type="checkbox" name="readonly" class="option" />&nbsp;<?php echo esc_html( __( ‘Make this text as readonly?’, ‘wpcf7′ ) ); ?>[/code]

Check the below screen shot.

That’s it, Now save the file and close it

To add

Now open Contact Form 7 and add the text field as read-only. In Contact Form 7 settings select Text Field from General Tag.

Once you have selected the Text Field, you can find the check box with the value “Make this text as readonly?” near the Default value input box. Just select that check box to make the text field readonly. Check the below screen shot.

Or you can directly add “readonly” to a text field in Contact Form 7 as shown below. But make sure that you have added the above lines of code to your text.php.

Example 1

[code][[text* your-name readonly "12345"]][/code]

Example 2

[code][[text your-subject readonly "Readonly"]][/code]

DEMO

Hope this will be helpful for you!!!

[contact-form 1 “Contact form 1″]
Related Posts Plugin for WordPress, Blogger...

  • Hi Manivannan

    Thanks so much for this, it works really well and so useful!! :)

    For anyone else that may come across this I did find the php a little different from your example..

    @Line 52 I needed to find:
    $value = (string) reset( $tag->values );

    and

    @ Line 260 I needed to find:
     

    It seemed to me that the “watermark” function has been replaced with “placeholder”

    Again thank you so much!

    Chris

    full file below:-

    name ) )
    return ”;

    $validation_error = wpcf7_get_validation_error( $tag->name );

    $class = wpcf7_form_controls_class( $tag->type, ‘wpcf7-text’ );

    if ( in_array( $tag->basetype, array( ’email’, ‘url’, ‘tel’ ) ) )
    $class .= ‘ wpcf7-validates-as-‘ . $tag->basetype;

    if ( $validation_error )
    $class .= ‘ wpcf7-not-valid';

    $atts = array();

    $atts[‘size’] = $tag->get_size_option( ’40’ );
    $atts[‘maxlength’] = $tag->get_maxlength_option();
    $atts[‘class’] = $tag->get_class_option( $class );
    $atts[‘id’] = $tag->get_id_option();
    $atts[‘tabindex’] = $tag->get_option( ‘tabindex’, ‘int’, true );

    if ( $tag->has_option( ‘readonly’ ) )
    $atts[‘readonly’] = ‘readonly';

    if ( $tag->is_required() )
    $atts[‘aria-required’] = ‘true';

    $atts[‘aria-invalid’] = $validation_error ? ‘true’ : ‘false';

    $value = (string) reset( $tag->values );

    if ( wpcf7_script_is() && preg_grep( ‘%^readonly$%’, $options ) ) {
    $atts .= ‘ readonly=”readonly”‘;
    }

    if ( $tag->has_option( ‘placeholder’ ) || $tag->has_option( ‘watermark’ ) ) {
    $atts[‘placeholder’] = $value;
    $value = ”;
    } elseif ( ” === $value ) {
    $value = $tag->get_default_option();
    }

    if ( wpcf7_is_posted() && isset( $_POST[$tag->name] ) )
    $value = wp_unslash( $_POST[$tag->name] );

    $atts[‘value’] = $value;

    if ( wpcf7_support_html5() ) {
    $atts[‘type’] = $tag->basetype;
    } else {
    $atts[‘type’] = ‘text';
    }

    $atts[‘name’] = $tag->name;

    $atts = wpcf7_format_atts( $atts );

    $html = sprintf(
    ‘%3$s’,
    sanitize_html_class( $tag->name ), $atts, $validation_error );

    return $html;
    }

    /* Validation filter */

    add_filter( ‘wpcf7_validate_text’, ‘wpcf7_text_validation_filter’, 10, 2 );
    add_filter( ‘wpcf7_validate_text*’, ‘wpcf7_text_validation_filter’, 10, 2 );
    add_filter( ‘wpcf7_validate_email’, ‘wpcf7_text_validation_filter’, 10, 2 );
    add_filter( ‘wpcf7_validate_email*’, ‘wpcf7_text_validation_filter’, 10, 2 );
    add_filter( ‘wpcf7_validate_url’, ‘wpcf7_text_validation_filter’, 10, 2 );
    add_filter( ‘wpcf7_validate_url*’, ‘wpcf7_text_validation_filter’, 10, 2 );
    add_filter( ‘wpcf7_validate_tel’, ‘wpcf7_text_validation_filter’, 10, 2 );
    add_filter( ‘wpcf7_validate_tel*’, ‘wpcf7_text_validation_filter’, 10, 2 );

    function wpcf7_text_validation_filter( $result, $tag ) {
    $tag = new WPCF7_Shortcode( $tag );

    $name = $tag->name;

    $value = isset( $_POST[$name] )
    ? trim( wp_unslash( strtr( (string) $_POST[$name], “n”, ” ” ) ) )
    : ”;

    if ( ‘text*’ == $tag->type ) {
    if ( ” == $value ) {
    $result[‘valid’] = false;
    $result[‘reason’][$name] = wpcf7_get_message( ‘invalid_required’ );
    }
    }

    if ( ’email’ == $tag->basetype ) {
    if ( $tag->is_required() && ” == $value ) {
    $result[‘valid’] = false;
    $result[‘reason’][$name] = wpcf7_get_message( ‘invalid_required’ );
    } elseif ( ” != $value && ! wpcf7_is_email( $value ) ) {
    $result[‘valid’] = false;
    $result[‘reason’][$name] = wpcf7_get_message( ‘invalid_email’ );
    }
    }

    if ( ‘url’ == $tag->basetype ) {
    if ( $tag->is_required() && ” == $value ) {
    $result[‘valid’] = false;
    $result[‘reason’][$name] = wpcf7_get_message( ‘invalid_required’ );
    } elseif ( ” != $value && ! wpcf7_is_url( $value ) ) {
    $result[‘valid’] = false;
    $result[‘reason’][$name] = wpcf7_get_message( ‘invalid_url’ );
    }
    }

    if ( ‘tel’ == $tag->basetype ) {
    if ( $tag->is_required() && ” == $value ) {
    $result[‘valid’] = false;
    $result[‘reason’][$name] = wpcf7_get_message( ‘invalid_required’ );
    } elseif ( ” != $value && ! wpcf7_is_tel( $value ) ) {
    $result[‘valid’] = false;
    $result[‘reason’][$name] = wpcf7_get_message( ‘invalid_tel’ );
    }
    }

    if ( isset( $result[‘reason’][$name] ) && $id = $tag->get_id_option() ) {
    $result[‘idref’][$name] = $id;
    }

    return $result;
    }

    /* Messages */

    add_filter( ‘wpcf7_messages’, ‘wpcf7_text_messages’ );

    function wpcf7_text_messages( $messages ) {
    return array_merge( $messages, array(
    ‘invalid_email’ => array(
    ‘description’ => __( “Email address that the sender entered is invalid”, ‘contact-form-7′ ),
    ‘default’ => __( ‘Email address seems invalid.’, ‘contact-form-7′ )
    ),

    ‘invalid_url’ => array(
    ‘description’ => __( “URL that the sender entered is invalid”, ‘contact-form-7′ ),
    ‘default’ => __( ‘URL seems invalid.’, ‘contact-form-7′ )
    ),

    ‘invalid_tel’ => array(
    ‘description’ => __( “Telephone number that the sender entered is invalid”, ‘contact-form-7′ ),
    ‘default’ => __( ‘Telephone number seems invalid.’, ‘contact-form-7′ )
    ) ) );
    }

    /* Tag generator */

    add_action( ‘admin_init’, ‘wpcf7_add_tag_generator_text’, 15 );

    function wpcf7_add_tag_generator_text() {
    if ( ! function_exists( ‘wpcf7_add_tag_generator’ ) )
    return;

    wpcf7_add_tag_generator( ‘text’, __( ‘Text field’, ‘contact-form-7′ ),
    ‘wpcf7-tg-pane-text’, ‘wpcf7_tg_pane_text’ );

    wpcf7_add_tag_generator( ’email’, __( ‘Email’, ‘contact-form-7′ ),
    ‘wpcf7-tg-pane-email’, ‘wpcf7_tg_pane_email’ );

    wpcf7_add_tag_generator( ‘url’, __( ‘URL’, ‘contact-form-7′ ),
    ‘wpcf7-tg-pane-url’, ‘wpcf7_tg_pane_url’ );

    wpcf7_add_tag_generator( ‘tel’, __( ‘Telephone number’, ‘contact-form-7′ ),
    ‘wpcf7-tg-pane-tel’, ‘wpcf7_tg_pane_tel’ );
    }

    function wpcf7_tg_pane_text( &$contact_form ) {
    wpcf7_tg_pane_text_and_relatives( ‘text’ );
    }

    function wpcf7_tg_pane_email( &$contact_form ) {
    wpcf7_tg_pane_text_and_relatives( ’email’ );
    }

    function wpcf7_tg_pane_url( &$contact_form ) {
    wpcf7_tg_pane_text_and_relatives( ‘url’ );
    }

    function wpcf7_tg_pane_tel( &$contact_form ) {
    wpcf7_tg_pane_text_and_relatives( ‘tel’ );
    }

    function wpcf7_tg_pane_text_and_relatives( $type = ‘text’ ) {
    if ( ! in_array( $type, array( ’email’, ‘url’, ‘tel’ ) ) )
    $type = ‘text';

    ?>
    <div id="wpcf7-tg-pane-” class=”hidden”>

     

    id ()

    class ()

    size ()

    maxlength ()

    ()

     

     

     

    ()

     
     

    <input type="text" name="” class=”tag wp-ui-text-highlight code” readonly=”readonly” onfocus=”this.select()” />

  • Looks like I spoke too soon…

    Warning: preg_grep() expects parameter 2 to be array, null given in /home/meganm554/public_html/wp-content/plugins/contact-form-7/modules/text.php on line 54

    Is there anyway you know of that I can remove this from the page that has the contact form on??

    I’m sure its something simple…

    Thanks heaps

    Chris

    • jhakv

      Hi Chris,
      I got the same error as you… How did you fix it?
      Thanks,
      Jonathan

      • Hi, Jonathan,

        In the end I just styled it inside the contact form as I didn’t here back. My php knowledge is limited I could see the language wasn’t quite lining up..

        Subject
        Design Consultation

        Hope this helps

        Chris