2

I have added an extra login field to the main wordpress login page. It is a checkbox which must be checked (to accept terms & conditions), otherwise the user cannot log in.

I have taken code from this question which has allowed me to add a custom checkbox to the login. However, trying to modify the code given to validate whether the checkbox has been checked, I cannot get to work.

function check_checkbox($user) {
    $acceptance = $_POST['terms_acceptance'];

    $user = get_user_by('login', $username );

    if( !$user || !isset($acceptance) ){
        remove_action('authenticate', 'wp_authenticate_username_password', 20);

        $user = new WP_Error( 'denied', __("<strong>ERROR</strong>: You're unique identifier was invalid.") );
    }

    return null;
}
add_filter( 'wp_authenticate_user', 'check_checkbox', 10, 3 );

I have tried the 'authenticate' & 'wp_authenticate_user' filters as shown, but neither have worked for me.

Can anyone tell me what I'm doing wrong?

4

Here's the full working code, put it in functions.php:

add_action('login_form','my_added_login_field');
function my_added_login_field(){
?>
    <p>
        <label for="my_extra_field">I agree to the terms<br />
        <input type="checkbox" value="1" class="input" id="my_extra_field" name="my_extra_field_name"/></label>
    </p>
<?php
}

function check_checkbox($user, $password)
{
    if( !isset($_POST['my_extra_field_name']) )
     {
        remove_action('authenticate', 'wp_authenticate_username_password', 20);
        $user = new WP_Error( 'denied', __("<strong>ERROR</strong>: Please agree to our terms.") );
    }

    return $user;
}
add_filter( 'wp_authenticate_user', 'check_checkbox', 10, 3 );
1
0

Per the Codex...

add_filter('wp_authenticate_user', 'myplugin_auth_login',10,2);
function myplugin_auth_login ($user, $password) {
     //do any extra validation stuff here
     return $user;
}

You need to return the $user object. Your function always returns null. This is completely untested but it looks like you just need to use return $user; on the last line instead of return null;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.