No puedo añadir un usuario al foro de Discourse desde un sitio web de WordPress cuando el usuario se ha añadido en una membresía

Hola, tengo un problema con el foro de Discourse, que es https://community.over40connect.com/, conectado a mi sitio web https://over40connect.com/staging/ usando el plugin wp discourse, y he creado una función para agregar usuarios al grupo de Discourse cuando cambia el rol de usuario, pero no está agregando a ese usuario al grupo de Discourse. Aquí está el código:

function add_user_to_discourse_group_on_role_change($user_id, $role) {
    // Comprueba si el cambio de rol es relevante para tu caso
    // Por ejemplo, es posible que solo desees ejecutar esto si el nuevo rol es 's2member_level1'
    //if ($role === 's2member_level1') {
    // Establece el endpoint de la API de Discourse
    $discourse_endpoint = 'https://community.over40connect.com/groups/2/members.json';

    // Configura los datos que se enviarán
    $data = array(
        'usernames' => array('haseebdeveloper'), // El nombre de usuario del usuario de WordPress a agregar
    );

    // Realiza la solicitud a la API
    $response = wp_remote_post($discourse_endpoint, array(
        'method'      => 'POST',
        'timeout'     => 45,
        'redirection' => 5,
        'httpversion' => '1.0',
        'blocking'    => true,
        'headers'     => array(
            'Content-Type' => 'application/json',
            'Api-Key'      => 'REDACTED', // Agrega tu clave API de Discourse aquí
        ),
        'body'        => json_encode($data),
        'cookies'     => array(),
    ));

    // Comprueba si hay errores y maneja la respuesta
    if (!is_wp_error($response)) {
        $response_code = wp_remote_retrieve_response_code($response);

        if ($response_code === 200) {
            $response_body = wp_remote_retrieve_body($response);
            error_log('Discourse API Response: ' . $response_body); // Registra la respuesta
            // Maneja la respuesta según sea necesario
        } else {
            error_log('Discourse API Error: Unexpected response code - ' . $response_code); // Registra el error
            // Maneja el error
        }
    } else {
        $error_message = $response->get_error_message();
        error_log('Discourse API Error: ' . $error_message); // Registra el error
        // Maneja el error
    }
    //}
}
1 me gusta

He eliminado lo que parecía ser una clave de API real de tu fragmento de código @Haseeb_Ahmed. Es posible que desees revocar esa y generar una nueva. :+1:

4 Me gusta

Al visitar tu sitio, creo que tu sitio de WordPress está funcionando como el proveedor de autenticación DiscourseConnect para tu sitio de Discourse. Si es correcto, puedes usar la función de ayuda add_user_to_discourse_group para añadir usuarios de WordPress a grupos de Discourse: https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L278-L326. Los detalles sobre el uso de la función están aquí:

Observa la declaración use al principio del ejemplo de código:

use WPDiscourse\\Utilities\\Utilities as DiscourseUtilities;

Y cómo se utiliza para llamar a la función (estática):

$result = DiscourseUtilities::add_user_to_discourse_group( $user_id, $group_name );
3 Me gusta

Hola @simon, ahora solo he usado este código

use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

// Hook to execute when a user role changes
add_action('set_user_role', 'add_user_to_discourse_group_on_role_change', 10, 2);

function add_user_to_discourse_group_on_role_change($user_id, $role) {

   $group_names = array("volunteers", "moderators");
   $result = DiscourseUtilities::add_user_to_discourse_group( $user_id, $group_names );
    
}

pero todavía no agrega al usuario al grupo de discourse cuando cambio el rol del usuario.

Creo que se supone que es una cadena separada por comas, no un array:

2 Me gusta

@Firepup650 es correcto. El parámetro group_names debe establecerse como una cadena. Si estás añadiendo usuarios a varios grupos, separa los nombres de los grupos con una coma (sin espacio después de la coma).

$group_names = "volunteers,moderators";

Si no funciona, o incluso si funciona, intenta registrar el valor de $result para ver qué se devuelve.

3 Me gusta

Hola @Firepup650, gracias por tu ayuda, aquí está mi código

use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

// Hook to execute when a user role changes
add_action('set_user_role', 'add_user_to_discourse_group_on_role_change', 10, 2);

function add_user_to_discourse_group_on_role_change($user_id, $role) {

   $group_names = array("volunteers", "moderators");
	$group_names_string = implode(",", $group_names);

   $result = DiscourseUtilities::add_user_to_discourse_group( $user_id, $group_names_string );

}

está agregando al usuario al grupo de voluntarios pero no al de moderadores, ¿puedes decirme cuál es el problema?

1 me gusta

No puedes agregar usuarios a los grupos “moderadores”, “admin” o “staff” con esta llamada a función. Técnicamente, no puedes agregar usuarios a ningún grupo “automático” con este enfoque. Solo puedes agregar usuarios a grupos personalizados que hayas creado.

Editar: si necesitas agregar usuarios al grupo de moderadores, echa un vistazo a la función sync_sso_record: https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L70-L81. La función add_user_to_discourse_group es solo un envoltorio de conveniencia alrededor de sync_sso_record.

moderator (boolean) es un argumento aceptado para los parámetros SSO: discourse/lib/discourse_connect_base.rb at 5098338a9649ee8830c8a0781e0eb538e8206eac · discourse/discourse · GitHub. También podrías agregar cualquier grupo personalizado al que quieras agregar usuarios usando el parámetro add_groups. Eso te permitiría agregar un usuario al grupo “moderadores” y al grupo “Volunteer Members” con una sola llamada a la API.

Editar 2: Si pruebas el enfoque de la función sync_sso_record, es posible que necesites usar la cadena \"true\" en lugar del booleano true para el parámetro moderator. PHP interpreta true como 1. Creo que Discourse acepta la cadena \"true\" para manejar ese caso. Ten en cuenta que puedes usar la función get_sso_params para establecer los parámetros SSO: https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L129. Hay un ejemplo de cómo hacerlo en el código de la función add_user_to_discourse_group.

3 Me gusta

Hola @simon, ¿puedes darme un ejemplo con código de cómo dices que se agregue un usuario al grupo de moderadores?

Aquí está la idea básica. Supongo que necesitarás agregar alguna condición a la función para que no se agregue a todos los usuarios al grupo de moderadores cuando cambie su rol.

function add_user_to_discourse_group_on_role_change( $user_id, $role ) {
	$sso_params = array(
		'external_id' => $user_id,
		'moderator'   => 'true', // ¡los booleanos 'true' y 'false' deben establecerse como cadenas!
		'add_groups'  => 'volunteers' // lista separada por comas, sin espacios después de las comas
	);
    DiscourseUtilities::sync_sso_record( $sso_params );
}
1 me gusta

Hola @simon, aquí tienes mi código que utilizo cuando cambia el rol de un usuario

use WPDiscourse\\Utilities\\Utilities as DiscourseUtilities;

// Hook para ejecutar cuando cambia el rol de un usuario
add_action('set_user_role', 'add_user_to_discourse_group_on_role_change', 10, 2);

function add_user_to_discourse_group_on_role_change($user_id, $role) {
// 	var_dump($role);
// 	die();
	  if ($role == 's2member_level1') {
            $s2member_level_1_groups = get_option('s2member_level_1_groups', '');
// 		  	$group_names = array("haseeb-group", "moderators");
// 			$s2member_level_1_groups = implode(",", $group_names);
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_1_groups);
// 		  var_dump($result);
// 		  die();
		  	
// 			var_dump($result);
        }
		else if($role == 's2member_level2'){
			   $s2member_level_2_groups = get_option('s2member_level_2_groups', '');
			  $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_2_groups);
		}
		
		else if($role == 's2member_level3'){
			   $s2member_level_3_groups = get_option('s2member_level_3_groups', '');
			  $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_3_groups);
		}
	
		
		else if($role == 's2member_level4'){
			   $s2member_level_4_groups = get_option('s2member_level_4_groups', '');
			  $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_4_groups);
		}
		
		else {
    // Recopilar todos los grupos de nivel
    $s2member_level_1_groups = get_option('s2member_level_1_groups', '');
    $s2member_level_2_groups = get_option('s2member_level_2_groups', '');
    $s2member_level_3_groups = get_option('s2member_level_3_groups', '');
    $s2member_level_4_groups = get_option('s2member_level_4_groups', '');

    // Combinar todos los grupos en un solo array
    $s2member_level_groups = array_merge(
        explode(',', $s2member_level_1_groups),
        explode(',', $s2member_level_2_groups),
        explode(',', $s2member_level_3_groups),
        explode(',', $s2member_level_4_groups)
    );

    // Eliminar duplicados
    $s2member_level_groups = array_unique($s2member_level_groups);

    // Eliminar al usuario de todos los grupos recopilados
    foreach ($s2member_level_groups as $group) {
        $result = DiscourseUtilities::remove_user_from_discourse_group($user_id, $group);
        // Puedes manejar $result según sea necesario
    }
}


    
}

Ahora, el propósito del código es agregar o eliminar un usuario según una condición, pero en cualquier caso o condición, notifica a los administradores del foro que se necesita aprobar, rechazar o eliminar al usuario. ¿Por qué sucede esto en cualquier caso? Por ejemplo, en el caso else, solo quiero eliminar al usuario de un grupo específico, pero en ese caso, todavía aparece una notificación de “revisar nuevo usuario” para el administrador.

Una cosa más: cuando un usuario se registra en el sitio web de WordPress, se agrega automáticamente a estos grupos trust_level_0 y trust_level_1, no sé por qué.

Por favor, ayúdame, también puedo compartir contigo el hook de registro de usuarios.

Eso se debe a que son grupos centrales de Discourse, utilizados para administrar permisos y demás.

Eso se debe a que tienes activada la configuración para que el personal apruebe a todos los usuarios nuevos, como menciona tu captura de pantalla:

image

Parece que estás agregando usuarios nuevos, lo que requiere aprobación, como mencioné anteriormente.

1 me gusta

Para añadir a lo que escribió @Firepup650, cuando tu código llama a

DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_2_groups);

está llamando a una función auxiliar que realiza una solicitud a la ruta sync_sso de Discourse: Sync DiscourseConnect user data with the sync_sso route. Esa solicitud se utiliza para actualizar un usuario existente o para crear nuevos usuarios. Si el usuario con $user_id nunca ha iniciado sesión en tu sitio de Discourse, se creará un nuevo usuario. Aún así, debería agregarse a los grupos sin ningún problema, pero generará una notificación para los moderadores porque tu sitio ha habilitado la configuración del sitio must approve users (debe aprobar usuarios):

1 me gusta

Hola @simon, vuelvo a tener un problema.

Quiero sincronizar los datos del usuario cuando se registra en el sitio web y también agregarlo a Discourse, pero no se sincroniza la información de los campos personalizados en su perfil de Discourse. Aquí está mi código para que lo revises.

add_action( 'user_register', 'user_registered_callback', 10, 1 ); // Ajustado para aceptar solo un argumento

function user_registered_callback($user_id) {
    // Obtener datos del usuario basándose en el ID de usuario
    $user_data = get_userdata($user_id);

    // Comprobar si los datos del usuario existen
    if ($user_data) {
        // Obtener los roles del usuario
        $roles = $user_data->roles;

        // Comprobar si el usuario tiene el rol s2Member
        if (in_array('s2member_level1', $roles)) {
            $s2member_level_1_groups = get_option('s2member_level_1_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_1_groups);

            // Obtener campos personalizados
            $custom_fields = get_user_option('1709753088_wp_s2member_custom_fields', $user_id);
            // Preparar el array de parámetros SSO
            $sso_params_array = [];
            $sso_params_array = [
				'external_id' => $user_id,
                'custom.user_interests' => $custom_fields['user_interests'],
                'custom.user_age' => $custom_fields['user_age'],
                'custom.user_gender' => $custom_fields['user_gender'],
                'custom.user_sexual' => $custom_fields['user_sexual'],
                'custom.user_facebook' => $custom_fields['user_facebook'],
                'custom.user_linkedin' => $custom_fields['user_linkedin'],
                'custom.users_reasons' => $custom_fields['users_reasons']
            ];

            $fields_updated = DiscourseUtilities::sync_sso_record($sso_params_array, $user_id);
			var_dump($fields_updated);
			die();
        } elseif (in_array('s2member_level2', $roles)) {
            $s2member_level_2_groups = get_option('s2member_level_2_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_2_groups);
        } elseif (in_array('s2member_level3', $roles)) {
            $s2member_level_3_groups = get_option('s2member_level_3_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_3_groups);
        } elseif (in_array('s2member_level4', $roles)) {
            $s2member_level_4_groups = get_option('s2member_level_4_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_4_groups);
        } else {
            // Recopilar todos los grupos de nivel
            $s2member_level_1_groups = get_option('s2member_level_1_groups', '');
            $s2member_level_2_groups = get_option('s2member_level_2_groups', '');
            $s2member_level_3_groups = get_option('s2member_level_3_groups', '');
            $s2member_level_4_groups = get_option('s2member_level_4_groups', '');

            // Combinar todos los grupos en un solo array
            $s2member_level_groups = array_merge(
                explode(',', $s2member_level_1_groups),
                explode(',', $s2member_level_2_groups),
                explode(',', $s2member_level_3_groups),
                explode(',', $s2member_level_4_groups)
            );

            // Eliminar duplicados
            $s2member_level_groups = array_unique($s2member_level_groups);

            // Eliminar al usuario de todos los grupos recopilados
            foreach ($s2member_level_groups as $group) {
                $result = DiscourseUtilities::remove_user_from_discourse_group($user_id, $group);
                // Puedes manejar $result según sea necesario
            }
        }
    } else {
        // Manejar casos donde los datos del usuario no están disponibles
        // Registrar un mensaje o manejar de otra manera según tus requisitos
        error_log("User data not available in user_registered_callback.");
    }
}

Ahora puedes revisar este código.

  $sso_params_array = [
				'external_id' => $user_id,
                'custom.user_interests' => $custom_fields['user_interests'],
                'custom.user_age' => $custom_fields['user_age'],
                'custom.user_gender' => $custom_fields['user_gender'],
                'custom.user_sexual' => $custom_fields['user_sexual'],
                'custom.user_facebook' => $custom_fields['user_facebook'],
                'custom.user_linkedin' => $custom_fields['user_linkedin'],
                'custom.users_reasons' => $custom_fields['users_reasons']
            ];

Cuando hago var_dump($fields_updated); me devuelve true, pero no agrega los datos al perfil del usuario en Discourse. ¿Cuál es el problema?

A menos que algo haya cambiado, necesitas usar el enfoque que se describe aquí: Map custom User Fields - #7 by simon.

Primero, asegúrate de que los campos personalizados ya existan en Discourse. Luego, en la página /admin/customize/user_fields de tu sitio de Discourse, agrega .json a la URL para que puedas ver el JSON del campo de usuario. Por ejemplo http://localhost:4200/admin/customize/user_fields.json.

Usa los valores de id del JSON para establecer claves SSO que se vean así: custom.user_field_<field_id>. Por ejemplo custom.user_field_1

No puedo probar esto ahora mismo. Hazme saber si esto funciona. Si aún no se ha hecho, debería documentarse en su propio tema.

Hola @simon, he usado tu enfoque que mencionaste y aquí está mi código ahora

add_action( 'user_register', 'user_registered_callback', 10, 1 ); // Ajustado para aceptar solo un argumento

function user_registered_callback($user_id) {
    // Obtener datos del usuario basándose en el ID de usuario
    $user_data = get_userdata($user_id);
// 	$user = get_user_by( 'ID', $user_id );
    // Comprobar si los datos del usuario existen
    if ($user_data) {
        // Obtener los roles del usuario
        $roles = $user_data->roles;

        // Comprobar si el usuario tiene el rol s2Member
        if (in_array('s2member_level1', $roles)) {
            $s2member_level_1_groups = get_option('s2member_level_1_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_1_groups);
			 $sso_params = array();
//             // Obtener campos personalizados
//             $custom_fields = get_user_option('1709753088_wp_s2member_custom_fields', $user_id);
//             // Preparar el array de parámetros SSO
//             $sso_params_array = [];
//             $sso_params_array = [
// 				'external_id' => $user_id,
//                 'custom.user_field_1' => $custom_fields['user_interests'],
//                 'custom.user_field_2' => $custom_fields['user_age'],
//                 'custom.user_field_3' => $custom_fields['user_gender'],
//                 'custom.user_field_4' => $custom_fields['user_sexual'],
//                 'custom.user_field_5' => $custom_fields['users_reasons']
//             ];

//             $fields_updated = DiscourseUtilities::sync_sso_record($sso_params_array);
			 $sso_params = apply_filters( 'wpdc_sso_params', $sso_params, $user_data );
			var_dump($sso_params);
			die();
        } elseif (in_array('s2member_level2', $roles)) {
            $s2member_level_2_groups = get_option('s2member_level_2_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_2_groups);
        } elseif (in_array('s2member_level3', $roles)) {
            $s2member_level_3_groups = get_option('s2member_level_3_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_3_groups);
        } elseif (in_array('s2member_level4', $roles)) {
            $s2member_level_4_groups = get_option('s2member_level_4_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_4_groups);
        } else {
            // Recopilar todos los grupos de nivel
            $s2member_level_1_groups = get_option('s2member_level_1_groups', '');
            $s2member_level_2_groups = get_option('s2member_level_2_groups', '');
            $s2member_level_3_groups = get_option('s2member_level_3_groups', '');
            $s2member_level_4_groups = get_option('s2member_level_4_groups', '');

            // Combinar todos los grupos en un solo array
            $s2member_level_groups = array_merge(
                explode(',', $s2member_level_1_groups),
                explode(',', $s2member_level_2_groups),
                explode(',', $s2member_level_3_groups),
                explode(',', $s2member_level_4_groups)
            );

            // Eliminar duplicados
            $s2member_level_groups = array_unique($s2member_level_groups);

            // Eliminar al usuario de todos los grupos recopilados
            foreach ($s2member_level_groups as $group) {
                $result = DiscourseUtilities::remove_user_from_discourse_group($user_id, $group);
                // Puedes manejar $result según sea necesario
            }
        }
    } else {
        // Manejar casos donde los datos del usuario no están disponibles
        // Registrar un mensaje o manejar de manera diferente según tus requisitos
        error_log("Datos de usuario no disponibles en user_registered_callback.");
    }
}




add_filter( 'wpdc_sso_params', 'my_namespace_set_discourse_custom_field', 10, 2 );

function my_namespace_set_discourse_custom_field( $sso_params, $user ) {
    $custom_fields = get_user_option('1709753088_wp_s2member_custom_fields', $user->ID);
	
    // Comprobar si $custom_fields es un array y no está vacío
    if (is_array($custom_fields) && !empty($custom_fields)) {
        // Asignar campos personalizados a las claves respectivas en los parámetros SSO
        $sso_params['custom.user_field_1'] = $custom_fields['user_interests'];
        $sso_params['custom.user_field_2'] = $custom_fields['user_age'];
        $sso_params['custom.user_field_3'] = $custom_fields['user_gender'];
        $sso_params['custom.user_field_4'] = $custom_fields['user_sexual'];
        $sso_params['custom.user_field_5'] = $custom_fields['users_reasons'];
    } else {
        // Registrar o mostrar un mensaje de error si $custom_fields no tiene el formato esperado
        error_log('Los datos de los campos personalizados no tienen el formato esperado.');
    }

    // Devolver los parámetros SSO modificados
    return $sso_params;
}

ahora el único problema es que no está agregando users_reasons a custom.user_field_5 y está agregando otros datos al perfil del usuario. Por ejemplo, si comento esta línea $sso_params['custom.user_field_5'] = $custom_fields['users_reasons'];, entonces está agregando los datos de otros campos a Discourse y si no comento esta línea, entonces no se agregan datos al perfil del usuario en Discourse. Ahora necesito decir que el campo users_reasons tanto en el sitio de Discourse como en el sitio de WordPress es un campo de selección múltiple, ¿podría ser esta la razón? Por favor, dime.

Sí, el problema es que es un campo de selección múltiple. No estoy seguro de si eso es compatible todavía: Add support for multi-select fields in DiscourseConnect protocol.

Tal vez haya una manera de hacerlo funcionar ahora, pero no veo cómo. El código de Discourse que se llama está aquí: discourse/app/models/discourse_connect.rb at main · discourse/discourse · GitHub

Hola @simon, ¿puedes escribir un ejemplo de código según mi código con la referencia que proporcionaste?

No creo que sea posible. Por lo que puedo decir, el código para establecer campos personalizados desde la carga útil SSO ha cambiado ligeramente desde que se escribió la publicación que enlacé, pero no ha cambiado de una manera que permita actualizar campos de selección múltiple desde la carga útil SSO.

Idealmente, Discourse manejaría el caso de una manera similar a como maneja el campo SSO add_groups: discourse/app/models/discourse_connect.rb at main · discourse/discourse · GitHub. Para que eso funcione, el código SSO de Discourse necesitaría saber si un campo personalizado en particular era un campo de selección múltiple. No creo que el código tenga esa información ahora.

Nuevamente, puede haber una manera de hacerlo ahora, pero está más allá de mi conocimiento.

Hola @simon, quiero sincronizar el avatar del usuario entre WordPress y Discourse. Como ya estoy usando el plugin WP Discourse para SSO, ahora quiero que cuando un usuario cambie su avatar en el sitio web de Discourse, también se cambie en el sitio web de WordPress. ¿Cómo se puede hacer esto? Quiero usar un plugin de avatar de usuario en el sitio web de WordPress y aquí está el código que estoy usando:

function my_wpdc_sso_client_updated_user( $updated_user, $query ) {
		$avatar_url = $query['avatar_url'];
		$user_id = $updated_user->ID;
		// esto nos permite usar las funciones download_url() y wp_handle_sideload()
	require_once( ABSPATH . 'wp-admin/includes/file.php' );

	// descargar a un directorio temporal
	$temp_file = download_url( $avatar_url );

	if( is_wp_error( $temp_file ) ) {
		return false;
	}

	// mover el archivo temporal al directorio de subidas
	$file = array(
		'name'     => basename( $image_url ),
		'type'     => mime_content_type( $temp_file ),
		'tmp_name' => $temp_file,
		'size'     => filesize( $temp_file ),
	);
	$sideload = wp_handle_sideload(
		$file,
		array(
			'test_form'   => false // no es necesario comprobar el parámetro 'action'
		)
	);

	if( ! empty( $sideload[ 'error' ] ) ) {
		// puedes devolver un mensaje de error si quieres
		return false;
	}

	// es hora de añadir nuestra imagen subida a la biblioteca de medios de WordPress
	$attachment_id = wp_insert_attachment(
		array(
			'guid'           => $sideload[ 'url' ],
			'post_mime_type' => $sideload[ 'type' ],
			'post_title'     => basename( $sideload[ 'file' ] ),
			'post_content'   => '',
			'post_status'    => 'inherit',
		),
		$sideload[ 'file' ]
	);

	if( is_wp_error( $attachment_id ) || ! $attachment_id ) {
		return false;
	}

	// actualizar metadatos, regenerar tamaños de imagen
	require_once( ABSPATH . 'wp-admin/includes/image.php' );

	wp_update_attachment_metadata(
		$attachment_id,
		wp_generate_attachment_metadata( $attachment_id, $sideload[ 'file' ] )
	);

	// Devolver el ID del adjunto
	update_user_meta($user_id, '1709753088_wp_user_avatar', $attachment_id);
	update_user_meta($user_id, 'wp_user_avatar', $attachment_id);
}

Como puedes ver, quiero actualizar las claves meta del usuario usando el ID del adjunto, pero el ID del adjunto no se está creando.

Espero tu respuesta.

Gracias.