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

y en mi configuración en discourse wp estoy usando el proveedor de discourse connect

hola @simon @Firepup650 después de mucho tiempo necesito ayuda de nuevo
aquí está mi código

use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
function mepr_capture_new_member_signup_completed($event) {
    $user = $event->get_data();
    $user_id = $user->ID;
    
    // Obtener datos del usuario según el ID de usuario
    $user_data = get_userdata($user_id);
	
    // Registrar información de depuración sobre los datos del usuario
    log_debug_info("debug_log.txt", "User Data: ", print_r($user_data, true));

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

        // Comprobar si el usuario no tiene el rol "browns" o si lo tiene
        if (!in_array('browns', $roles) || in_array('browns', $roles)) {
            // Eliminar todos los roles existentes
            foreach ($roles as $role) {
                $user_data->remove_role($role);
            }

            // Añadir el rol "browns"
            $user_data->add_role('browns');
            log_debug_info("debug_log.txt", "Assigned Browns Role: ", print_r($user_data, true));
			if ( class_exists( '\\WPDiscourse\\Discourse\\Discourse' ) ) {
			            // Añadir usuario al grupo de Discourse para "browns"
            $s2member_level_1_groups = get_option('s2member_level_1_groups', '');
			log_debug_info("debug_log.txt", "s2member level 1 groups: ", print_r($s2member_level_1_groups, true));
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_1_groups);
            log_debug_info("debug_log.txt", "Discourse Group Addition Result: ", print_r($result, true));
}


            // Parámetros SSO adicionales si son necesarios
            $sso_params = array();
            $sso_params = apply_filters('wpdc_sso_params', $sso_params, $user_data);

        } else {
            // Recopilar todos los grupos de niveles
            $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 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 $user_id o $role no se proporcionan
        // Esto podría registrarse o manejarse de manera diferente según tus requisitos
        // Por ahora, registremos un mensaje
        error_log("User ID or role not provided in user_registered_callback.");
    }
}

add_action('mepr-event-member-signup-completed', 'mepr_capture_new_member_signup_completed');


ahora el asunto es que no está agregando al usuario al grupo de discourse y aquí está la salida del código

=== User Data: ===
WP_User Object
(
[data] => stdClass Object
(
[ID] => 457
[user_login] => sibahmed
[user_pass] => $P$BTVeX1n6d40NtHBCiQqzSphMolH/hH0
[user_nicename] => sibahmed
[user_email] => sibahmed82@gmail.com
[user_url] =>
[user_registered] => 2024-07-30 17:35:51
[user_activation_key] =>
[user_status] => 0
[display_name] => sib ahmed
)

[ID] => 457
[caps] => Array
    (
        [subscriber] => 1
        [browns] => 1
    )

[cap_key] => wp_capabilities
[roles] => Array
    (
        [0] => subscriber
        [1] => browns
    )

[allcaps] => Array
    (
        [read] => 1
        [level_0] => 1
        [upload_files] => 1
        [access_s2member_level0] => 1
        [subscriber] => 1
        [browns] => 1
    )

[filter] => 
[site_id:WP_User:private] => 1

)

=== Assigned Browns Role: ===
WP_User Object
(
[data] => stdClass Object
(
[ID] => 457
[user_login] => sibahmed
[user_pass] => $P$BTVeX1n6d40NtHBCiQqzSphMolH/hH0
[user_nicename] => sibahmed
[user_email] => sibahmed82@gmail.com
[user_url] =>
[user_registered] => 2024-07-30 17:35:51
[user_activation_key] =>
[user_status] => 0
[display_name] => sib ahmed
[user_level] => 0
)

[ID] => 457
[caps] => Array
    (
        [browns] => 1
    )

[cap_key] => wp_capabilities
[roles] => Array
    (
        [0] => browns
    )

[allcaps] => Array
    (
        [read] => 1
        [browns] => 1
    )

[filter] => 
[site_id:WP_User:private] => 1

)

=== s2member level 1 groups: ===
Member

=== Discourse Group Addition Result: ===
WP_Error Object
(
[errors] => Array
(
[wpdc_response_error] => Array
(
[0] => An invalid response was returned from Discourse
)

    )

[error_data] => Array
    (
        [wpdc_response_error] => Array
            (
                [http_code] => 404
                [http_body] => {"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}
            )

    )

[additional_data:protected] => Array
    (
    )

)

En este momento no estoy haciendo ningún desarrollo de WordPress, así que no puedo probar tu código. Creo que el problema está aquí:

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

Si estoy leyendo los registros correctamente, esa llamada está devolviendo:

[error_data] => Array
    (
        [wpdc_response_error] => Array
            (
                [http_code] => 404
                [http_body] => {"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}
            )

Supongo que el problema es que no existe un grupo con el nombre "Member" en tu sitio de Discourse.

No estoy seguro de lo que estás haciendo aquí, pero no creo que esté relacionado con el error:

   // Parámetros SSO adicionales si son necesarios
            $sso_params = array();
            $sso_params = apply_filters('wpdc_sso_params', $sso_params, $user_data);
1 me gusta

Hola @Haseeb_Ahmed, he movido este tema a Dev ya que se centra en la asistencia con la codificación PHP. Quizás tenga tiempo de echar un vistazo más de cerca a tu código la próxima semana.

Hola @simon, incluso si cambio el nombre del grupo, todavía me da esta respuesta


=== s2member level 1 groups: ===
staff

=== Discourse Group Addition Result: ===
WP_Error Object
(
    [errors] => Array
        (
            [wpdc_response_error] => Array
                (
                    [0] => Se devolvió una respuesta no válida de Discourse
                )

        )

    [error_data] => Array
        (
            [wpdc_response_error] => Array
                (
                    [http_code] => 404
                    [http_body] => {"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}
                )

        )

    [additional_data:protected] => Array
        (
        )

)