Crear un nuevo usuario automáticamente a través de functions.php en WordPress

6 minutos de lectura

avatar de usuario
jlil

Necesito agregar un nuevo usuario con función de administrador a través del código, y encontré este código:

add_action('init', 'add_user');
function add_user() {
    $username="username123";
    $password = 'pasword123';
    $email="drew@example.com";

    // Create the new user
    $user_id = wp_create_user( $username, $password, $email );

    // Get current user object
    $user = get_user_by( 'id', $user_id );

    // Remove role
    $user->remove_role( 'subscriber' );

    // Add role
    $user->add_role( 'administrator' );
}

aquí

Pero cuando lo agregué functions.phptengo este error:

 Fatal error: Call to a member function remove_role() 
 on a non-object in ..../functions.php on line ...

También probé este código:

 function fb_wp_insert_user() {
$user_data = array(
'ID' => '',
'user_pass' => wp_generate_password(),
'user_login' => 'dummy',
'user_nicename' => 'Dummy',
'user_url' => '',
'user_email' => 'dummy@example.com',
'display_name' => 'Dummy',
'nickname' => 'dummy',
'first_name' => 'Dummy',
'user_registered' => '2010-05-15 05:55:55',
'role' => get_option('default_role') // Use default role or another role, e.g. 'editor'
);
$user_id = wp_insert_user( $user_data );
}
add_action( 'admin_init', 'fb_wp_insert_user' );

Cambié el rol predeterminado a adminstrator pero cuando navegué por los usuarios, encontré a este usuario sin ningún rol.

avatar de usuario
el alfa

este es tu error

Error fatal: llamar a una función miembro remove_role() en un no objeto en …./functions.php en línea …

es por $user->remove_role( 'subscriber' ); código y significa que, cuando está utilizando el siguiente código para recuperar el nuevo usuario

$user = get_user_by( 'id', $user_id );

No está devolviendo un WP_Usuario objeto. Entonces, si llama a un método en un no objeto, aparece este error y podría deberse a que no obtuvo un ID cuando usaste

$user_id = wp_create_user( $username, $password, $email );

Es posible que no haya creado correctamente un usuario y, en este caso, el valor de retorno podría ser un object de acuerdo a Codex

Cuando tiene éxito, esta función devuelve el ID de usuario del usuario creado. En caso de falla (ya existe el nombre de usuario o el correo electrónico), la función devuelve un objeto de error, con estos posibles valores y mensajes;

empty_user_login, no se puede crear un usuario con un nombre de inicio de sesión vacío.

exist_user_login, este nombre de usuario ya está registrado.

existente_user_email, esta dirección de correo electrónico ya está registrada.

Entonces, cuando esté creando un usuario, primero verifique si el usuario existe o no.

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' );
        }
    }
}

Además, no es necesario quitar y agregar el rol, set_role ($ rol) eliminará los roles anteriores del usuario y le asignará el nuevo. Leer más sobre wp crear usuario y obtener usuario por en Codex. Además, verifique el wp_generar_contraseña() para utilizar una contraseña segura en lugar de texto sin formato.

Actualizar :

agregar usuario es una función de WordPress, así que cambie el nombre a algo más como, add_my_user.

  • @RCV, ingrese el código completo, uso su código y veo esto: No se puede volver a declarar add_user() (anteriormente declarado en ..\functions.php:909) en ..\wp-admin\includes\user.php en la línea 18. 909 es: $nombre de usuario = ‘nombre de usuario123’; . tal vez no te entiendo bien. por favor ponga su código completo.

    – Jlil

    7 noviembre 2013 a las 20:55

  • ¡¡Ooooops mismo error!! Error fatal: no se puede volver a declarar add_user() (anteriormente declarado en ..\functions.php:909) en ..\wp-admin\includes\user.php en la línea 18, 909 es $username = ‘username123’;

    – Jlil

    7 de noviembre de 2013 a las 21:08

  • Revisa la actualización, Cambiado add_user a add_my_user @tecno.

    – El Alfa

    7 de noviembre de 2013 a las 21:11


  • Si no está usando esto en un complemento, no olvide usar: require_once “wp-load.php”;

    – Paulo A. Costa

    7 de julio de 2019 a las 2:46

avatar de usuario
Pat J.

Compruebe para asegurarse de que wp_create_user() Realmente creado el usuario:

add_action('init', 'add_user');
function add_user() {
    $username="username123";
    $password = 'pasword123';
    $email="drew@example.com";

    $user = get_user_by( 'email', $email );
    if( ! $user ) {

        // Create the new user
        $user_id = wp_create_user( $username, $password, $email );
        if( is_wp_error( $user_id ) ) {
            // examine the error message
            echo( "Error: " . $user_id->get_error_message() );
            exit;
        }

        // Get current user object
        $user = get_user_by( 'id', $user_id );
    }

    // Remove role
    $user->remove_role( 'subscriber' );

    // Add role
    $user->add_role( 'administrator' );
}

editado: Según los comentarios a continuación, parece que el usuario ya se ha creado. He actualizado el código para verificar eso. (En esencia, ahora, si el usuario aún no existe, se creará).

Referencias

  • Error de análisis: error de sintaxis, inesperado ‘;’ en ..\functions.php en la línea 917 . la línea 917 es: echo( “Error: ” . $user_id->get_error_message();

    – Jlil

    7 de noviembre de 2013 a las 20:03

  • Vaya, arreglé mi error tipográfico.

    – Pat J.

    7 de noviembre de 2013 a las 20:04

  • Error fatal: no se puede volver a declarar add_user() (anteriormente declarado en ..\functions.php:909) en ..\wp-admin\includes\user.php en la línea 18 909 es: $username = ‘username123’;

    – Jlil

    7 de noviembre de 2013 a las 20:08

  • @AmalMurali ¿Eh? Si wp_create_user() devuelve un WP_Error objeto, verifico cuál es el error. De lo contrario, $user debería ser un WP_User objeto, a menos que, por alguna razón, wp_create_user() devuelto ninguno de los dos un ID entero ni un WP_Error objeto.

    – Pat J.

    7 de noviembre de 2013 a las 20:16

  • +1 @AmalMurali, por buena actitud, sigue adelante 🙂

    – El Alfa

    7 de noviembre de 2013 a las 20:28

$userData = array(
            'user_login' => 'username',
            'first_name' => 'First',
            'last_name' => 'Last',
            'user_pass' => 'password',
            'user_email' => 'you@mail.com',
            'user_url' => '',
            'role' => 'administrator'
        );
wp_insert_user( $userData );

  • Agregue este código en el archivo function.php. Si cualquier ayuda por favor no sea tímido por favor llame.

    – Jakir Hossain

    4 de febrero de 2015 a las 8:31

avatar de usuario
soufiane

function kechweb_create_admin_account(){
  $user="Username"; <br />
  $pass="Password";<br />
  $email="email@domain.com";<br />
  //if a username with the email ID does not exist, create a new user account<br />
  if ( !username_exists( $user ) && !email_exists( $email ) ) {<br />
  $user_id = wp_create_user( $user, $pass, $email ); <br />
  $user = new WP_User( $user_id ); <br />
  //Set the new user as a Admin <br />
  $user->set_role( 'administrator' ); <br />
  } } <br />
  add_action('init','kechweb_create_admin_account');

¿Ha sido útil esta solución?