Ticker

6/recent/ticker-posts

Ad Code

Responsive Advertisement

Usar la REST API para crear usuarios en WordPress

En este artículo veremos cómo crear un usuario idéntico desde un sitio web hacia otro sitio web WordPress, para esto usaremos las funciones de WordPress y el uso de la REST API en el sitio web destino.

 

Generalidades

En nuestro ejemplo necesitaremos dos sitios WordPress:

  • El sitio web de origen estará en http://origen.local
  • El sitio en donde se crearán o actualizarán los usuarios estará en http://destino.local.

 

Contraseña de aplicación en el sito web destino

Primero necesitaremos configurar el sitio web destino creando una contraseña de aplicación para algún usuario administrador.

Desde el menú de Usuarios, seleccionar un usuario, en la parte inferior aparecerá una sección para crear una nueva contraseña de aplicación, le asignamos un nombre y luego generamos la contraseña.

Contraseña de aplicación creactión

 

Código para la creación de usuarios

En el siguiente código tienes que cambiar el usuario que estas usando, la contraseña de aplicación y la URL del sitio destino.

add_action( 'user_register', 'dcms_insert_user', 10, 2 );
function dcms_insert_user( $user_id, $userdata ):void {
        $user_app = 'admin';
        $pass_app = 'xxxxxxxxxxxxxxxxxxxxxxxx';

        $url      = 'http://destino.local/wp-json/wp/v2/users';

        $data['username']   = $userdata['user_login'];
        $data['email']      = $userdata['user_email'];
        $data['password']   = $userdata['user_pass'];
        $data['first_name'] = $userdata['first_name'];
        $data['last_name']  = $userdata['last_name'];

        $response = wp_remote_post( $url, array(
                'body'    => $data,
                'headers' => array(
                        'Authorization' => 'Basic ' . base64_encode( $user_app . ':' . $pass_app ),
                ),
        ) );

        if (is_wp_error($response)) {
                error_log(print_r($response->get_error_message(),true));
                return;
        }

        $response = json_decode($response['body']??'{}',true);

        if ( isset($response['code']) ) {
                error_log(print_r($response,true));
                return;
        }

        if ( isset($response['id']) ) {
                update_user_meta( $user_id, 'id_user_remote_site', $response['id'] );
        }
}

En el código anterior:

  • Usamos el hook user_register que se ejecuta cuando se inserta un nuevo usuario.
  • La función dcms_insert_user() a la que hace referencia el hook toma dos parámetros.
  • Dentro de la función definimos las variables para la contraseña de aplicación y la url de la REST API del sitio destino.
  • Guardamos los datos del usuario en un array asociativo llamado $data.
  • Usamos la función de WordPres wp_remote_post() para hacer la solicitud remota.
  • Enviamos la variable data y también la contraseña de aplicación como cabecera.
  • Comprobamos si la respuesta es un objeto de error.
  • Decodificamos la respuesta, comprobamos si la respuesta nos envía algún código de error.
  • Si se creó el usuario debería retornar los datos del usuario, comprobamos el ID.
  • Finalmente guardamos el ID como parte de los metadatos del usuario (Esto para futuras implementaciones de sincronización).

 

Para ver una referencia de todos los campos disponibles que se pueden usar para el usuario en la REST API puedes visitar el siguiente enlace.

 

Código para la actualización de un usuario

El siguiente código es parecido al código anterior, igualmente tienes que cambiar las mismas variables para la contraseña de aplicación.

En el caso de la actualización para formar la URL de la REST API necesitamos tener el ID del usuario creado, es por eso que anteriormente lo guardamos como metadato.

add_action( 'wp_update_user', 'dcms_update_user', 10, 3 );
function dcms_update_user( $user_id, $userdata, $userdata_raw ):void {
        $user_app = 'admin';
        $pass_app = 'xxxxxxxxxxxxxxxxxxxxxxxx';

        $remote_id = get_user_meta( $user_id, 'id_user_remote_site', true );
        if ( empty( $remote_id ) ) {
                return;
        }

        $url = 'http://destino.local/wp-json/wp/v2/users/' . $remote_id;

        $data['username']   = $userdata['user_login'];
        $data['email']      = $userdata['user_email'];
        $data['first_name'] = $userdata['first_name'];
        $data['last_name']  = $userdata['last_name'];
        if  ( isset($userdata_raw['user_pass']) ) {
                $data['password'] = $userdata_raw['user_pass'];
        }

        $response = wp_remote_post( $url, array(
                'body'    => $data,
                'headers' => array(
                        'Authorization' => 'Basic ' . base64_encode( $user_app . ':' . $pass_app ),
                ),
        ) );

        if (is_wp_error($response)) {
                error_log(print_r($response->get_error_message(),true));
        }
}

En el código anterior:

  • En este caso usaremos el hook wp_update_user que hace referencia a la función dcms_update_user().
  • Definimos las variables para la contraseña de aplicación, en el caso de la URL necesitaremos el ID del usuario a actualizar.
  • Obtenemos el ID del usuario de la metadata de usuario y formamos la URL.
  • Guardamos todo lo que queremos actualizar en la variable $data.
  • En el caso de la contraseña, si ha sido actualizada existirá en la variable $userdata_raw, utilizamos esta variable ya que necesitamos la contraseña sin encriptar.
  • Usamos la función wp_remote_post() de WordPress para enviar los datos.
  • Finalmente comprobamos si hay algún error devuelto por el servidor

 

Conclusión

Como has podido comprobar podemos sincronizar los usuarios creados en un sitio web WordPress hacia otro sitio WordPress, tanto para los nuevos usuarios como para la actualización.

 

La entrada Usar la REST API para crear usuarios en WordPress es un artículo reciente del sitio DecodeCMS.

Enregistrer un commentaire

0 Commentaires