WordPress.org

Ready to get started?Download WordPress

Forums

Theme My Login
[resolved] Validation of profile form (5 posts)

  1. scdwb
    Member
    Posted 1 year ago #

    Hello,

    I would like to validate the profile registration form, similar to how you can validate extra fields in the registration process by hooking into registration_errors().

    I tried to hook into user_profile_update_errors() in my theme options with the following code. Unfortunately nothing happens on the profile page. The form saves correctly but there is no validation if the first_name and last_name fields are left blank for example. Can you help?

    I am displaying the profile form via a page template with the following code:

    theme_my_login( array('instance' => '-profile', 'default_action'=>'profile', 'show_title'=>false ) );

    Many thanks
    Steven

    // Form validation for the second step of the registration process
    function check_fields($errors, $update, $user) {
    if ( empty( $_POST['first_name'] ) )
    $errors->add( 'empty_first_name', 'ERROR: Please enter your first name.' );
    if ( empty( $_POST['last_name'] ) )
    $errors->add( 'empty_last_name', 'ERROR: Please enter your last name.' );
    return $errors;
    }
    add_filter('user_profile_update_errors', 'check_fields', 10, 3);

    http://wordpress.org/extend/plugins/theme-my-login/

  2. scdwb
    Member
    Posted 1 year ago #

    Just an update on this, this code above works in the admin profile page. So it's good to know it's working as it should in native WordPress.

    However, I'm using the theme my login profile page on the front end. Is it possible for this validation code above to apply to the front end form? This would be perfect!

    Cheers,
    Steven

  3. Jeff Farthing
    Member
    Plugin Author

    Posted 1 year ago #

    By default, the code for profile updating does not run unless on the actual Login page, effectively rendering default_action='profile' useless.

    TML 6.3 (coming soon) will have better handling of such scenarios.

  4. scdwb
    Member
    Posted 1 year ago #

    Thanks very much for replying. Is there a work around in the mean time?

    My profile page works and in fact the user_profile_update_errors hook actually does seem to validate the fields and stop the form saving if validation fails. But for the life of me I can't seem to get the errors to appear.

    I'll send over a thank you, whatever your fee is. I don't want to get support for free and I'm more than happy to pay you for your support.

    This is very important so if there is a work around until the 6.3 release and it's worth your time to help me for your fee, please let me know.

    Many thanks,
    Steven

  5. scdwb
    Member
    Posted 1 year ago #

    I actually managed to find a solution to this, so I thought I would share it.

    It doesn't require making any changes to the hard code of the plugin, which is good. You simply just need to add this code in the profile-form.php template file that you place in your theme.

    Place it just above this line:

    template->the_action_template_message( 'profile' );

    Code:

    '
    global $theme_my_login;
    $current_user = wp_get_current_user();

    $errors = edit_user( $current_user->ID );

    if ( !is_wp_error( $errors ) ) {
    $redirect = add_query_arg( array( 'updated' => 'true' ) );
    wp_redirect( $redirect );
    exit();
    }

    $theme_my_login->errors = $errors;

    if ( is_wp_error( $errors ) ) {
    $error_string = $errors->get_error_messages();
    echo '<p class="error">';
    foreach ($error_string as $error_message) {
    echo $error_message . ''; }
    echo '</p>';
    }
    endif;
    '

    Used in conjunction with the user_profile_update_errors filter to add custom validation the code above validates the profile form fields perfectly.

    The only problem I've found is that once all validation has been passed and all fields are complete and saved correctly, it then ironically displays all error messages and the whole form fails validation (even though the form is complete and correct. I think this is because I'm using '$errors = edit_user( $current_user->ID );' above.

    The edit_user() function for some reason not only updates a user but tries to create a new user too if there is no current user to update. So I think that when all the validation passes it then tries to create a new user and expects all the fields to be passed through again. This is what's causing the new validation errors.

    This is where the add_query_arg comes in above, which appends an "update" parameter to the url when validation is first successful. I then include the code below so users are sent to an appropriate page as soon as they successfully complete the profile so they don't see the new validation failures:

    <?php if ( isset($_GET['updated']) ) : wp_redirect( get_permalink( get_page_by_title('page')) ); ?>

    This isn't ideal but works well for my needs. I think this problem is because I'm using the user_edit() function. It would be great to get some feedback on this method and if there are any improvements I could make.

    Many thanks,
    Steven

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic