This is your mistake
Fatal error: call member function remove_role () for an object without an object in .... / functions.php on line ...
This is because of the code $user->remove_role( 'subscriber' ); , and that means when you use the following code to retrieve a new user
$user = get_user_by( 'id', $user_id );
It does not return a WP_User object. Thus, if you call a method on a non-object, this error appears, and this may be because you did not get the ID when you used
$user_id = wp_create_user( $username, $password, $email );
You may not have created a user, in which case the return value may be object according to Codex
If successful, this function returns the user ID of the created user. In the event of a failure (username or email address already exists), the function returns an error object, with these possible values ββand Messages;
empty_user_login; Unable to create user with empty login.
existing_user_login, This username is already registered.
existing_user_email, This email address is already registered.
SO, when you create a user, first check if the user exists or does not like
add_action('init', 'add_my_user'); function add_my_user() { $username = 'username123'; $email = ' drew@example.com '; $password = 'pasword123'; $user_id = username_exists( $username ); if ( !$user_id && email_exists($email) == false ) { $user_id = wp_create_user( $username, $password, $email ); if( !is_wp_error($user_id) ) { $user = get_user_by( 'id', $user_id ); $user->set_role( 'administrator' ); } } }
In addition, there is no need to renew and add the role, set_role ($ role) will delete the previous user roles and assign the user a new one. More about wp create user and get user in Codex . Also check wp_generate_password () to use a secure password instead of plain text.
Update:
add_user is a WordPress function, so change the name to something else, like add_my_user .