So I was able to work out a solution that works.
Here is what I did.
First I hooked into the authenticate filter
add_filter( 'authenticate', 'check_user_is_in_custom_table', 30, 2 );
From there I created my function
function check_user_is_in_custom_table( $user, $username, $password ) {
Loaded the WordPress Database
global $wpdb;
Created my result variable
$result = $wpdb->get_row( $wpdb->prepare( "SELECT User FROM custom_table WHERE User = %s", $username ) );
I had to edit my if statement a bit
if ( is_null ( $result ) ) { //This is the edited line
return new WP_Error( 'deactivated_in_custom_table', 'This account has been deactivated.' );
}
return $user;
And finally closed the function
}
Here is the full code for anyone who wants to use this for their own reference.
add_filter( 'authenticate', 'check_user_is_in_custom_table', 30, 2 );
function check_user_is_in_custom_table( $user, $username, $password ) {
global $wpdb;
$result = $wpdb->get_row( $wpdb->prepare( "SELECT User FROM custom_table WHERE User = %s", $username ) );
if ( is_null ( $result ) ) {
return new WP_Error( 'deactivated_in_custom_table', 'This account has been deactivated.' );
}
return $user;
}
Here is what happens, the login form is ran through the validation we have created utilizing the custom table within the WordPress database. If there is a row within the table where the USer is the username provided on sign on then they can proceed. If there is no user by that name in the custom table then the user is given an error message.
Ended up being a single line that was causing my issues but that can happen often when writing custom elements of any kind 🙂 Happy coding all.